我想知道我上次使用宏的时间是什么时候。
我有一个不断更新的宏,并且它位于不同的计算机上,因此有时很难跟踪最新的宏。
我想知道:
- 我能知道 VBA 宏上次修改的时间吗?
- 我可以看到宏中的使用日志吗?
- 我可以在 VBA 本身中添加带有使用日期的注释吗
答案1
- 我能知道 VBA 宏上次修改的时间吗?
不,Excel 中没有这种级别的日志记录(其他 MS Office 应用程序中也没有)
- 我可以看到宏中的使用日志吗?
不,Excel 中没有这种级别的日志记录(其他 MS Office 应用程序中也没有)
- 我可以在 VBA 本身中添加带有使用日期的注释吗
是的,您可以使用宏修改代码,但是修改正在运行的代码可能会有风险。
您可以在此问题中找到示例代码: https://stackoverflow.com/questions/38961711/excel-vba-programmatically-insertline-of-code-to-a-specific-sub-macro-in-a-wor
答案2
VBA 不提供这些现成的功能。但是,定义一个类来提供宏并管理“LastUsed”函数以及每次调用该函数的日志是完全可行的。
编辑于 2019 年 10 月 15 日,添加了在 VBA 项目中查找方法的代码
以下代码提取方法的文本,因此您现在可以轻松地在不同的时间间隔比较该方法。
Public Sub TestGetMethodText()
Debug.Print GetMethodText("GetMethodText")
End Sub
Public Function GetMethodText(ByVal MethodName As String) As String
' Requires a reference to 'Microsoft Visual Basic for Applications Extensibility'
' Assumes the Method name is unique in any of the modules/classes in any open projects.
Dim myProject As VBIDE.VBProject
Dim myComponent As VBIDE.VBComponent
Dim myProcKind As VBIDE.vbext_ProcKind
GetMethodText = "Not Found"
For Each myProject In VBE.VBProjects
For Each myComponent In myProject.VBComponents
With myComponent.CodeModule
myFirstLine = 1
myProcKind = 0
If .Find("Function " & MethodName, 1, 1, -1, -1) Then
GetMethodText = _
.Lines _
( _
.ProcBodyLine(MethodName, myProcKind), _
.ProcCountLines(MethodName, myProcKind) _
)
Exit Function
End If
End With
Next
Next
End Function