Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
752to756
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
752to756
752to756
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Winzip aus VBA aufrufen

Winzip aus VBA aufrufen
10.04.2006 15:39:34
Ingo
Hallo Leute,
ich hatte mir mit Hilfe der Recherche folgendes Makro gebastelt:

Sub verpacken()
Dim sxlpath As String, szippath As String
Dim swinzippath As String
ActiveWorkbook.Save
'Pfadname ExcelDatei
sxlpath = Chr(34) & ActiveWorkbook.FullName & Chr(34)
'Pfadname ZipDatei
szippath = Left(sxlpath, Len(sxlpath) - 4) & "zip" & Chr(34)
'Datei unter neuem Namen speichern
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "/x" & ActiveWorkbook.Name
'Winzip aufrufen
swinzippath = "C:\programme\winzip\winzip32.exe -a "
Shell swinzippath & szippath & " " & sxlpath
'Ursprungsdatei löschen
Kill Mid(sxlpath, 2, Len(sxlpath) - 2)
'Datei unter altem Namem neu abspeichern
ThisWorkbook.SaveAs Filename:=Mid(sxlpath, 2, Len(sxlpath) - 2)
'Datei mit neuem namen wieder löschen
Kill ActiveWorkbook.Path & "/x" & ActiveWorkbook.Name
'Anwendung schließen
Application.Quit
End Sub

Immer wenn ich in Einzelschritten testete lief es wunderbar, aber sobald der Programmdurchlauf in einem Rutsch erfolgte blieb es stehen.
Ich hab dann nach dem Shell-Befehl für Winzip eine Pause von 2 Sek eingebaut.Das sieht so aus.:

Sub verpacken()
Dim sxlpath As String, szippath As String
Dim swinzippath As String
ActiveWorkbook.Save
'Pfadname ExcelDatei
sxlpath = Chr(34) & ActiveWorkbook.FullName & Chr(34)
'Pfadname ZipDatei
szippath = Left(sxlpath, Len(sxlpath) - 4) & "zip" & Chr(34)
'Datei unter neuem Namen speichern
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "/x" & ActiveWorkbook.Name
'Winzip aufrufen
swinzippath = "C:\programme\winzip\winzip32.exe -a "
Shell swinzippath & szippath & " " & sxlpath
'Zeitverzögerung
Application.Wait (Now + TimeValue("0:00:02"))
'Ursprungsdatei löschen
Kill Mid(sxlpath, 2, Len(sxlpath) - 2)
'Datei unter altem Namem neu abspeichern
ThisWorkbook.SaveAs Filename:=Mid(sxlpath, 2, Len(sxlpath) - 2)
'Datei mit neuem namen wieder löschen
Kill ActiveWorkbook.Path & "/x" & ActiveWorkbook.Name
'Anwendung schließen
Application.Quit
End 

Sub
Seitdem läuft es prima; kann mir das einer erklären?
mfG
Ingo Christiansen

		

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Winzip aus VBA aufrufen
10.04.2006 15:53:54
ANdreas
Hallo Ingo,
also der Fall ist recht klar. WinZip braucht natürlich Zeit um die Aktion auszuführen und sperrt die Datei(en) dabei. Der Kill-Befehl unmittelbar ausgeführt bringt dann einen Fehler. Bei Einzelschritten oder mit Verzögerung kommt der Kill-Befehl einfach später, so dass WinZip seine Aufgabe schon wieder beendet hat (Datei nicht mehr gesperrt).
Ich würde die Verzögerung allerdings etwas anders machen. Besser wäre eine Schleife in der Du sekündlich abprüfst ob die Datei löschbar ist, wenn nicht wird wieder eine Sekunde gewartet (inklusive DoEvents). Das ist dann flexibel, egal wie lange WinZip benötigt. (Kannst natürlich auch ein TimeOut für Abbruch implementieren wenn nach 30 Sekunden immer noch nichts geht)
Hoffe das hilft weiter,
Andreas
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige