Microsoft Excel

Herbers Excel/VBA-Archiv

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"