VBA 宏上次修改时间是什么时候

VBA 宏上次修改时间是什么时候

我想知道我上次使用宏的时间是什么时候。

我有一个不断更新的宏,并且它位于不同的计算机上,因此有时很难跟踪最新的宏。

我想知道:

  1. 我能知道 VBA 宏上次修改的时间吗?
  2. 我可以看到宏中的使用日志吗?
  3. 我可以在 VBA 本身中添加带有使用日期的注释吗

答案1

  1. 我能知道 VBA 宏上次修改的时间吗?

不,Excel 中没有这种级别的日志记录(其他 MS Office 应用程序中也没有)

  1. 我可以看到宏中的使用日志吗?

不,Excel 中没有这种级别的日志记录(其他 MS Office 应用程序中也没有)

  1. 我可以在 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

相关内容