Hilfe bei der Fehlersuche (API)
20.04.2007 19:08:05
Timo
Ich habe noch eine harte Nuss vorm Wochenende :-)
Mein Ziel:
Ich starte per VBA eine Bat-Datei, die mehrere Dateien von Netzlaufwerken kopiert. Nun soll der Code bis zur Beendigung der Bat-Datei warten., da diese Dateien anschlließend eingelesen werden.
Mein Problem:
Um das zu realisieren habe ich den folgenden Code in dem Buch "Excel Kompendium" von MuT gefunden. Es soll mittels API-Funktion geprüft werden, ob die externe Anwendung noch läuft, doch in der Do While Schleife scheint ein Fehler zu sein: Die MsgBox erscheint direkt nach Aufruf von Notepad ( bei mir die Bat), nicht beim Beenden. Kann mir jemand weiterhelfen, wo der Fehler steckt?
Declare
Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare
Function GetExitCodeProcess Lib "kernel32" _
(ByVal L_Prozess As Long, l_Ende As Long) As Long
Public Const PROCESS_QUERY_INFORMATION = &H400
Public Const STILL_ACTIVE = &H103
Sub StartenExternerAnwendung()
Dim Beginn As Double
Dim l As Long , L_Prozess As Long, l_Ende As Long
Beginn = Now
With Sheets("Tabelle2")
.Range("A65536").End(xlUp).Offset(1, 0).Value = Now
End With
l = Shell("notepad.exe", 1)
L_Prozess = OpenProcess(PROCESS_QUERY_INFORMATION, False, l)
Do While l_Ende = STILL_ACTIVE
GetExitCodeProcess L_Prozess, l_Ende
DoEvents
Loop
MsgBox "Die Anwendung wurde um " & Time & " beendet!"
tmp = Now - Beginn
With Sheets("Tabelle2")
.Range("B65536").End(xlUp).Offset(1, 0).Value = Format(tmp, "s")
End With
End Sub
Danke und schönes Wochenende
Timo