请帮助解决以下问题:
1)一个代码,用于设置“Module3”的所有宏的列表,并将此列表放在“Sheet5”中,从下面的单元格“E14”开始。
2)然后,代码应该运行所有列出的宏
我尝试使用引用VBComponent
的代码,但是我收到了错误。
答案 0 :(得分:3)
基于我的谷歌搜索,我找到了答案,我评论过你,但他们忘记了重要的事情,那就是检查并选择允许你运行宏。
首先使用函数列出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
下一步,好吧可能是第一步,你需要更改办公室(Excel)trustcenter的一些配置,检查以下图片:
第1步:
第2步:
步骤3(最终)检查选项&#34;依赖于访问数据模型项目vba&#34;:
然后您需要将此引用添加到Excel:
如果您有其他版本的Microsoft Visual Basic for Applications Extensibility,请不要担心,在本例中为5.3。检查然后接受。不要忘记你需要找到那个参考,列表顶部没有。
最后你可以调用ListAllMacroNames()函数使用另一个名为execute()的宏,看看我已经验证了它没有调用相同的宏(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 更改&#34; Module_name&#34;在第一种方法中,到您的愿望模块,并在执行方法中设置相关表名称(在本例中为表5)。