Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1440to1444
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Warten auf Ende einer Shell Anweisung

Warten auf Ende einer Shell Anweisung
13.08.2015 10:23:24
Hannes
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"))

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Warten auf Ende einer Shell Anweisung
13.08.2015 10:35:26
Nepumuk
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

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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige