위에서 언급 한 Rory와 마찬가지로 전체 모듈이 아니라 특정 루틴을 호출합니다. 그러나 모든 루틴을 호출하려는 경우 매크로 1, 매크로 2, 매크로 3 등은 모듈에서 가능합니까?
YES
아래와 같은 Module1
이 SIMPLE ROUTINES가있는 경우 다음 네,이 모듈의 모든 프로 시저를 호출 할 수 있습니다.
이제 단순히
Module2
에이 코드를 붙여
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
에서의 당신이 있다고 가정 해 봅시다. 또한 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에서 각각의 모든 과정은 자동으로 실행됩니다.
module1의 매크로를 하나씩 호출하는 방법은 무엇입니까? –
사실 저는 전체 모듈을 호출하려고합니다. 가능한가? –
아니요. 전체 모듈이 아닌 특정 루틴을 호출합니다. – Rory