根据我的谷歌搜索,我找到了我评论过你的答案,但他们忘记了重要的事情,那就是允许你运行宏的检查和选项。
首先是列出 Excel 中所有宏的函数,并返回以空格分隔的字符串:
Function ListAllMacroNames() As String
Dim pj As VBProject
Dim vbcomp As VBComponent
Dim curMacro As String, newMacro As String
Dim x As String
Dim y As String
Dim macros As String
On Error Resume Next
curMacro = ""
Documents.Add
For Each pj In Application.VBE.VBProjects
For Each vbcomp In pj.VBComponents
If Not vbcomp Is Nothing Then
If vbcomp.CodeModule = "Module_name" Then
For i = 1 To vbcomp.CodeModule.CountOfLines
newMacro = vbcomp.CodeModule.ProcOfLine(Line:=i, _
prockind:=vbext_pk_Proc)
If curMacro <> newMacro Then
curMacro = newMacro
If curMacro <> "" And curMacro <> "app_NewDocument" Then
macros = curMacro + " " + macros
End If
End If
Next
End If
End If
Next
Next
ListAllMacroNames = macros
End Function
Run Code Online (Sandbox Code Playgroud)
下一步,当然可能是第一步,您需要更改办公室(Excel)信任中心的一些配置,请检查以下图像:
步骤1:

第2步:

步骤3(最终)勾选“依赖访问数据模型项目vba”选项:

然后您需要将此引用添加到您的 Excel 中:

如果您有其他版本的 Microsoft Visual Basic for Applications Extensibility(本例中为 5.3),请不要担心。检查然后接受。不要忘记您需要找到该参考资料,列表顶部没有。

最后,您可以使用另一个名为execute()的宏调用ListAllMacroNames()函数,看看我已经验证它不会调用相同的宏(execute、ListAllMacroNames)或可能形成无限循环。
Public Sub execute()
Dim AppArray() As String
AppArray() = Split(ListAllMacroNames, " ")
For i = 0 To UBound(AppArray)
temp = AppArray(i)
If temp <> "" Then
If temp <> "execute" And temp <> "ListAllMacroNames" Then
Application.Run (AppArray(i))
Sheet5.Range("E" & i + 14).Value = temp
End If
End If
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
编辑2将第一个方法中的“Module_name”更改为您想要的模块,并在执行方法中设置正确的工作表名称(在本例中为工作表5)。
| 归档时间: |
|
| 查看次数: |
8156 次 |
| 最近记录: |