반응형
다른 워크북에서 매크로 실행
나는 워크북 A에 워크북 B의 매크로를 호출하는 매크로가 있습니다.워크북 B의 매크로를 실행한 다음 워크북 B를 종료합니다.워크북 B에서 실행하려는 매크로를 찾을 수 없다는 오류가 계속 발생합니다.저는 이것에 대해 거의 초보자이지만, 꽤 철저한 조사를 해왔고, 스스로 아무것도 생각해내지 못했습니다.여기 제 코드 전체가 있습니다.
Public Sub InputDept()
Dim Cap As Workbook
Dim Cap2 As String
On Error Resume Next
Set Cap = Workbooks("NGD Source File for Net Budget Reporting.xlsx")
Cap2 = Cap.Name
On Error GoTo 0
Dim wb As Workbook
Dim Cap1 As Variant
Application.ScreenUpdating = False
If Cap Is Nothing Then
Cap1 = Application.GetOpenFilename("Excel Files(*.xl*)," & "*.xl*", 1)
If Cap1 = False Then
Exit Sub
End If
Set wb = Workbooks.Open(Cap1)
Cap2 = ActiveWorkbook.Name
Else
Workbooks(Cap2).Activate
End If
Sheets("Dept Summary").Activate
Cells.Find(What:="Direct", after:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Offset(1, 0).Select
Range(Selection, Selection.End(xlDown)).Select
Dim cRng As Range
Dim dRng As Range
Set dRng = Selection
For Each cRng In dRng
If cRng.Interior.ThemeColor = xlThemeColorAccent3 Then
Dim mCalc As String
Dim mSum As Workbook
On Error Resume Next
Set mSum = Workbooks("Master Calc with Macro.xlsm")
mCalc = mSum.Name
On Error GoTo 0
Application.ScreenUpdating = False
If mSum Is Nothing Then
mSum1 = Application.GetOpenFilename("Excel Files.xl*),"& "*.xl*", 1)
If mSum1 = False Then
Exit Sub
End If
Set wb1 = Workbooks.Open(mSum1)
mCalc = ActiveWorkbook.Name
Else
Workbooks(mCalc).Activate
End If
cRng.Copy
Workbooks(mCalc).Activate
Sheets("Data").Select
Range("A5").Select
Selection.PasteSpecial Paste:=xlPasteValues
Sheets("Report").Activate
Workbooks(mCalc).Application.Run ("!SummarizeMaster")
Sheets("Report").Select
ActiveSheet.Copy
Cells.Select
Cells.Copy
Selection.PasteSpecial Paste:=xlPasteValues
ActiveWorkbook.SaveAs _
Filename:=Application.ThisWorkbook.Path & "\" & Format(Date - 28, "MMM") & " Files\" & Left(cRng, 7) & ".xlsx"
ActiveWorkbook.Close
Workbooks(mCalc).Close savechanges:=False
End If
Next cRng
End Sub
다음 줄:
Workbooks(mCalc).Application.Run ("!SummarizeMaster")
약간의 변화가 필요합니다.적절한 워크북을 지정하는 것처럼 보이더라도 워크북의 이름을 하나의 따옴표 안에 포함시켜야 합니다.Workbooks(mCalc)
:
Workbooks(mCalc).Application.Run ("'Master Calc with Macro.xlsm'!SummarizeMaster")
실제로 다음과 같이 단축할 수 있습니다.
Application.Run ("'Master Calc with Macro.xlsm'!SummarizeMaster")
매크로를 실행하는 워크북 경로를 사용하여 상대 매크로 경로를 찾아야 하고 배열 목록에서 여러 매크로를 실행해야 하는 경우 아래 코드가 도움이 됩니다.
Dim relativePath As String, programFileName As String
Dim selectedProgramsFiles() As String, programsArrayLastIndex As Byte, I As Byte
For I = 0 To programsArrayLastIndex 'Loop through all selected programs
programFileName = selectedProgramsFiles(I)
relativePath = ThisWorkbook.Path & "\" & programFileName
Workbooks.Open Filename:=relativePath
Application.Run ("'" & relativePath & "'!ModuleName.Main")
Workbooks(programFileName).Activate
ActiveWorkbook.Close SaveChanges:=False
Next I 'For I = 0 To programsArrayLastIndex 'Loop through all selected program
Application.Run "PERSONAL.xlsb!ClearYellow", 0
ClearYellow
의 서브 이름입니다.Personal.xlsb
실행 중입니다."0"은 이 서브의 첫 번째 인수입니다(인수가 없으면 생략되며 쉼표로 구분된 인수를 더 추가할 수 있습니다).
Application
필요 없어 보입니다.
다른 워크북에서도 실행할 수 있습니다. 워크북이 열려 있어야 합니다. 워크북의 이름에 공백이 있으면 이름을 둘러싸야 합니다.''
Call
워크북 간에 작동하지 않음, 동일한 워크북 또는 동일한 모듈 내에서 테스트되지 않음
언급URL : https://stackoverflow.com/questions/34211496/run-a-macro-from-another-workbook
반응형
'programing' 카테고리의 다른 글
vuex, vue-router, pinia 등에 액세스하는 방법SSR 친화적인 방식으로 Vue 구성 요소 외부에? (0) | 2023.06.10 |
---|---|
Firebase 데이터를 Java 개체로 변환하는 방법...? (0) | 2023.06.10 |
()에 대한 이해 및 파티션 분할 시도 (0) | 2023.06.10 |
C의 함수에서 로컬 변수 반환 (0) | 2023.06.10 |
스크킷 학습 의사 결정 트리에서 의사 결정 규칙을 추출하는 방법은 무엇입니까? (0) | 2023.06.10 |