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

*.xls per VBA zippen

Forumthread: *.xls per VBA zippen

*.xls per VBA zippen
23.06.2006 08:48:34
Manfred
Hallo,
bei meinem Versuch eine *.xls Datei zu Zippen, komme ich nicht weiter. Kann mir dabei bitte jemand behilflich sein.
Ich habe diesen VBA-Code hier gefunden, er ist aber bei mir nicht lauffähig.

Sub MappeSchliessen()
Dim xlsName$, zipName$, Zip$
ActiveWorkbook.Save
xlsName = ActiveWorkbook.FullName
ActiveWorkbook.Close
zipName = Left(xlsName, Len(xlsName) - 4) & xlsName.Zip
Zip = c:\programme\winzip\winzip32.exe -a
Shell Zip & zipName & xlsName
End Sub

Ich möchte die Datei namens:
C:\Programme\Gemeinsame Dateien\Urlaub.xls in
C:\Programme\Gemeinsame Dateien\Urlaub.zip speichern und mir würde der VBA-Code reichen ohne das die einzelnen Dateien geöffnet werden.
Gruss Manfred
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: *.xls per VBA zippen
23.06.2006 08:50:04
Dr.
Hi,
"nicht lauffähig" ist für eine Analyse ein bißchen wenig...
AW: *.xls per VBA zippen
23.06.2006 08:54:19
Manfred
Hallo Dr.,
was soll ich mehr sagen. Versuche mal das VBA ins Modul zu bringen, da geht es doch schon mit den Fehlermeldungen los.
Gruss Manfred
AW: *.xls per VBA zippen
23.06.2006 09:38:18
Manfred
Nochmals Hallo,
die Richtung scheint schon mal sehr gut zu sein, nur habe und kann auch keine andere Version von Zip nutzen, da ich keine anderen Softwaren auf den Rechner bringen darf und mit C:\Programme\WinZip\WINZIP32.EXE scheint es nicht automatisch zu laufen. Hast du da eine Idee? Einfach nur die Zeile für WinZip auswechseln bringt mir nicht den Erfolg.
Gruss Manfred
Anzeige
AW: *.xls per VBA zippen
23.06.2006 09:41:42
Dr.
Kann es sein, dass Du den Level etwas verpasst hast? Der Code aus dem Thread tuts einwandfrei. Dateiname der .exe und Pfad anpassen und fertig.
AW: *.xls per VBA zippen
23.06.2006 09:54:09
Manfred
Hallo Dr.,
ich finde es sehr schade, das wir uns nun hier auch über das von mir eingegeben Level unterhalten müßen, statt über das eingentliche Problem zu reden. Ich finde eigentlich, das ich bereits gut mit VBA umgehen kann und außerdem gibt es leider nicht die Möglichkeit das Level mit VBA "ja" einzugeben, denn ich arbeite schließlich nicht nur mit dem MakroRekorder.
Aber damit ist mein Problem leider immer noch nicht gelöst.
Gruss Manfred
Anzeige
Nachtrag zu: *.xls per VBA zippen
23.06.2006 09:42:45
Manfred

Sub Zippen2()
Dim sDatei As String
Dim sPfad As String
sPfad = "D:\Userform\"
ChDrive sPfad
ChDir sPfad
sDatei = Dir("*.xls")
Do While sDatei <> ""
Shell "c:\programme\winzip\winzip32.exe gepackt\" & Left(sDatei, Len(sDatei) - 4) & " " & sDatei
sDatei = Dir
Loop
End Sub

Anzeige
kann vielleicht ein anderer weiterhelfen?
23.06.2006 11:25:35
Manfred
Kann mir bitte jemand sagen, wie diese Zeile dabei richtig heißen muß, damit automatisch das ZipFile erstellt wird?
Shell "c:\programme\winzip\winzip32.exe " & "D:\Userform\" & "DateiName.zip"
Gruss Manfred
---> hier die Lösung
23.06.2006 13:54:17
Manfred
Für alle die es auch benutzen möchten, stelle ich hier die Lösung zur Verfügung

