如何在Excel VBA中的ThisWorkbook中调用模块

Module1内部有一些macros,比如Module1有:

Sub Macro1 ' Code End Sub Sub Macro2 ' Code End Sub 

现在,我想在Microsoft Excel对象内的ThisWorkbook调用整个Module1

内部ThisWorkbook

 Sub CallingModule **Call Module1 (I want to call in this way)** End Sub 

但是,这不是正确的程序。 请告诉我正确的程序来调用一个模块。

像上面提到的Rory,你可以调用特定的例程,而不是整个模块。 但是,如果你想从一个模块调用所有的例程Macro1Macro2Macro3等,那么有可能吗?

请注意,如果您的Module1具有如下所示的SIMPLE ROUTINES ,那么可以调用模块中的所有过程。

假设你在Module1有这些

 Sub Sample1() MsgBox "I am Sample1" End Sub Sub Sample2() MsgBox "I am Sample2" End Sub Sub Sample3() MsgBox "I am Sample3" End Sub Sub Sample4() MsgBox "I am Sample4" End Sub 

在这里输入图像说明

现在只需将这些代码粘贴到Module2 。 您还需要设置对Microsoft Visual Basic For Applications Extensibility xx.xx库的引用。

 '~~> Code adapted from http://www.cpearson.com/excel/vbe.aspx Sub CallModule1() Dim VBProj As VBIDE.VBProject Dim VBComp As VBIDE.VBComponent Dim CodeMod As VBIDE.CodeModule Dim LineNum As Long, NumLines As Long Dim ProcName As String Dim ProcKind As VBIDE.vbext_ProcKind Dim MyAr() As String Dim n As Long Set VBProj = ActiveWorkbook.VBProject Set VBComp = VBProj.VBComponents("Module1") Set CodeMod = VBComp.CodeModule With CodeMod LineNum = .CountOfDeclarationLines + 1 Do Until LineNum >= .CountOfLines ReDim Preserve MyAr(n) ProcName = .ProcOfLine(LineNum, ProcKind) '~~> Store the routine names in an array MyAr(n) = ProcName n = n + 1 LineNum = .ProcStartLine(ProcName, ProcKind) + _ .ProcCountLines(ProcName, ProcKind) + 1 Loop End With '~~> This is where I am running every routine from Module1 For n = LBound(MyAr) To UBound(MyAr) Run "Module1." & MyAr(n) Next n End Sub Function ProcKindString(ProcKind As VBIDE.vbext_ProcKind) As String Select Case ProcKind Case vbext_pk_Get ProcKindString = "Property Get" Case vbext_pk_Let ProcKindString = "Property Let" Case vbext_pk_Set ProcKindString = "Property Set" Case vbext_pk_Proc ProcKindString = "Sub Or Function" Case Else ProcKindString = "Unknown Type: " & CStr(ProcKind) End Select End Function 

当您运行例程CallModule1() ,Module1中的每个过程都将自动运行。