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
___________________________________________________________________
Sub gz_entpacken()
'Dieses SUB entpackt eine Datei welche in GZDATEIPFAD
'hinterlegt ist und wartet solange bis die Datei fertig entpackt ist.
Dim fso As Object
Dim str7zipProgramm As String
Dim str7zipArchiv As String
Dim str7zipOrdner As String
Dim lngTaskID As Long
Dim lngProcID As Long
Dim lngExitCode As Long
'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 für 7zip.exe verdeckt ausführen und solange warten bis 7zip.exe fertig ist mit entpacken
lngTaskID = Shell(str7zipProgramm & " x " & str7zipArchiv & " -o" & str7zipOrdner, _
vbMinimizedNoFocus)
lngProcID = OpenProcess(SYNCHRONIZE + PROCESS_QUERY_INFORMATION, 0&, lngTaskID)
Call WaitForSingleObject(lngProcID, INFINITE)
Call CloseHandle(lngProcID)
AppActivate Application.Caption, True
End Sub
Sub gz_entpacken()
Dim str7zipProgramm$, str7zipArchiv$, str7zipOrdner$, sShell$
Dim oShell As Object
Set oShell = CreateObject("WScript.Shell")
'ausgewählte Datei entpacken mit 7-Zip
str7zipProgramm = Chr(34) & "C:\Program Files\7-Zip\7z.exe" & Chr(34) 'Pfad zur 7zip .exe
str7zipArchiv = Chr(34) & GZDATEIPFAD & Chr(34) 'Pfad zu entpackender Datei
str7zipOrdner = Chr(34) & "D:\TEMP\" & Chr(34) 'Pfad Zielordner
'Shell Kommando
sShell = str7zipProgramm & " x " & str7zipArchiv & " -o" & str7zipOrdner
'0 Verberge das Fenster und aktiviere ein anderes Fenster.
'1 Aktiviert und zeigt das Fenster in seiner original Größe und Position on.
'Beim ersten Start einer Anweldung sollte dieser Parameter angegeben werden.
'2 Aktiviert und zeigt das Fenster minimiert an.
'3 Aktiviert und zeigt das Fenster maximiert an.
'4 lZeigt ein Fenster in seinem jüngsten Größe und Position. Das aktive Fenster bleibt aktiv.
'5 Aktiviert das Fenster und zeigt es in seiner jetzigen Größe und Position.
'6 Minimiert das angegebene Fenster und aktiviert das nächste Top-Level-Fenster
'in der Z-Reihenfolge
'7 Zeigt das Fenster als einem minimierten Fenster. Das aktive Fenster bleibt aktiv.
'8 Zeigt das Fenster in seinem aktuellen Zustand. Das aktive Fenster bleibt aktiv.
'9 Aktiviert und zeigt das Fenster. Wenn das Fenster minimiert oder maximiert ist,
'wird Windows es auf seine ursprüngliche Größe und Position anpassen.
'Eine Anwendung sollte diesen Flag angeben,
'bei der Wiederherstellung eines minimierten Fensters.
'10 Aktiviert und zeigt das Fenster gleich der Anwendung aus der das Programm gestartet wurde
'False Script wartet nicht auf die Beendigung des Programms
'True Script wartet.
oShell.Run sShell, 1, True
End Sub
Gruß Tino
Set objShell = CreateObject("WScript.Shell")
Set objExec = objShell.Exec(PfadeUndParameter)
Application.ScreenUpdating = False
' Application.Calculation = xlCalculationManual
Do While Not objExec.StdOut.AtEndOfStream
Debug.Print objExec.StdOut.ReadLine()
Loop
'ausgewählte Datei entpacken mit 7-Zip
str7zipProgramm = Chr(34) & "C:\Program Files\7-Zip\7z.exe" & Chr(34) 'Pfad zur 7zip .exe
str7zipArchiv = Chr(34) & GZDATEIPFAD & Chr(34) 'Pfad zu entpackender Datei
str7zipOrdner = Chr(34) & "D:\TEMP\" & Chr(34) 'Pfad Zielordner
So ging es einwandfrei. Allerdings hängt sich Excel danach auf. Also bestimmt 5 Minuten, obwohl die Datei längst entpackt ist (das dauert unter 1 Sekunde). Egal ob ich Tinos oder Michaels Variante benutze.
Sub gz_entpacken_exec()
Dim str7zipProgramm$, str7zipArchiv$, str7zipOrdner$, sShell$
Dim oShell As Object, oExec As Object
'ausgewählte Datei entpacken mit 7-Zip
'str7zipProgramm = Chr(34) & "C:\Program Files\7-Zip\7z.exe" & Chr(34) 'Pfad zur 7zip .exe
str7zipProgramm = Chr(34) & "C:\7zKommandozeile\7za.exe" & Chr(34) 'Pfad zur 7za .exe
str7zipArchiv = Chr(34) & GZDATEIPFAD & Chr(34) 'Pfad zu entpackender Datei
str7zipOrdner = Chr(34) & "D:\TEMP\" & Chr(34) 'Pfad Zielordner
'Shell Kommando
sShell = str7zipProgramm & " x " & str7zipArchiv & " -o" & str7zipOrdner
Debug.Print Timer & ": Start von shell"
Set oShell = CreateObject("WScript.Shell")
Set oExec = oShell.Exec(strTarget)
Do While Not oExec.StdOut.AtEndOfStream
Debug.Print Timer & ": " & oExec.StdOut.ReadLine()
Loop
Debug.Print Timer & ": Nach der Schleife"
Set objShell = Nothing
Set oExec = Nothing
End Sub
Dim Datei as integer
Dim Pfad, ausgabe As String
Pfad = ThisWorkbook.Path & "\dekomp.bat"
' oder wo auch immer
Datei = FreeFile
Open Pfad For Output As #Datei
Print #Datei, strTarget
Close #Datei
' die geschriebene Datei dekomp.bat rufst Du dann über die Shell auf
7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Processing archive: C:\YourDir\Datei.7z
Extracting Blase.gif
Extracting Katze.gif
Everything is Ok
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
___________________________________________________________________
Sub gz_entpacken()
'Dieses SUB entpackt eine Datei welche in GZDATEIPFAD
'hinterlegt ist und wartet solange bis die Datei fertig entpackt ist.
Dim fso As Object
Dim str7zipProgramm As String
Dim str7zipArchiv As String
Dim str7zipOrdner As String
Dim lngTaskID As Long
Dim lngProcID As Long
Dim lngExitCode As Long
'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 für 7zip.exe verdeckt ausführen und solange warten bis 7zip.exe fertig ist mit entpacken
lngTaskID = Shell(str7zipProgramm & " x " & str7zipArchiv & " -o" & str7zipOrdner, _
vbMinimizedNoFocus)
lngProcID = OpenProcess(SYNCHRONIZE + PROCESS_QUERY_INFORMATION, 0&, lngTaskID)
Call WaitForSingleObject(lngProcID, INFINITE)
Call CloseHandle(lngProcID)
AppActivate Application.Caption, True
End Sub
Sub gz_entpacken()
Dim str7zipProgramm$, str7zipArchiv$, str7zipOrdner$, sShell$
Dim oShell As Object
Set oShell = CreateObject("WScript.Shell")
'ausgewählte Datei entpacken mit 7-Zip
str7zipProgramm = Chr(34) & "C:\Program Files\7-Zip\7z.exe" & Chr(34) 'Pfad zur 7zip .exe
str7zipArchiv = Chr(34) & GZDATEIPFAD & Chr(34) 'Pfad zu entpackender Datei
str7zipOrdner = Chr(34) & "D:\TEMP\" & Chr(34) 'Pfad Zielordner
'Shell Kommando
sShell = str7zipProgramm & " x " & str7zipArchiv & " -o" & str7zipOrdner
'0 Verberge das Fenster und aktiviere ein anderes Fenster.
'1 Aktiviert und zeigt das Fenster in seiner original Größe und Position on.
'Beim ersten Start einer Anweldung sollte dieser Parameter angegeben werden.
'2 Aktiviert und zeigt das Fenster minimiert an.
'3 Aktiviert und zeigt das Fenster maximiert an.
'4 lZeigt ein Fenster in seinem jüngsten Größe und Position. Das aktive Fenster bleibt aktiv.
'5 Aktiviert das Fenster und zeigt es in seiner jetzigen Größe und Position.
'6 Minimiert das angegebene Fenster und aktiviert das nächste Top-Level-Fenster
'in der Z-Reihenfolge
'7 Zeigt das Fenster als einem minimierten Fenster. Das aktive Fenster bleibt aktiv.
'8 Zeigt das Fenster in seinem aktuellen Zustand. Das aktive Fenster bleibt aktiv.
'9 Aktiviert und zeigt das Fenster. Wenn das Fenster minimiert oder maximiert ist,
'wird Windows es auf seine ursprüngliche Größe und Position anpassen.
'Eine Anwendung sollte diesen Flag angeben,
'bei der Wiederherstellung eines minimierten Fensters.
'10 Aktiviert und zeigt das Fenster gleich der Anwendung aus der das Programm gestartet wurde
'False Script wartet nicht auf die Beendigung des Programms
'True Script wartet.
oShell.Run sShell, 1, True
End Sub
Gruß Tino
Set objShell = CreateObject("WScript.Shell")
Set objExec = objShell.Exec(PfadeUndParameter)
Application.ScreenUpdating = False
' Application.Calculation = xlCalculationManual
Do While Not objExec.StdOut.AtEndOfStream
Debug.Print objExec.StdOut.ReadLine()
Loop
'ausgewählte Datei entpacken mit 7-Zip
str7zipProgramm = Chr(34) & "C:\Program Files\7-Zip\7z.exe" & Chr(34) 'Pfad zur 7zip .exe
str7zipArchiv = Chr(34) & GZDATEIPFAD & Chr(34) 'Pfad zu entpackender Datei
str7zipOrdner = Chr(34) & "D:\TEMP\" & Chr(34) 'Pfad Zielordner
So ging es einwandfrei. Allerdings hängt sich Excel danach auf. Also bestimmt 5 Minuten, obwohl die Datei längst entpackt ist (das dauert unter 1 Sekunde). Egal ob ich Tinos oder Michaels Variante benutze.
Sub gz_entpacken_exec()
Dim str7zipProgramm$, str7zipArchiv$, str7zipOrdner$, sShell$
Dim oShell As Object, oExec As Object
'ausgewählte Datei entpacken mit 7-Zip
'str7zipProgramm = Chr(34) & "C:\Program Files\7-Zip\7z.exe" & Chr(34) 'Pfad zur 7zip .exe
str7zipProgramm = Chr(34) & "C:\7zKommandozeile\7za.exe" & Chr(34) 'Pfad zur 7za .exe
str7zipArchiv = Chr(34) & GZDATEIPFAD & Chr(34) 'Pfad zu entpackender Datei
str7zipOrdner = Chr(34) & "D:\TEMP\" & Chr(34) 'Pfad Zielordner
'Shell Kommando
sShell = str7zipProgramm & " x " & str7zipArchiv & " -o" & str7zipOrdner
Debug.Print Timer & ": Start von shell"
Set oShell = CreateObject("WScript.Shell")
Set oExec = oShell.Exec(strTarget)
Do While Not oExec.StdOut.AtEndOfStream
Debug.Print Timer & ": " & oExec.StdOut.ReadLine()
Loop
Debug.Print Timer & ": Nach der Schleife"
Set objShell = Nothing
Set oExec = Nothing
End Sub
Dim Datei as integer
Dim Pfad, ausgabe As String
Pfad = ThisWorkbook.Path & "\dekomp.bat"
' oder wo auch immer
Datei = FreeFile
Open Pfad For Output As #Datei
Print #Datei, strTarget
Close #Datei
' die geschriebene Datei dekomp.bat rufst Du dann über die Shell auf
7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Processing archive: C:\YourDir\Datei.7z
Extracting Blase.gif
Extracting Katze.gif
Everything is Ok