2017-07-12 5 views
0

Nehmen wir an, ich habe 2 verschiedene Dateien: "1" und "a1". Ich will zweite öffnen Makro von "1" und dann einen Code von "a1"Wechsel zwischen Makros in verschiedenen Arbeitsmappen

Also, in "1" Ich habe folgenden Code ausführen:

Sub anotherMacro() 
Dim path As String 
Dim Fname As String 
Dim macroName As String 

path = ActiveWorkbook.path 
Fname = ActiveWorkbook.Name 

Workbooks.Open (path & "\a" & Fname) 
Application.Run "a1.xlsm!Module1.SecondMacro" 
MsgBox "Am I still here?" 

End Sub 

zweiten Makro in der Datei „a1 "sieht so aus:

Wenn ich den Application.Run-Befehl verwende, wird die msgbox nicht ausgeführt. Die "a1" wird geöffnet, geschlossen und es gibt keine weiteren Aktionen.

Gibt es eine Möglichkeit, zurück zu "1" zu gelangen und die msgbox anzuzeigen?

Antwort

0

Ich merke, dass nach der Ausführung Workbook.Close die VBA die Ausführung beendet. Daher sollten Sie auf Codes achten, die nach dem Workbook.Close platziert werden.

Sie können die Methode Workbook.Close auf 1.xlsm übertragen. Führen Sie alle Aktionen aus, bevor Sie die Methode Workbook.Close ausführen.

Ich modifizierte die Codes wie folgt.

1.xlsm Module1

Option Explicit 

Sub anotherMacro() 
    Dim path As String 
    Dim Fname As String 
    Dim macroName As String 

    With Application 
     path = .ThisWorkbook.path 
     Fname = .ThisWorkbook.Name 

     .Workbooks.Open (path & "\a" & Fname) 
     .Run "a1.xlsm!Module1.SecondMacro" 
    End With 
End Sub 

Sub WelcomeBack() 
    MsgBox "Am I still here?" 

    Application.ThisWorkbook.Activate 
     ' Activate 1.xlsm. This is optional, depending on your needs. 

    ' Add code here to perform any further actions. 

    Application.Workbooks("a1.xlsm").Close 
     ' Close a1.xlsm. VBA stops here. 
End Sub 

a1.xlsm Module1

Option Explicit 

Sub SecondMacro() 
    ' Add code here to perform any actions. 

    Application.Run "1.xlsm!Module1.WelcomeBack" 
     ' Go back to 1.xlsm 
End Sub 

PS: Überprüfen Sie den Unterschied zwischen Application.ActiveWorkbook und Application.ThisWorkbook.

0

Wenn Sie Ihren VBA-Code in eine XLAM-Datei statt in eine XLSM-Datei einfügen, können Sie ihn als Excel-Add-In hinzufügen und dann mit allen Arbeitsmappen gleichzeitig kommunizieren.

Verwandte Themen