Sub Zippen()
'alle in einem Verzeichnis befindlichen Dateien einzeln Zippen!
Dim sDatei As String
Dim sPfad As String
sPfad = "C:\Test\" 'hier den Pfadnamen eingeben, bzw ändern!
ChDrive sPfad
ChDir sPfad
sDatei = Dir("*.xls")
Do While sDatei <> ""
zipName = Left(sDatei, Len(sDatei) - 4) & ".zip"
Shell "c:\programme\winzip\winzip32.exe -min -a " & sPfad & zipName & " " & sDatei
sDatei = Dir
Loop
End Sub

Freundliche Grüße
Manfred
Anzeige
AW: wie entzippen ??
23.06.2006 14:30:46
HorstH
Hallo Manfred,
zippe und entzippe Dateien. Habe jedoch Probleme mit dem Entzippen. Hast du da Erfolgreiches script? Meins sollte es tun, tut es aber nicht. Vielleicht kannst du den Fehler finden. Die Pfade in ein sheet in die genannten Zellen schreiben oder aber direkten Pfad eintragen in code. Das sheet muss offen sein beim zip-Vorgang. Dateien kann ich zippen, aber entzippen, da hapert es bzw. funktioniert mal gar nicht. Teste mal. Für Rückmeldung wäre ich dankbar. Ab Montag wieder im Büro. Gruß Horst
Zippen Modul 1:
Option Explicit
Public Const PROCESS_QUERY_INFORMATION = &H400
Public Const WAIT_TIMEOUT = &H102&
Declare <pre>
Function OpenProcess Lib "Kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare <pre>
Function WaitForSingleObject Lib "Kernel32" (ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long
<pre>
Sub Win32WaitTilFinished(ProgEXE As String)
Dim ProcessID As Long
Dim hProcess As Long
Dim RetVal As Long
ProcessID = Shell(ProgEXE, vbHide)
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessID)
Do
DoEvents
RetVal = WaitForSingleObject(hProcess, 50)
Loop Until RetVal <> WAIT_TIMEOUT
End Sub</pre>
Zippen Modul 2(zum Zippen dann):
<pre>
Sub PackedZip_01()
Dim sZipPath As String, sSourcePath As String, _
sTargetPath As String
sZipPath = Range("B1").Value
sSourcePath = Range("B4").Value
sTargetPath = Range("B5").Value
Call IfDir(sZipPath)
Call IfDir(sSourcePath)
' If Dir(sTargetPath) <> "" Then
' Kill sTargetPath
' End If
On Error GoTo ERRORHANDLER:
Win32WaitTilFinished _
sZipPath & " -a " & _
sTargetPath & " " & _
sSourcePath
MsgBox "Erfolgreich gezippt:" & vbLf & sTargetPath
Exit Sub
ERRORHANDLER:
MsgBox "F E H L E R ! Datei konnte nicht gepackt werden!"
End Sub</pre>
Zippen Modul 3 (zum entzippen):
' F E H L E R Dateien landen immer unter eigene Dateien ? oder funktioniert mal gar nicht ??
<pre>
Sub OpenZip_01()
Dim sZipPath As String, sSourcePath As String, sTargetPath As String
sZipPath = Range("B1").Value
sSourcePath = Range("B9").Value
' sTargetPath = "c:\Programm_QSB0e\"
sTargetPath = Range("B8").Value
Call IfDir(sZipPath)
Call IfDir(sSourcePath)
' If Dir(sTargetPath) <> "" Then
' Kill sTargetPath
' End If
' On Error GoTo ERRORHANDLER:
Call Win32WaitTilFinished(sZipPath & " -e " & sSourcePath)
' Workbooks.Open sTargetPath
Exit Sub
'ERRORHANDLER:
' Msgbox "Datei konnte nicht entpackt werden!"
End Sub</pre>
Anzeige
AW: wie entzippen ??
24.06.2006 07:47:02
schauan
Hallo Horst,
schau mal hier
http://phorum.excelhost.de/read.php?11,34431,34434

Hoffe geholfen zu haben
Grüße von André aus Gera - Excel-97-2003

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Excel-Datei mit VBA zippen: So funktioniert's


Schritt-für-Schritt-Anleitung

Um eine Excel-Datei mit VBA zu zippen, kannst du den folgenden VBA-Code verwenden. Dieser Code nutzt WinZip, um die Datei zu zippen. Stelle sicher, dass der Pfad zu WinZip korrekt ist.

  1. Öffne Excel und gehe zu den Entwicklertools. Falls die Entwicklertools nicht aktiviert sind, gehe zu Datei -> Optionen -> Menüband anpassen und aktiviere sie.

  2. Füge ein neues Modul hinzu:

    • Klicke auf „Visual Basic“.
    • Wähle „Einfügen“ und dann „Modul“.
  3. Füge den folgenden Code ein:

