Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Hilfe bei der Fehlersuche (API)

Betrifft: Hilfe bei der Fehlersuche (API) von: Timo
Geschrieben am: 20.04.2007 19:08:05

Hallo!

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

  

Betrifft: AW: Hilfe bei der Fehlersuche (API) von: micha
Geschrieben am: 20.04.2007 19:37:22

Hallo Timo,

so funktioniert es bei mir....


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



Sub StartenExternerAnwendung()
 Const PROCESS_QUERY_INFORMATION = &H400
 Const STILL_ACTIVE = &H103

Dim Beginn As Double
Dim l As Long, L_Prozess As Long, l_Ende As Long

Beginn = Now
l_Ende = STILL_ACTIVE
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!"


End Sub





micha


  

Betrifft: AW: Hilfe bei der Fehlersuche (API) von: Timo
Geschrieben am: 20.04.2007 21:24:01

Danke, das hilft mir weiter...

mfg
Timo