Tag: vba

在Excel / VBA中禁用/启用button

我正在VBA / Excel中尝试以下function: Sub function_name() button.enabled=false Call Long_Function ' duration: 10sec button.enabled=true End Sub 出于某种原因,这个button禁用不起作用(它保持启用在Excel工作表)我试着尝试DoEvents和延迟,但没有运气那里。 有任何想法吗? 谢谢!

在VBA中设置基于可变单元格范围的图表源数据

我正在创build一个报告模板,其中的一部分将生成一个类似于移动平均线的结构的数据图表 为此,我需要在一个表格中select一个范围的数据(例如f10:i14 ),并将其设置为一个图表的来源 下面的一段代码工作 ActiveChart.SetSourceData Source:=Sheets("Weekly Trends").Range("f10,i14") 但是这不 ActiveChart.SetSourceData Source:=Sheets("Weekly Trends").Range(Cells(x, y), Cells(k, z)) 它会返回一个1004 error 但是为了报告的目的,我需要指定基于variables索引的范围,请大家帮忙

为什么一个小的Excel VBAmacros运行速度非常慢

我正在撰写一个简短的macros,以隐藏当前没有当前销售额的所有客户。 年初至今的销售额在K列(特别是K10-250)。 这些单元格使用vlookup从另一个选项卡中抽取数据,在这里我们转储数据。 我的问题是为什么这个macros需要10-15分钟才能运行? 在另一个电子表格中,我有一个类似的macros,超过1,500行只需要2-3分钟。 我已经closures了屏幕更新。 我想不出任何会加快速度的东西。 Sub HideNoSlackers() ' ' HideNoSlackers Macro ' ' Application.ScreenUpdating = False ' Sheets("CONSOLIDATED DATA").Select Dim cell As Range For Each cell In Range("K10:K250") If cell.Value = 0 Then cell.EntireRow.Hidden = True Else cell.EntireRow.Hidden = False End If Next End Sub

粘贴vba数组

我有这个代码将填充一个数组 Sub rangearray() Dim arr() As Variant Dim Rng As Range Dim myCell As Range Dim i As Integer Set Rng = ActiveSheet.Range("G10:G14") For Each myCell In Rng ReDim Preserve arr(i) arr(i) = myCell i = i + 1 Next myCell ActiveSheet.Range("H10:H14") = arr() End Sub 在这里您可以看到监视窗口中的值是已经加载的值 除了将数组添加回工作簿时,它只粘贴数组的第一个元素。 是否有可能将整个数组粘贴到工作表而不必循环访问数组? 更新看了从Sorceri的链接后,我已经修改了代码使用.Transpose函数,所以我修改后的代码现在看起来像这样: Sub rangearray() Dim arr() As […]

Excel VBA:获取HTML表td的内部文本

我正在使用Excel从网页获取值。 在其他元素中,HTML包含下表: <div id="myDiv"> <table class="myTable"> <tbody> <tr> <td>Text1:</td> <td class="data"><strong>0.51</strong></td> </tr> <tr> <td>Text2:</td> <td class="data"><strong>2199</strong></td> </tr> </tbody> </table> </div> 该页面存储在variablesoHtml中。 抓住这个表格外的其他元素工作正常。 但是当我尝试捕获值0.51例如,我在控制台中使用JS: document.getElementById("myDiv").getElementsByClassName("myTable")[0].getElementsByClassName("data")[0].innerText 然后select值0,51。 但是,函数内部使用的以下VBA代码正在返回#VALUE! Function myFunction(id) Call myConnection(id) Set myDadta = oHtml.getElementById("myDiv").getElementsByClassName("myTable")(0).getElementsByClassName("data")(0) myFunction = myData.innerText End Function 这是连接到IE: Public Sub myConnection(id) Set oHtml = New HTMLDocument With CreateObject("WINHTTP.WinHTTPRequest.5.1") .Open "GET", "http://www.example.com" & id, […]

如何根据类别组内的统计数据评估一个条件?

