获取一个模块的macros在Excel中的列表,然后调用所有这些macros

请帮助以下几点:

1)设置“Module3”的所有macros列表的代码,并将该列表放置在“Sheet5”中,从下面的单元格“E14”开始。

2)然后,代码应该运行所有列出的macros

我尝试了一个引用VBComponent的代码,但是我得到了一个错误。

基于我的谷歌search,我find了答案,我评论你,但他们忘了和重要的事情,那就是检查和选项,让你运行macros。

首先函数列出excel中的所有macros,并返回并用空格分隔string:

 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 

下一步,可能是第一步,您需要更改办公室(Excel)信任中心的某些configuration,请检查以下图像:

步骤1:

步骤1

第2步:

第2步

第3步(最后)检查选项“依靠访问数据模型项目vba”:

最后一步

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

步骤2.5

不要担心,如果您有另一个版本的Microsoft Visual Basic for Applications Extensibility,在这种情况下是5.3。 检查然后接受。不要忘记你需要find那个参考,列表顶部没有。

步骤2.6

最后,你可以调用ListAllMacroNames()函数With This另一个名为execute()的macros,看看我validation了这不会调用相同的macros(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 

编辑2将第一种方法中的“Module_name”更改为您需要的模块,并在执行方法中设置对照表名称(本例中为表5)。

Interesting Posts