Har*_*nda 1 excel vba excel-vba
我在Module1里面有一些模块内的模块,即Module1有:
Sub Macro1
' Code
End Sub
Sub Macro2
' Code
End Sub
Run Code Online (Sandbox Code Playgroud)
现在,我想将这整个称为Microsoft Excel对象Module1中的ThisWorkbook可用内容
内部ThisWorkbook:
Sub CallingModule
**Call Module1 (I want to call in this way)**
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,这不是正确的程序.请告诉我调用模块的正确程序.
像上面提到的Rory一样,你可以调用特定的例程,而不是整个模块.但是,如果要从模块调用所有例程Macro1,Macro2,Macro3等,那么它可能吗?
是
请注意,如果您Module1有简单例程,如下图所示,然后是的,这是可以调用模块中的所有程序.
假设你有这些 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
Run Code Online (Sandbox Code Playgroud)

现在只需粘贴此代码即可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
Run Code Online (Sandbox Code Playgroud)
运行例程时CallModule1(),Module1中的每个过程都将自动运行.