首先,我将展示一下我的数据和我到目前为止的代码的一个简单例子,所以解释我的问题会更容易一些。 考虑以下数据: ID Esp DBH Cod 55 E_grandis 9.00 55 E_grandis 9.71 7 55 E_grandis 10.00 55 E_grandis 1.00 7 55 E_grandis 7.00 7 55 E_grandis 1 我试图validation如果行与Cod = 7具有大于以下值: average of DBH – 1 * standard deviation of DBH. 在上面的例子中,DBH的平均值是7.34,标准偏差是3.73。 因此,标记Cod 7时,DBH值不应大于3.61(7.34 – 3.73)。 细胞D3和D6不通过标准,因为它们的DBH(C3和C6)大于3.61。 在所有具有Cod 7的行中,只有C5小于3.61。 我写下面的代码显示一个消息框,当这样的标准不符合: Sub Cod7() Dim msg As String […]

Excel:查找和replacemacros – 仅一列

我已经编写了一些macros来将一些数据加载到相同的接受格式中,我们从中提取的程序拒绝将数据拉到我们想要的地方,但是从理论上讲,在Excel中改变并不难。 它设置运行的方式是为修改器分配macros,然后是一个“全部运行”macros,它们只是对它们进行调用。 目前我有: Sub ReplaceTitleMs() ' ' Strips Mrs from Headteacher Name ' ' ' Columns("V").Select Cells.Replace What:="Ms ", Replacement:="", LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False End Sub 但是当我运行这个,它从整个工作表中删除女士和一列要求女士仍然在单元格(这是列W) 数据的一个例子是有效的: Ms Helen Smith Ms Brenda Roberts Ms Kirsty Jones 但是还有很多其他的标题正在被使用,所以我想只在macros中select的列上运行查找和replace。 macros作品find我想要的列…我只需要限制到该列!

MsgBox在Excel中的焦点

我在Excel中使用VBA计算大量数据,并在完成时显示MsgBox。 MsgBox实际上显示了计算所需的时间。 问题是用户在计算发生时决定做其他事情。 Excel继续计算,当它完成后,MsgBox会显示,但由于某种原因,Excel不会将焦点放到MsgBox。 Excel图标将在任务栏中闪烁,如果我们单击它,Excel会最大化,但MsgBox位于Excel窗口后面,我们永远不能单击它。 所以唯一的办法就是去taskkill excel.exe …不是很好。 Alt + Pause不起作用,因为代码将仅在当前代码行之后停止,这将在MsgBoxclosures时结束。 我之前试过AppActivate("Microsoft Excel")函数,没有任何成功( 我如何将焦点集中到一个msgbox? )。 由于Excel 2010将文档名称添加到窗口标题中,所以应用程序名称实际上比此长。 任何想法如何能解决这个恼人的问题?

循环虽然项目中的所有UDF名称

这个问题: 在Excel VBA中search函数的用法让我想到了一个自动search电子表格中使用的所有UDF的过程。 有些东西是: For Each UDF in Module1 If Cells.Find(What:=UDF.Name, After:="A1", LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False) Then MsgBox UDF.Name & " is in use" End If Next UDF 这是可能的,如果是这样的话,通过所有的UDF循环的语法是什么?

提高循环的速度

我正在尝试提高代码的速度。 我已经通过所有的基本技巧search了我的方式,并添加了一个计时器来帮助我确定我的代码运行需要多长时间。 每1000次迭代大约需要4.14次。 我已经阅读了一些关于将代码写入数组并读取回来的文章,但我不知道如何在这里应用这个想法。 也许还有另一种方法。 谢谢您的帮助! Sub Random() Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Application.DisplayStatusBar = False Application.DisplayAlerts = False Application.EnableEvents = False ActiveSheet.DisplayPageBreaks = False Dim wksData As Worksheet Dim StartTime As Double Dim SecondsElapsed As Double Dim x As Double Dim i As Double Set wksData = Sheets("Data") wksData.Range("O3:P1048576").ClearContents StartTime = Timer With […]