Zippen unter VBA ging bislang nur mit Komponenten von Drittherstellern. Dabei liefert Windows (ab XP) doch alles, was man dazu braucht – zwar nicht den Komfort, den „richtige“ Zip-Anwendungen wie WinZip und Co. bieten, aber immerhin brauchen Sie keine zusätzlichen Tools zu installieren. Wir zeigen Ihnen, wo die Zip-Funktionen von Windows stecken und wie Sie diese in Ihren Anwendungen einsetzen.
Wer mit Windows XP arbeitet, ist es gewohnt, Zip-Dateien auch ohne zusätzliches Zip-Tool zu öffnen. Der Windows Explorer zeigt sogar den Inhalt von Zip-Dateien an, wenn man diese in der Ordner-Ansicht markiert.
Die dort enthaltenen Funktionen lassen sich auch per VBA ansteuern. Dazu braucht man lediglich einen Verweis auf die Bibliothek Microsoft Shell Controls and Automation und die folgenden VBA-Routinen.
Der Ausgangspunkt für das Zippen sind üblicherweise eine oder mehrere Dateien und/oder Verzeichnisse. Diese sollen unter Beibehaltung der Struktur der enthaltenen Verzeichnisse in eine Zip-Datei geschrieben und wiederhergestellt werden können.
Die oben genannte Bibliothek liefert hierzu zunächst einmal wenig Erbauliches – zumindest, wenn man sich die enthaltenen Methoden und Eigenschaften im Objektkatalog ansieht. Dort kommt man erst weiter, wenn man sich vor Augen führt, was im Windows Explorer geschieht, wenn Sie Dateien aus einer Zip-Datei in ein normales Verzeichnis überführen und umgekehrt – Sie kopieren dort nämlich etwas. Und zum Thema Kopieren liefert die Bibliothek immerhin schon einmal die Methode CopyHere.
Und wenn Sie sich noch ein wenig von der Vorstellung lösen, dass ein Zip-File eine Datei sei und diese mehr als Ordner verstehen, haben Sie fast alles zusammen, was Sie brauchen: Die Methode CopyHere gehört nämlich zum Folder-Objekt.
Es gibt also ein Folder-Objekt, das Sie offensichtlich mithilfe der CopyHere-Methode mit irgendetwas füllen können. Woher beziehen wir das Folder-Objekt, das der Zip-Datei entsprechen sollte Ein weiterer Blick in den Objektkatalog zeigt, dass die Methode Namespace des Shell-Objekts ein Objekt des Typs Folder zurückliefert – und zwar nach Angabe eines Parameters vDir. Dieser kann beispielsweise eine Zeichenkette mit dem Pfad zur Zip-Datei enthalten.
Zip-Datei erstellen
Allerdings haben wir ja eigentlich noch gar keine Zip-Datei. Und das Erstellen nimmt uns die Shell32-Bibliothek leider nicht ab. Sind wir hier schon am Ende unseres Weges Mitnichten. Wir legen einfach ein Zip-Archiv mit einem herkömmlichen Zip-Programm an und löschen anschließend die darin archivierten Dateien. Übrig bleibt ein leeres Zip-Archiv, dessen Inhalt der Hex-Editor aus Bild 1 liefert. Die Routine CreateZipFile erstellt einfach eine neue, leere Datei und fügt die soeben ermittelten Zeichen zur Datei hinzu, bevor sie diese schließt.

Bild 1: Ein leeres Zip-Archiv im Hex-Editor
Der folgende Aufruf erzeugt beispielsweise eine Zip-Datei, die Sie ganz normal mit WinZip und Konsorten öffnen können:
CreateZipFile "c:\test.zip"
Zip-Archiv füllen
Nun wollen wir dieses Archiv mit einer Datei füllen. Auf Basis der gewonnenen Erkenntnisse schreiben wir die Routine aus Listing 2 herunter. Diese besitzt eine Objektvariable für das Shell-Objekt der Shell32-Bibliothek und zwei für das Folder-Objekt – je eines für die Quelldatei(en) und für das Zip-Archiv. Die Routine ruft automatisch die Prozedur CreateZipfile auf, um die benötigte Zip-Datei zu erzeugen. Dann erzeugt sie die drei Objekte, wobei objZip auf Basis des im Parameter strZip angegebenen Zip-Archivs und objSource auf Basis von strSource erstellt wird. Anschließend reicht ein einfacher Aufruf der Methode CopyHere, um die Quelle – egal, ob es sich um eine Datei oder ein Verzeichnis handelt – in das Zip-Archiv zu kopieren.
Zip-Archiv extrahieren
Nur für Abonnenten
Ab hier wird’s wirklich spannend – der Rest ist exklusiv für Abonnenten.
Mit dem Abo von Access im Unternehmen bekommst du den kompletten Artikel – inklusive vollständigem Code, Beispieldatenbank und Schritt-für-Schritt-Erklärung.
So sparst du dir stundenlanges Herumprobieren, vermeidest teure Fehler in deiner Access-Anwendung und kannst Lösungen direkt in deinem Unternehmen einsetzen, statt nur darüber zu lesen.
Teste Access im Unternehmen jetzt 4 Wochen lang kostenlos: Voller Zugriff auf alle Artikel, Downloads und Beispieldatenbanken. Kein Risiko – wenn es für dich nicht passt, kündigst du einfach innerhalb der ersten vier Wochen.
Bereits Abonnent? Hier einloggen
Kostenlos & unverbindlich
Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?
Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?
In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.
Jetzt kostenloses Access-Audit anfordern →