programing

다른 워크북에서 매크로 실행

muds 2023. 6. 10. 09:48
반응형

다른 워크북에서 매크로 실행

나는 워크북 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

반응형