Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA: Ordner/Dateien Zippen
#1
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. :)
Antworten Top
#2
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
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • Terades
Antworten Top
#3
Hallo, :19:

schau dich mal bei Ron um: :21:

Zip(Compress) Activeworkbook, folder, file(s) with VBA...
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • Terades
Antworten Top
#4
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.
Antworten Top
#5
Hallo,

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

Danke

mfg
Antworten Top
#6
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
Antworten Top
#7
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.
________
Servus
Case
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste