在excel中获取模块宏的列表,然后调用所有这些宏

在excel中获取模块宏的列表,然后调用所有这些宏,excel,vba,call,vbe,Excel,Vba,Call,Vbe,请提供以下帮助: 1) 一种代码,用于设置“Module3”的所有宏的列表,并将该列表放置在“Sheet5”中,从下面的单元格“E14”开始 2) 然后,代码应该运行列出的所有宏 我尝试使用引用了VBComponent的代码,但出现了一个错误。基于我的谷歌搜索,我找到了我对您发表评论的答案,但他们忘记了一件重要的事情,那就是检查并选择允许您运行宏 首先使用函数列出excel中的所有宏,并返回以空格分隔的字符串: Function ListAllMacroNames() As String Di

请提供以下帮助:

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

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


我尝试使用引用了
VBComponent
的代码,但出现了一个错误。

基于我的谷歌搜索,我找到了我对您发表评论的答案,但他们忘记了一件重要的事情,那就是检查并选择允许您运行宏

首先使用函数列出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
函数listallmocronames()作为字符串
作为VBP项目的Dim pj
作为VBComponent的Dim vbcomp
Dim curMacro作为字符串,newMacro作为字符串
将x作为字符串
朦胧如弦
将宏设置为字符串
出错时继续下一步
curMacro=“”
文件。添加
对于Application.VBE.VBProjects中的每个pj
对于pj.VBComponents中的每个vbcomp
如果不是,那么vbcomp什么都不是
如果vbcomp.CodeModule=“模块名称”,则
对于i=1到vbcomp.CodeModule.countofline
newMacro=vbcomp.CodeModule.ProcOfLine(行:=i_
prockind:=vbext\u pk\u Proc)
如果curMacro newMacro那么
curMacro=newMacro
如果curMacro“”和curMacro“app_NewDocument”,则
宏=curMacro+“”+宏
如果结束
如果结束
下一个
如果结束
如果结束
下一个
下一个
ListAllMacroNames=宏
端函数
当然,下一步可能是第一步,您需要更改office(Excel)trustcenter的一些配置,检查以下图像:

步骤1:

步骤2:

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

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

如果您有其他版本的Microsoft Visual Basic for Applications Extensibility(在本例中为5.3),请不要担心。检查并接受。别忘了你需要找到那个参考,在列表的顶部没有

最后,您可以使用另一个名为execute()的宏调用listallmocronames()函数,看看我是否被验证过,它不会调用相同的宏(execute,listallmocronames),或者可能会生成一个无限循环

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
公共子执行()
将数组()设置为字符串
AppArray()=拆分(ListAllMacroNames,“”)
对于i=0到uBond(光线)
温度=射线(i)
如果是“临时”,那么
如果temp“execute”和temp“listallmocronames”,则
Application.Run(应用程序(i))
表5.范围(“E”和i+14).值=温度
如果结束
如果结束
接下来我
端接头

编辑2将第一个方法中的“模块名称”更改为您想要的模块,并在执行方法中设置相应的工作表名称(本例中为工作表5)。

基于我的谷歌搜索,我找到了我对您发表评论的答案,但他们忘记了一件重要的事情,那就是选中并选择允许您运行宏

首先使用函数列出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
函数listallmocronames()作为字符串
作为VBP项目的Dim pj
作为VBComponent的Dim vbcomp
Dim curMacro作为字符串,newMacro作为字符串
将x作为字符串
朦胧如弦
将宏设置为字符串
出错时继续下一步
curMacro=“”
文件。添加
对于Application.VBE.VBProjects中的每个pj
对于pj.VBComponents中的每个vbcomp
如果不是,那么vbcomp什么都不是
如果vbcomp.CodeModule=“模块名称”,则
对于i=1到vbcomp.CodeModule.countofline
newMacro=vbcomp.CodeModule.ProcOfLine(行:=i_
prockind:=vbext\u pk\u Proc)
如果curMacro newMacro那么
curMacro=newMacro
如果curMacro“”和curMacro“app_NewDocument”,则
宏=curMacro+“”+宏
如果结束
如果结束
下一个
如果结束
如果结束
下一个
下一个
ListAllMacroNames=宏
端函数
当然,下一步可能是第一步,您需要更改office(Excel)trustcenter的一些配置,检查以下图像:

步骤1:

步骤2:

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

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

如果您有其他版本的Microsoft Visual Basic for Applications Extensibility(在本例中为5.3),请不要担心。检查并接受。别忘了你需要找到那个参考,在列表的顶部没有

最后,您可以使用另一个名为execute()的宏调用listallmocronames()函数,看看我是否被验证过,它不会调用相同的宏(execute,listallmocronames),或者可能会生成一个无限循环

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
公共子执行()
将数组()设置为字符串
AppArray()=拆分(ListAllMacroNames,“”)
对于i=0到uBond(光线)
温度=射线(i)
如果是“临时”,那么
如果temp“execute”和temp“listallmocronames”,则
Application.Run(应用程序(i))
表5.范围(“E”和i+14).值=温度
如果结束
如果结束
接下来我
端接头

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

是否尝试使用此代码?WD2000:返回宏和过程名称的示例宏?谢谢@JuanRuizdeCastilla,我试过了,但出现了一个错误。我已经设置了excel设置,插入了一个新模块,并在其中添加了函数和子模块。但是,它显示为:“编译错误:未定义用户定义的类型”和“Di”