Per VBA komprimieren mit SawZipNG

Eine Schnittstelle für den Einsatz mit VBA liefern einige Produkte wie etwa WinZip direkt mit. Leider sind die meisten kostenpflichtig. Access im Unternehmen stellt eine frei verfügbare DLL vor, mit der Sie von Ihrer Datenbank aus die von den verbreiteten Komprimierungstools her bekannten Funktionen nachbilden können.

SawZipNG hat es merkwürdigerweise nie zu außergewöhnlichem Ruhm gebracht: Die Bibliothek war eine Zeit lang zum Download verfügbar, danach ist sie aber aus dem Blickfeld des Internets verschwunden. Zum Glück hat Access im Unternehmen eine Kopie dieser äußerst nützlichen DLL aufgetrieben; Sie finden diese auf der Heft-CD oder unter www.access-im-unternehmen.de zum Download.

Nach der Installation des Setups steht die passende Bibliothek bereit und wartet auf die Bereitstellung in der Zieldatenbank per passendem Verweis (siehe Abb. 1). Bei der Weitergabe brauchen Sie nicht das komplette Setup mitzuliefern, die Datei SawZipNG.dll reicht aus. Allerdings muss diese dann noch per RegSvr32.exe registriert werden.

pic001.tif

Abb. 1: Um die Zip-DLL in eine Anwendung einzubinden, muss man einen passenden Verweis anlegen.

Der Einsatz von Late Binding würde einen Verweis überflüssig machen; wie dies aussieht, können Sie der Beispieldatenbank entnehmen.

Archiv erstellen

Das Hauptobjekt der DLL ist das Archiv-Objekt. Es steht sowohl beim Erzeugen und Hinzufügen von Dateien als auch beim Entpacken eines Zip-Archivs im Mittelpunkt.

Bevor Sie das Tool einsetzen, müssen Sie sich überlegen, ob Sie gegebenenfalls auf die Ereignisse des Archive-Objekts reagieren möchten. Diese werden unter anderem ausgelöst, wenn eine Datei zum Archiv hinzugefügt, eine Datei gelöscht oder das Archiv entpackt wird. In dem Fall müssen Sie die Objektvariable mit dem Schlüsselwort WithEvents deklarieren, was nur in Formular-, Berichts- und Klassenmodulen, aber nicht in Standardmodulen möglich ist. Hier ist dann auch unbedingt der Verweis nötig, mit Late Binding gibt es keine unmittelbare Möglichkeit zum Einsatz von WithEvents und der passenden Ereignisse.

Für den Anfang lassen wir diese Option allerdings zunächst außen vor und konzentrieren uns auf die eigentlichen Funktionen.

Die Zeilen zum Erstellen und Erzeugen eines Archivs sehen beispielsweise wie folgt aus:

Dim objArchiv As SAWZipNG.Archive
Set objArchiv = New SAWZipNG.Archive

Das Archiv existiert bis dato nur im Speicher. Sie können nun Dateien hinzufügen und das Archiv auf die Festplatte bannen. Das funktioniert etwa so:

Dim objArchiv As SAWZipNG.Archive
Set objArchiv = New SAWZipNG.Archive
With objArchiv
   .Create "c:\\SawZip.zip"
   .AddFile "c:\\test.txt"
End With

Die Create-Methode legt zunächst die Zip-Datei an, die AddFile-Methode fügt die angegebene Datei hinzu – fertig, die erste Zip-Datei ist erstellt!

Beachten Sie, dass Access abstürzt, wenn Sie der Create-Methode eine leere Zeichenkette übergeben. Wenn der Benutzer den Dateinamen eingibt oder auswählt, prüfen Sie diesen zuvor auf seinen Inhalt.

Natürlich gibt es noch einige Einstellungen, die Sie in den folgenden Abschnitten kennen lernen.

Beispieldaten

Zum Testen der Zip-Bibliothek brauchen Sie ein paar Verzeichnisse und Dateien, an denen Sie nichts kaputt machen können. Mit der folgenden Routine legen Sie die passenden Elemente im Verzeichnis der aktuellen Datenbank an (s. Abb. 2):

pic002.tif

Abb. 2: Diese per VBA-Code schnell angelegte Verzeichnis- und Dateistruktur dient als Versuchsfeld für die Zip-Bibliothek.

Public Sub Beispieldateien()
   Dim i As Integer
   Dim j As Integer
   Dim strPfad As String
   On Error Resume Next
   strPfad = CurrentProject.Path
   MkDir strPfad & "\\Zip"
   On Error GoTo 0
   For i = 1 To 10
     Open strPfad & "\\Zip\\Test" _
& Format(i, "00") _
& ".txt" For Output As #1 Print #1, "Test" Close #1 On Error Resume Next MkDir strPfad & "\\Zip\\Zap" _
& Format(i, "00") For j = 1 To 10 Open strPfad & "\\Zip\\Zap" _
& Format(i, "00") & "\\Test" _
& Format(j, "00") & ".txt" _
For Output As #2 Write #2, "Test" Close #2 Next j On Error GoTo 0 Next i End Sub

Zu Beispielzwecken könnte man nun ein Formular entwickeln, dass etwa die Funktionen von WinZip oder ähnlichen Produkten nachbildet. Das wäre anschaulich, macht aber wenig Sinn. Viel interessanter ist es, die Zip-Funktionen beispielsweise zum Zusammenpacken zu sichernder Daten zu verwenden – ein netter Anwendungszweck wäre eine Datenbank, die Berichte im Snapshot- oder PDF-Format speichert, diese packt und per Mail verschickt. Im Folgenden lernen Sie daher die nackten VBA-Anweisungen zur Steuerung der Zip-Bibliothek kennen.

Datei verschlüsselt packen

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar