Warten auf Ende einer Shell Anweisung

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Warten auf Ende einer Shell Anweisung
von: Hannes Respondek
Geschrieben am: 13.08.2015 10:23:24

Huhu liebe Herber Gemeinde,
ich bäuchte mal eure kompetente Hilfe :S
Ich entpacke mit Hilfe 7zip eine Datei über ein Shell Aufruf.
Klappt Wunderbar! ABER:
Wird danach die entpackte Datei direkt wetierverarbeitet, demnach muss ich mein Makro so lange pausiweren bis 7 Zip fertig mit entpacken ist. Eine Zwischenlösung ist hier Application.Wait (Now + TimeValue("0:00:05")). Allerdings ist das nicht optimal bei einer Laufzeit kleiner 5s und führt zum Fehler wenn die zu entpackende Datei mal größer ist als normal, also Laufzeit über 5s.
Wie kann ich Excel auf Beendung der Sehll Answeisung warten lassen?
Danke im Vorraus!
Hier mein CODE:


Dim fso As Object
'ausgewählte Datei entpacken mit 7-Zip
str7zipProgramm = "C:\Program Files\7-Zip\7z.exe" 'Pfad zur 7zip .exe
str7zipArchiv = GZDATEIPFAD  'Pfad zu entpackender Datei
str7zipOrdner = "D:\TEMP"  'pfad zielordner
Set fso = CreateObject("Scripting.FileSystemObject")
str7zipProgramm = fso.GetFile(str7zipProgramm).ShortPath
str7zipArchiv = fso.GetFile(str7zipArchiv).ShortPath
str7zipOrdner = fso.GetFolder(str7zipOrdner).ShortPath
Shell str7zipProgramm & " x " & str7zipArchiv & " -o" & str7zipOrdner, vbMinimizedNoFocus
'5s warten auf 7zip beendet
Application.Wait (Now + TimeValue("0:00:05"))

Bild

Betrifft: AW: Warten auf Ende einer Shell Anweisung
von: Nepumuk
Geschrieben am: 13.08.2015 10:35:26
Hallo,
ein Beispiel zum basteln:

Option Explicit

Private Declare Function OpenProcess Lib "kernel32.dll" ( _
    ByVal dwDesiredAccess As Long, _
    ByVal bInheritHandle As Long, _
    ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" ( _
    ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32.dll" ( _
    ByVal hHandle As Long, _
    ByVal dwMilliseconds As Long) As Long

Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const SYNCHRONIZE = &H100000
Private Const INFINITE As Long = &HFFFFFFFF

Public Sub ShellAndWait()
    Dim lngTaskID As Long, lngProcID As Long, lngExitCode As Long
    lngTaskID = Shell("C:\Windows\NOTEPAD.EXE D:\test.txt", vbNormalFocus)
    lngProcID = OpenProcess(SYNCHRONIZE + PROCESS_QUERY_INFORMATION, 0&, lngTaskID)
    Call WaitForSingleObject(lngProcID, INFINITE)
    Call CloseHandle(lngProcID)
    AppActivate Application.Caption, True
    MsgBox "Jetzt geht's weiter"
End Sub

Gruß
Nepumuk

Bild

Betrifft: AW: Warten auf Ende einer Shell Anweisung
von: Hannes Respondek
Geschrieben am: 13.08.2015 11:32:48
Es hat bestens geklappt! Konnte es auf meine Shell ummodeln und funktioniert wie gewüsncht. DANKE!

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Warten auf Ende einer Shell Anweisung"