Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zip-Archiv entpacken

Zip-Archiv entpacken
08.05.2019 11:24:22
ing.grohn
Hallo Excelaner,
ich benutze folgende Funktion um Zip-Archive zu entpacken:

Public Function UnZipFile(sFile As String, sLoc As String)
Dim ZipObj As Object
Set ZipObj = CreateObject("Shell.Application")
With ZipObj
.Namespace((sLoc)).CopyHere .Namespace((sFile)).items
End With
End Function

funktioniert ganz gut.
Gib es einen Schalter/Parameter der automatisch bei mehrfach auftretenden Dateinamen alle Dateien ohne Nachfrage erhält (kommen aus verschiedenen Zip-Files und werden in ein Verzeichnis entpackt)?
Für Eure Bemühungen vielen Dank.
MfG
Albrecht
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zip-Archiv entpacken
08.05.2019 11:34:15
Rainer
Hallo Albrecht,
ganz blind geraten: DisplayAlerts = False?
Gruß, Rainer
AW: Zip-Archiv entpacken
08.05.2019 11:46:05
ing.grohn
Hallo Rainer,
a) funktioniert nicht!
b) ich möchte nicht die Warnungen abschalten, sondern verhindern, dass Dateien überschrieben werden sondern mehrfach angelegt werden (ohne Nachfrage).
MfG
Albrecht
Anzeige
AW: Zip-Archiv entpacken
08.05.2019 12:10:30
UweD
Hi
ich kenn den Aufbau der Namen nicht.
Aber so in der Art könnte es gehen. (ungetestet)
 Public Function UnZipFile(sFile As String, sLoc As String)
    Dim ZipObj As Object, z As Integer
    Set ZipObj = CreateObject("Shell.Application")
    With ZipObj
        If Dir(sFile) <> "" Then 'Datei existiert bereits 
            Do Until Dir(sFile) = ""
                sFile = sFile & "_" & z
            Loop
        End If
        .Namespace((sLoc)).CopyHere .Namespace((sFile)).items
    End With
    
 End Function

LG UweD
Anzeige
AW: Zip-Archiv entpacken
08.05.2019 12:40:41
UweD
 Public Function UnZipFile(sFile As String, sLoc As String)
    Dim ZipObj As Object, z As Integer
    Set ZipObj = CreateObject("Shell.Application")
    With ZipObj
        If Dir(sFile) <> "" Then 'Datei existiert bereits 
            Do Until Dir(sFile) = ""
                z = z + 1
                sFile = sFile & "_" & z
            Loop
        End If
        .Namespace((sLoc)).CopyHere .Namespace((sFile)).items
    End With
    
 End Function

Anzeige
AW: Zip-Archiv entpacken
08.05.2019 12:52:44
Luschi
HaLlo Albrecht,
ich verlaß mich da auf Ron de Bruin: https://www.rondebruin.nl/win/s7/win002.htm
Gruß von Luschi
aus klein-Paris
AW: Zip-Archiv entpacken
08.05.2019 13:59:38
ing.grohn
Hallo Luschi,
schau ich mir genauer an!
MfG
Albrecht
AW: Zip-Archiv entpacken
08.05.2019 12:52:44
Luschi
HaLlo Albrecht,
ich verlaß mich da auf Ron de Bruin: https://www.rondebruin.nl/win/s7/win002.htm
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Zip-Archiv entpacken
08.05.2019 13:58:53
ing.grohn
Hallo Uwe,
die Funktion von dir tut nicht!
Fehler 91: Objectvariable .... nicht definiert
mfG
Albrecht
;
Anzeige
Anzeige

Infobox / Tutorial

Zip-Archiv entpacken mit Excel VBA


Schritt-für-Schritt-Anleitung

Um ein Zip-Archiv mit Excel VBA zu entpacken, kannst Du die folgende Funktion verwenden. Diese nutzt die Shell.Application-Klasse, um die Dateien zu extrahieren.

