Clever-Excel-Forum

Normale Version: VBA: Ordner/Dateien Zippen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Morgen,

ich bin dabei Bestimmte Dateien in einem Ordner zu Zippen. Was ich jedoch noch nicht geschafft habe ist, einen kompletten Unterordner zu Zippen.

Beispiel:

Ordner>1.pdf
Ordner>2.pdf
Ordner>Unterordner>3.pdf
Ordner>Unterordner>4.pdf

Mein Ziel ist es, eigentlich jetzt eine Zipdatei von dem Unterordner zu erstellen.

Folgender Code erzeugt Zip-Dateien für 1.pdf und 2.pdf, eine Zip Datei für den gesamten Unterordner gibts leider nicht.


Code:
Sub Zippen()

Dim sDatei As String
Dim sPfad As String
   
   sPfad = "K:\PROJEKT\PDF-Dateien\"
   ChDrive sPfad
   ChDir sPfad
   
   sDatei = Dir("*.*")
   
   Do While sDatei <> ""
       zipName = Left(sDatei, Len(sDatei) - 4) & ".zip"
       Shell "C:\Program Files\7-Zip\7z.exe a " & sPfad & zipName & " " & sDatei
       sDatei = Dir
   Loop

End Sub

Habt ihr eine Idee?

Vielen dank und grüße. :)
Hallo,

hier ein Ansatz:

Code:
Sub F_en()
Dim Shl As Object: Set Shl = CreateObject("Shell.Application")

    f = Dir(Environ("tmp") & "\*.zip")
    nf = Environ("tmp") & "\" & f
  
' einen Unterordner aus einer zip-Datei heraus zu kopieren
    Shl.Namespace(Environ("tmp")).MoveHere Shl.Namespace(nf).Items.Item("xl")
    
'einen Unterordner in ein bestehendes zip-file hinein zu kopieren
    Shl.Namespace(nf).MoveHere Environ("tmp") & "\xl"
  
Set Shl = Nothing
End Sub

Manchmal wird trotz "Move" nur kopiert, falls der Ordner dann gelöscht werden muss, geht es ohne alle Dateien zu löschen mit "Shell "cmd /c rmdir /s /q " & xl"

Es ist immer etwas "trickig", vermutlich wird es nicht beim ersten Mal klappen.

mfg
Hallo, :19:

schau dich mal bei Ron um: :21:

Zip(Compress) Activeworkbook, folder, file(s) with VBA...
Hallo,

die Ideen die mir spontan durch den Kopf gehen sind:

1. Dein Code (Schleife zur Ermittlung der Dateien) liefert keine Unterverzeichnisse, daher können die auch nicht gezippt werden.
2. Eigentlich ist das doch nur eine Parametrisierungsfrage von 7-Zip.  Ich frage mich was dabei herauskommt,
  • wenn man die Schleife weglässt
  • bei dem Shell Befehl hinten statt "sDatei" einfach "sPath" setzt.
   Das müsste eigentlich gehen.

Natürlich sind Fenneks und Rons Ansatz auch korrekt, aber eigentlich war die Lösung doch garnicht so weit entfernt.
Hallo,

da das Thema nicht so ganz alltäglich ist, könnte der Fragesteller den endgültigen Code publizieren?

Danke

mfg
Hallo Fennek,

probier doch einfach mal

Shell "C:\Program Files\7-Zip\7z.exe a " & Zielpfad & zipName & " " & Quellpfad

(Hab hier kein 7z, sonst würd ich's selber tun)

vg, MM
Hallo, :19:

Ordner mit allen Dateien und Unterordner mit 7Zip packen: :21:

Code:
C:\Temp\7Zip\Neu\7za.exe a -r C:\Temp\Zieldatei.zip C:\Temp\Co/* C:\Temp\Com/*

Ich arbeite mit der Konsolenanwendung "7za.exe". Keine Installation notwendig. Download hier:

Download...

Die Schreibweise ist wichtig. Einfach vorher im DOS-Fenster testen. Was da läuft geht dann auch per Shell.

a = Archiv anlegen und alle Dateien und Ordner/Unterordner hinzufügen
-r = Inhalte aller Ordner rekursiv nehmen

Nicht *.* schreiben - das hat in 7Zip eine andere Bedeutung wie in DOS (Schreibweise siehe oben).

Leerzeichen in Ordnernamen vermeiden, oder eben maskieren.