EXE ausführen und warten (Pause) bis fertig
 |
Betrifft: EXE ausführen und warten (Pause) bis fertig
von: Dirk L
Geschrieben am: 16.09.2004 08:04:02
Hallo,
mein Problem ist, dass ich eine EXE-Datei ausführen muss (hab ich sogar hingebommen :-) ), die dann jede Menge Daten berechnet.
Leider kann es sein, dass je nach Daten das Programm mal 2sec oder 15sec braucht. Da ich die Daten dann weiterverarbeite, habe ich eine Pause von 25sec eingefügt.
Meine Frage: Gibt es eine Möglichkeit, so lange zu warten, bis die Datei fertig ausgeführt ist und dann erst das Makro weiterlaufen zu lassen ???
Über eine Antwort würde ich mich sehr freuen, denn 25sec sind echt ne lange Zeit, wenn der Chef hinter einem steht ;-)
Viele Grüße und Danke für Eure Antworten
Dirk
Betrifft: Hab was gefunden, aber das klappt bei mir nicht
von: Dirk
Geschrieben am: 16.09.2004 12:48:34
www.herber.de/mailing/101800h.htm
Betrifft: AW: Hab was gefunden, aber das klappt bei mir nicht
von: andre
Geschrieben am: 16.09.2004 22:02:55
Hallo Dirk,
das hab ich mal irgendwo gefunden
Option Explicit
Public Const PROCESS_QUERY_INFORMATION = &H400
Public Const WAIT_TIMEOUT = &H102&
Declare
Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Declare
Function WaitForSingleObject Lib "kernel32" _
(ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long
Sub load()
Call WartenBisFertig("Notepad.exe")
SendKeys "%{TAB}"
SendKeys "Hallo"
End Sub
Sub WartenBisFertig(strEXE As String)
Dim ProcessID As Long
Dim hProcess As Long
Dim RetVal As Long
ProcessID = Shell(strEXE, vbNormalFocus)
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessID)
Do
DoEvents
RetVal = WaitForSingleObject(hProcess, 50)
Loop Until RetVal <> WAIT_TIMEOUT
End Sub
Betrifft: klappt bei noch nicht richtig !!!!
von: Dirk
Geschrieben am: 17.09.2004 08:53:19
Hallo Andre,
vielen Dank für den Code. Jetzt weiß ich auch, wieso das bei mir mit dem selben Code nicht geklappt hat. Ich hatte kein "Option Explicit" drüberstehen und da hat das Programm die´ganze Zeit gemotzt.
Seltsamer Weise scheint die "Pause" nicht so richtig zu funktionieren.
Die EXE-Datei produziert eine Datei, die ich aufrufe.
Aber ich bekomme immer die Datei vom letzten Aufruf angezeigt und nicht die neu erstellte Datei. (quasi als sei die Pause zu kurz)
Hast Du vielleicht noch nen Tip ???
Schade, dass es nicht ein "wait until" oder "break until"-Befehl gibt.
Schonmal Danke im Voraus und ein schönes WE
Gruß
Dirk
Mein Code:
Option Explicit
Public Const PROCESS_QUERY_INFORMATION = &H400
Public Const WAIT_TIMEOUT = &H102&
Declare
Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Declare
Function WaitForSingleObject Lib "kernel32" _
(ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long
Sub load()
Call WartenBisFertig("GestOptimierung.exe")
'SendKeys "%{TAB}"
'SendKeys "Hallo"
End Sub
Sub WartenBisFertig(strEXE As String)
Dim ProcessID As Long
Dim hProcess As Long
Dim RetVal As Long
ProcessID = Shell(strEXE, vbHide)
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessID)
Do
DoEvents
RetVal = WaitForSingleObject(hProcess, 50)
Loop Until RetVal <> WAIT_TIMEOUT
End Sub
Betrifft: AW: klappt bei noch nicht richtig !!!!
von: andre
Geschrieben am: 17.09.2004 21:58:40
Hallo Dirk,
wenn Du noch eine zusätzliche Pause brauchst schaue Dir mal die sleep-Funktion an (Recherche / google hier im Forum.
Betrifft: MERCI für den Tipp
von: Dirk
Geschrieben am: 21.09.2004 08:01:10
Hallo Andre,
nochmals vielen Dank für Deine Hilfe.
Alles Bestens.
Viele Grüße
Dirk
Beiträge aus den Excel-Beispielen zum Thema "EXE ausführen und warten (Pause) bis fertig"