엑셀 VBA에서 Application.Run 메서드는 매크로 또는 다른 VBA 프로시저를 실행하는 기능을 제공합니다.
즉, 동적으로 VBA 함수를 호출하거나, 다른 워크북의 매크로를 실행할 때 사용됩니다.
1. 기본 문법
Application.Run "매크로이름"
|
매개변수
|
설명
|
"매크로이름"
|
실행할 매크로(서브루틴) 또는 함수의 이름
|
매개변수1, 매개변수2, ...
|
실행할 매크로에 전달할 인수
|
📌 VBA의 Call 또는 Sub() 호출 방식과 달리 문자열을 사용하여 실행 가능
📌 동적으로 함수 이름을 변경하거나, 외부 파일의 매크로 실행 가능
2. 기본 사용법 (같은 워크북 내 매크로 실행)
Sub 다른매크로_실행()
Application.Run "내매크로"
End Sub
Sub 내매크로()
MsgBox "내매크로가 실행되었습니다!"
End Sub
|
📌 현재 워크북에서 내매크로라는 매크로 실행
3. 매개변수를 포함하여 실행
Sub 다른매크로_실행_매개변수()
Application.Run "매개변수매크로", "안녕하세요!", 10
End Sub
Sub 매개변수매크로(문자 As String, 숫자 As Integer)
MsgBox "문자: " & 문자 & vbNewLine & "숫자: " & 숫자
End Sub
|
📌 매크로 실행 시 "안녕하세요!"와 10을 인수로 전달
4. 외부 워크북(.xlsm)의 매크로 실행
Sub 외부매크로_실행()
Application.Run "'C:\Users\Public\외부파일.xlsm'!외부매크로"
End Sub
|
📌 외부 파일(외부파일.xlsm)에 있는 외부매크로 실행
📌 파일 경로와 매크로 이름을 '워크북이름'!매크로명 형식으로 작성
📌 외부 파일이 열려 있어야 함 (Workbooks.Open으로 열 수 있음)
5. 외부 워크북을 열고 매크로 실행
Sub 외부파일_열고_매크로실행()
Dim 외부파일 As Workbook
Set 외부파일 = Workbooks.Open("C:\Users\Public\외부파일.xlsm")
Application.Run "'외부파일.xlsm'!외부매크로"
외부파일.Close False ' 변경 사항 저장 없이 닫기
End Sub
|
📌 외부 파일을 열고, 외부매크로 실행 후 저장 없이 닫기
6. 동적으로 매크로 이름 설정 후 실행
Sub 동적매크로_실행()
Dim 매크로이름 As String
매크로이름 = "내매크로" ' 실행할 매크로 이름
Application.Run 매크로이름
End Sub
|
📌 변수에 저장된 매크로 이름을 사용하여 실행
7. 사용자 입력을 받아 특정 매크로 실행
Sub 사용자입력_매크로실행()
Dim 매크로 As String
매크로 = InputBox("실행할 매크로 이름을 입력하세요:")
If 매크로 <> "" Then
Application.Run 매크로
Else
MsgBox "매크로 실행이 취소되었습니다.", vbExclamation
End If
End Sub
|
📌 사용자가 입력한 매크로를 실행하도록 설정
8. 현재 열려 있는 다른 워크북의 매크로 실행
Sub 열린워크북_매크로실행()
Dim 대상워크북 As Workbook
Set 대상워크북 = Workbooks("외부파일.xlsm")
Application.Run "'" & 대상워크북.Name & "'!외부매크로"
End Sub
|
📌 현재 열려 있는 외부파일.xlsm에서 외부매크로 실행
9. Run을 사용하여 함수의 반환값 받기
Sub 함수결과_받기()
Dim 결과 As Integer
결과 = Application.Run("더하기함수", 5, 3)
MsgBox "계산 결과: " & 결과
End Sub
Function 더하기함수(숫자1 As Integer, 숫자2 As Integer) As Integer
더하기함수 = 숫자1 + 숫자2
End Function
|
Function
📌 VBA 함수(더하기함수)를 실행하고 반환값을 변수에 저장
10. On Error Resume Next로 오류 방지
Sub 매크로실행_오류처리()
On Error Resume Next
Application.Run "없는매크로"
If Err.Number <> 0 Then
MsgBox "매크로를 찾을 수 없습니다!", vbCritical
Err.Clear
End If
End Sub
|
📌 매크로가 존재하지 않을 경우 오류 발생을 방지하고 메시지 표시
📝 정리
기능
|
VBA 코드
|
같은 워크북의 매크로 실행
|
Application.Run "매크로명"
|
매개변수 포함 실행
|
Application.Run "매크로명", 값1, 값2
|
외부 워크북 매크로 실행
|
Application.Run "'파일경로.xlsm'!매크로명"
|
외부 파일 열고 실행 후 닫기
|
Workbooks.Open "경로": Application.Run "매크로명"
|
동적으로 매크로 실행
|
Dim 매크로: 매크로 = "이름": Application.Run 매크로
|
사용자 입력 매크로 실행
|
Application.Run InputBox("매크로 이름 입력")
|
현재 열린 워크북 매크로 실행
|
Application.Run "'" & Workbooks("파일명.xlsm").Name & "'!매크로명"
|
함수 실행 후 반환값 받기
|
Dim 결과: 결과 = Application.Run("함수명", 값1, 값2)
|
오류 방지 (On Error Resume Next)
|
If Err.Number <> 0 Then MsgBox "오류 발생"
|
🔥 VBA의 Run 메서드를 활용하면 매크로를 동적으로 실행하고, 외부 파일의 매크로도 호출할 수 있습니다! 🚀