Public Function UnZipFile(sFile As String, sLoc As String)
    Dim ZipObj As Object
    Set ZipObj = CreateObject("Shell.Application")
    With ZipObj
        .Namespace((sLoc)).CopyHere .Namespace((sFile)).items
    End With
End Function
  1. Füge den Code in ein Modul in Deiner Excel-Arbeitsmappe ein.
  2. Rufe die Funktion auf, indem Du den Pfad zur Zip-Datei und das Zielverzeichnis angibst:
    UnZipFile "C:\Pfad\zur\deiner.zip", "C:\Zielverzeichnis\"

Häufige Fehler und Lösungen

  • Fehler 91: Objektvariable nicht definiert
    Dieser Fehler tritt auf, wenn die Shell.Application-Instanz nicht korrekt erstellt wurde. Stelle sicher, dass der Code in einem Modul und nicht direkt in einem Arbeitsblatt steht.

  • Dateien werden überschrieben
    Um zu verhindern, dass Dateien mit demselben Namen überschrieben werden, kannst Du die Funktion anpassen, sodass sie überprüft, ob eine Datei bereits existiert und einen Zähler hinzufügt. Hier ist ein Beispiel:

Public Function UnZipFile(sFile As String, sLoc As String)
    Dim ZipObj As Object, z As Integer
    Set ZipObj = CreateObject("Shell.Application")
    With ZipObj
        If Dir(sFile) <> "" Then ' Datei existiert bereits
            Do Until Dir(sFile) = ""
                z = z + 1
                sFile = sFile & "_" & z
            Loop
        End If
        .Namespace((sLoc)).CopyHere .Namespace((sFile)).items
    End With
End Function

Alternative Methoden

Falls Du andere Tools bevorzugst, kannst Du auch Programme wie WinZip verwenden, um Zip-Archive zu entpacken. Diese Tools bieten oft eine Benutzeroberfläche, die das Entpacken vereinfacht. Du kannst auch die Windows-Bordmittel verwenden, um Zip-Dateien zu extrahieren, falls Du keine Programmierung in VBA durchführen möchtest.


Praktische Beispiele

Hier ist ein praktisches Beispiel, wie Du mehrere Zip-Dateien in einem Verzeichnis entpacken kannst:

Sub EntpackenMehrererZip()
    Dim zipPath As String
    Dim destPath As String
    Dim file As String

    zipPath = "C:\Pfad\zu\Zips\"
    destPath = "C:\Zielverzeichnis\"

    file = Dir(zipPath & "*.zip")
    Do While file <> ""
        UnZipFile zipPath & file, destPath
        file = Dir
    Loop
End Sub

Mit diesem Code kannst Du alle Zip-Dateien in einem bestimmten Verzeichnis entpacken.


Tipps für Profis

  • Fehlerbehandlung einbauen: Verwende On Error Resume Next, um Fehler zu ignorieren, die beim Entpacken auftreten können.
  • Verwende vba shell.application namespace: Nutze diese Funktionalität, um auf die ZIP-Inhalte zuzugreifen, ohne externe Bibliotheken einbinden zu müssen.
  • Optimierung der Leistung: Wenn Du mit großen Zip-Archiven arbeitest, kann es hilfreich sein, die Anzahl der Extraktionen zu minimieren, indem Du nur die benötigten Dateien extrahierst.

FAQ: Häufige Fragen

1. Kann ich mit Excel VBA mehrere Zip-Dateien gleichzeitig entpacken?
Ja, du kannst eine Schleife verwenden, um alle Zip-Dateien in einem Verzeichnis zu entpacken, wie im Beispiel gezeigt.

2. Welche Excel-Version benötige ich, um diesen Code zu verwenden?
Der Code sollte in den meisten modernen Excel-Versionen funktionieren, die VBA unterstützen, einschließlich Excel 2010 und neuer.

3. Gibt es eine Möglichkeit, die entpackten Dateien automatisch zu benennen?
Ja, du kannst den Dateinamen anpassen, indem du einen Zähler hinzufügst, um sicherzustellen, dass die Dateinamen eindeutig bleiben.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige