Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: exe ausführen und auf Ende warten

exe ausführen und auf Ende warten
29.04.2020 19:25:39
Mike
Hallo zusammen,
irgendetwas scheine ich zu übersehen. Vielleicht kann jemand helfen.
Ich habe ein kleines C# Programm welches ich aus einem Excel Makro raus starten möchte.
Das Progrmm sammelt Daten und gibt eine csv aus.
Sobald das Programm beendet ist, soll mein Makro weiter laufen.
Ich erhalte aber eine Fehlermeldung wenn ich das C# Programm starten möchte.
Was mache ich falsch?
  • 
    Sub Start()
    Dim wshshell As Object
    Set wshshell = CreateObject("WScript.Shell")
    wshshell.Run "c:\Export.exe", 1, True
    Call MakroXYZ
    End Sub
    


  • Als Fehlermeldung erhalte ich
    Laufzeitfehler '2147024894 (8000700002)':
    Die Methode 'Run' für das Objekt 'IWshShell3' ist fehlgeschlagen
    Gruß
    Mike
    Anzeige

    5
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: exe ausführen und auf Ende warten
    29.04.2020 21:12:31
    volti
    Hallo Mike,
    teste mal folgenden ungetesteten Code. Der sollte die Anwendung starten und warten, bis sie fertig ist.

    Option Explicit
    Declare PtrSafe Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As LongPtr
    Declare PtrSafe Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As LongPtr, lpExitCode As Long) As Long
    Const PROCESS_QUERY_INFORMATION = &H400
    Const STILL_ACTIVE = &H103
    Sub StarteAnwendungUndWarte()
     Dim hProcess As LongPtr, iExitcode As Long
     hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell("c:\Export.exe", vbMinimizedNoFocus))
     Do
      GetExitCodeProcess hProcess, iExitcode
      DoEvents
     Loop While iExitcode = STILL_ACTIVE
    End Sub
    viele Grüße
    Karl-Heinz

    Anzeige
    AW: exe ausführen und auf Ende warten
    30.04.2020 12:41:33
    Mike
    Hallo Karl-Heinz,
    danke für deinen Lösungsvorschlag. Ich hatte noch nicht die Zeit mich damit detailliert auseinanderzusetzen. Ich kann aber nach einem kurzen Test sagen, dass ich weitere Fehlermeldungen erhalte. Woran es jetzt genau liegt kann ich aktuell noch nicht sagen aber ich werde das genauer prüfen.
    Antons Beitrag hat zumindest dazu geführt, dass ich das Programm ohne Fehlermeldungen starten kann.
    Excel wartet zwar aktuell noch nicht auf Programmende aber das denke ich sollte mit deinem Vorschlag umsetzbar sein. Wenn ich dabei auf weitere Probleme stoße würde ich mich nochmal melden.
    Danke und Gruß
    Mike
    Anzeige
    AW: exe ausführen und auf Ende warten
    30.04.2020 13:17:17
    volti
    Hallo Mike,
    das tut mir leid mit der Fehlermeldung. Hab's grad noch mal probiert mit diesem Aufruf. Die Msgbox kommt erst, wenn ich den CustomUI beendet habe.
    Der Fehler müsste demnach wahrscheinlich an Deinem Programm(aufruf) liegen. Ich drücke die Daumen, dass es doch noch klappt.

    
    Sub StarteAnwendungUndWarte()

     Dim hProcess As LongPtr, iExitcode As Long
     hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, _
                Shell("C:\CustomUIEditor\CustomUIEditor.exe", vbMaximizedFocus))
     Do
      GetExitCodeProcess hProcess, iExitcode
      DoEvents
     Loop While iExitcode = STILL_ACTIVE
     MsgBox "Programm beendet"
    End Sub
    viele Grüße
    Karl-Heinz

    Anzeige
    exe ausführen und auf Ende warten
    30.04.2020 09:46:23
    Anton
    Hallo Mike,
    hast du vielleicht Leerzeichen im Pfad zu deinem Programm?
    wenn ja, dann so:
    
    wshshell.Run """c:\Export.exe""", 1, True
    
    mfg Anton
    AW: exe ausführen und auf Ende warten
    30.04.2020 12:46:49
    Mike
    Hallo Anton,
    jetzt wo ich deinen Beitrag so lese, kommt mir das mit den 3" recht bekannt vor. Ich glaube ich hatte früher schonmal ein ähnliches Problem.
    Auf jeden Fall kann ich das Programm nun mit meinem ursprünglichen Code aus dem Makro starten. Ich werde das jetzt noch beizeiten mit dem Vorschlag von Karl-Heinz kombinieren um das "warten" zu realisieren.
    Danke und Gruß
    Mike
    Anzeige
    ;
    Anzeige
    Anzeige

    Infobox / Tutorial

    .exe ausführen und auf Ende warten in Excel VBA


    Schritt-für-Schritt-Anleitung

    Um eine .exe-Datei aus einem Excel VBA-Makro zu starten und zu warten, bis sie beendet ist, folge diesen Schritten:

    1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

    2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsm)" und wähle "Einfügen" > "Modul".

    3. Code einfügen: Füge den folgenden Code in das Modul ein:

      Option Explicit
      
      Declare PtrSafe Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As LongPtr
      Declare PtrSafe Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As LongPtr, lpExitCode As Long) As Long
      
      Const PROCESS_QUERY_INFORMATION = &H400
      Const STILL_ACTIVE = &H103
      
      Sub StarteAnwendungUndWarte()
         Dim hProcess As LongPtr, iExitcode As Long
         hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell("C:\Export.exe", vbMinimizedNoFocus))
         Do
             GetExitCodeProcess hProcess, iExitcode
             DoEvents
         Loop While iExitcode = STILL_ACTIVE
         MsgBox "Programm beendet"
      End Sub
    4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


    Häufige Fehler und Lösungen

    • Laufzeitfehler '2147024894 (8000700002)': Dieser Fehler tritt häufig auf, wenn der Pfad zur .exe-Datei nicht korrekt ist. Stelle sicher, dass der Pfad korrekt angegeben ist und keine Leerzeichen enthält. Verwende in diesem Fall drei Anführungszeichen:

      wshshell.Run """c:\Export.exe""", 1, True
    • Excel wartet nicht auf Programmende: Wenn das Makro nicht wartet, bis die .exe-Datei beendet ist, stelle sicher, dass du die OpenProcess- und GetExitCodeProcess-Funktionen korrekt implementiert hast.


    Alternative Methoden

    1. WScript.Shell verwenden: Eine einfachere Methode ist die Verwendung von WScript.Shell, um eine .exe-Datei zu starten. Beachte jedoch, dass Excel nicht warten wird:

      Sub RunExe()
         Dim wsh As Object
         Set wsh = CreateObject("WScript.Shell")
         wsh.Run "C:\Export.exe"
      End Sub
    2. Shell-Funktion: Du kannst die Shell-Funktion verwenden, um eine .exe-Datei zu starten. Diese Methode ist jedoch nicht so zuverlässig, wenn es um das Warten auf das Ende der Ausführung geht.


    Praktische Beispiele

    Hier sind einige Beispiele für die Verwendung von .exe in Excel VBA:

    • CSV-Export: Du kannst ein C#-Programm verwenden, um Daten zu sammeln und in eine CSV-Datei zu exportieren.

    • Datenverarbeitung: Verwende ein .exe-Tool zur Datenverarbeitung, das nach der Ausführung Ergebnisse zurückgibt.


    Tipps für Profis

    • Fehlerbehandlung einfügen: Implementiere eine Fehlerbehandlung in deinem VBA-Code, um unerwartete Probleme zu adressieren.

      On Error GoTo ErrorHandler
      ' Dein Code hier
      Exit Sub
      ErrorHandler:
      MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
    • Verwendung von Variablen: Nutze Variablen für die Pfade und Dateinamen, um den Code flexibler zu gestalten.


    FAQ: Häufige Fragen

    1. Wie kann ich eine .exe-Datei mit Parametern ausführen?
    Füge die Parameter einfach zum Shell-Befehl hinzu, zum Beispiel:

    Shell "C:\Export.exe -param1 -param2"

    2. Gibt es Einschränkungen bei der Verwendung von OpenProcess in VBA?
    Ja, OpenProcess funktioniert nur unter Windows und erfordert entsprechende Berechtigungen für den Zugriff auf andere Prozesse.

    3. Welche Excel-Versionen unterstützen diesen Code?
    Der bereitgestellte Code sollte in Excel 2010 und neuer funktionieren. Stelle sicher, dass du die PtrSafe-Deklarationen für 64-Bit Excel verwendest.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige