在VBA中编写代码的新手,我需要添加一种计算/跟踪宏使用频率的方法。我很难找到任何可以执行此功能的代码示例。请求任何可能的例子。
答案 0 :(得分:1)
Excel VBA没有任何在会话中持续存在的内置存储 - 当应用程序关闭时,所有变量都会被释放。但是,您确实拥有一个随时可用的存储源 - 工作簿本身。这是一种方法:
制作名为Counter
(或其他)的工作表。可选地,隐藏它以便没有人混淆它。然后,当您的宏运行时,增加Cell(1,1)
的值,这将保存您的计数器值。
Dim runCount As Integer
Dim counterWS As Worksheet
Set counterWS = ThisWorkbook.Worksheets("Counter")
If counterWS.Cells(1,1) <> vbNullString And IsNumeric(counterWS.Cells(1,1)) Then
runCount = counterWS.Cells(1,1) + 1
Else
runCount = 1
End If
counterWS.Cells(1,1) = runCount
答案 1 :(得分:0)
在声明变量时使用static
。
过程中的静态声明将变量限制为该过程 - 但有助于保留先前运行的变量值,直到使用“ReDim”或值设置通过显式声明强制重新初始化。
Sub MySub( )
Static Cnt As Integer
Dim Msg As String
Cnt = Cnt + 1
Msg = “You’ve run the procedure ” & Cnt & ” times”
MsgBox Msg
End Sub
答案 2 :(得分:0)
这将在隐藏的工作表上为您构建一个表格,显示宏的所有历史用途,直到 n 使用宏以及时间戳,以便您知道何时使用了宏。有了这个,您可以使用方程式来提取您想要的精确数据。如果你想要一个单元格显示使用计数,只需要“Countif(”A:A“,”*“) - 1”...(减去1以忽略A1中的标题)
实施此宏:
创建一个名为“MacroCount”的新工作表
设置A1 =“实例”
设置B1 =“时间戳”
我个人认为这是宏做的最后一件事,所以一旦宏完成所有分配的职责,它只会计算实例。
另外,删除“Sub MacroCount()”&amp;以下代码中的“End Sub”。
Sub MacroCount()
Dim WS As Worksheet
Set WS = ThisWorkbook.Sheets("MacroCount")
Application.Screenupdating = False
WS.Visible = True
Dim LRow As Long
LRow = WS.Range("A" & Rows.Count).End(xlUp).Offset(1).Row
WS.Range("A" & LRow).Value = LRow - 1
WS.Range("B" & LRow).Value = Now()
WS.Visible = False
Application.Screenupdating = True
End Sub