VisualBasic Aufruf von exe-Datei via WScript.Shell - errorCode / Rückgabewert der exe-Datei

palaber

Captain
Registriert
Juni 2006
Beiträge
3.856
Hallo zusammen,

folgendes Problem gibt mir zwei Fragen auf:
Ich öffne eine exe-Datei (VB.Net Code) aus einem vba Programm heraus. Das .NET Programm schreibt mir diverse Daten in eine Excel-Datei. Erst wenn dieser Vorgang abgeschlossen ist soll das vba Programm weiterlaufen. Das funktioniert auch.
Anbei der Aufruf:

Code:
Private Function waitForProcess(execute As String) As Boolean
    Dim errorCode As Integer    
    Dim wsh As Object
    Set wsh = VBA.CreateObject("WScript.Shell")

    errorCode = wsh.Run(execute, 1, True)     'execute ist Pfad der Exe-Datei + Parameter'

    If errorCode = 0 Then
        waitForProcess = True   'Rückgabewert wenn alles OK'
    Else
        waitForProcess = False  'Rückgabewert bei Fehler'
    End If

End Function

Frage 1:
Wenn die Excel-Datei z.B. nicht geschrieben wird fange ich den Fehler im Catch-Block. Als Rückgabewert erhalte ich aber trotzdem die "0". Ich habe gehofft das mir das VBA Programm in diesem Fall in den Else-Zweig springt damit ich Programm damit weiter arbeiten kann. Ist das überhaupt möglich? Muss ich hierzu noch im VB.net Catch-Block irgendwie hinterlegen, dass das Programm nicht ordnungsgemäß durchlaufen wurde?

Frage 2:
Ist die WScript.Shell standardmäßig auf allen Windows Systemen ab Win XP vorhanden?

Vielen Dank für Eure hilfe!
 
zu 1. Solange kein Fehler auftritt, gibt es auch keinen Returncode. Wenn also die Datei z.B. nicht vorhanden ist, dann öffnet Excel eine leere Datei und informiert den Benutzer über ein Popup. Danach wird Excel weiter korrekt ausgefürt, also ohne Fehler.
Um Fehler zu vermeiden, frage einfach vorher ab, ob die Datei vorhanden ist.

zu 2.
Um XP würde ich mich nicht mehr kümmern.
Wenn ich mich richtig erinnere, muß unter XP der Scripting Host nachinstalliert werden. Außerdem ist .Net ebenfalls nur als Installationspaket verfügbar. Kann aber sein, daß ich mich irre.
 
Interessanter wäre noch der Code aus deiner .Net Anwendung. Ich würde im Catch Zweig dann folgendes einbauen:

Code:
Environment.Exit(1)


dann sollte das .Net Programm mit dem Fehlercode 1 beendet werden, wenn ich mich nicht irre...

Viel Erfolg
Rossibaer
 
Zurück
Oben