Sub Zippen()
    Dim sDatei As String
    Dim sPfad As String
    sPfad = "C:\Test\" 'Hier den Pfadnamen eingeben
    ChDrive sPfad
    ChDir sPfad
    sDatei = Dir("*.xls")

    Do While sDatei <> ""
        zipName = Left(sDatei, Len(sDatei) - 4) & ".zip"
        Shell "c:\programme\winzip\winzip32.exe -min -a " & sPfad & zipName & " " & sDatei
        sDatei = Dir
    Loop
End Sub
  1. Ändere den Pfad gemäß deiner Datei. Ersetze C:\Test\ durch den Pfad, in dem sich deine Excel-Datei befindet.

  2. Führe das Makro aus. Das Makro zippt alle .xls-Dateien im angegebenen Verzeichnis.


Häufige Fehler und Lösungen

  • Problem: Der VBA-Code wird nicht ausgeführt.

    • Lösung: Stelle sicher, dass du den richtigen Pfad zu winzip32.exe angegeben hast.
  • Problem: WinZip öffnet sich, anstatt die Datei zu zippen.

    • Lösung: Überprüfe die Argumente im Shell-Befehl und stelle sicher, dass sie korrekt formatiert sind.
  • Problem: Die gezippte Datei wird nicht erstellt.

    • Lösung: Prüfe die Berechtigungen für den Zielordner und stelle sicher, dass du Schreibrechte hast.

Alternative Methoden

Wenn du keine Software wie WinZip verwenden möchtest, kannst du auch andere Tools wie 7-Zip oder .NET-Bibliotheken nutzen. Hier ein Beispiel mit 7-Zip:

Shell "C:\Program Files\7-Zip\7z.exe a -tzip " & sPfad & zipName & " " & sDatei

Achte darauf, den Pfad zu 7z.exe entsprechend anzupassen.


Praktische Beispiele

Hier ist ein Beispiel, wie du eine bestimmte Excel-Datei zippen kannst:

Sub ZipEinzelneDatei()
    Dim zipName As String
    zipName = "C:\Programme\Gemeinsame Dateien\Urlaub.zip"
    Shell "c:\programme\winzip\winzip32.exe -a " & zipName & " C:\Programme\Gemeinsame Dateien\Urlaub.xls"
End Sub

Diese Methode speichert die Excel-Datei Urlaub.xls als Urlaub.zip.


Tipps für Profis

  • Automatisiere den Prozess: Du kannst den Vorgang des Zippen in regelmäßigen Abständen automatisieren, indem du das Makro in eine geplante Aufgabe einfügst.

  • Verwende Fehlerbehandlung: Integriere On Error Resume Next in deinen Code, um Fehler beim Zippen zu ignorieren und die Ausführung fortzusetzen.

  • Testen: Teste deinen Code immer in einer sicheren Umgebung, um sicherzustellen, dass er wie gewünscht funktioniert, bevor du ihn in einer Produktionsumgebung verwendest.


FAQ: Häufige Fragen

1. Wie entzippe ich eine Datei? Du kannst eine ZIP-Datei mit einem ähnlichen VBA-Skript entzippen. Nutze dafür den Shell-Befehl mit dem entsprechenden Entzip-Befehl von WinZip oder 7-Zip.

2. Kann ich VBA verwenden, um mehrere Dateien gleichzeitig zu zippen? Ja, mit einer Schleife im VBA-Code kannst du mehrere Dateien in einem Verzeichnis zippen, wie im obigen Beispiel gezeigt.

3. Welche Software benötige ich, um Excel-Dateien zu zippen? Du benötigst eine Software wie WinZip oder 7-Zip, die in deinem VBA-Skript aufgerufen wird. Stelle sicher, dass die Software installiert ist und der Pfad korrekt angegeben wird.

4. Funktioniert das Zippen in allen Excel-Versionen? Die oben genannten VBA-Codes sollten in den meisten modernen Excel-Versionen funktionieren, solange die Software zum Zippen vorhanden ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige