2009-05-14 9 views
0

Ich habe vor kurzem an einer App in VBA gearbeitet, die auf einigen Dateien beruht, die in der .docm-Datei des Dokuments selbst enthalten sind. Anfangs verwendete ich die komprimierte Windows XP-Ordnerfunktion, um den Inhalt des Dokuments programmgesteuert zu extrahieren. Dies war eine optimale Lösung, da es in allen Windows XP integriert ist, für die es verwendet wird und daher keine Installation erforderlich ist. Allerdings habe ich einen Haken gefunden: Es scheint, dass, nachdem ich das Dokument eine bestimmte Anzahl von Malen extrahiert habe, beginnt es mit der Fehlermeldung "Fehler, diese Datei existiert bereits". Anfangs dachte ich, dass ich etwas kaputt gemacht und etwas tiefer gegraben habe, es stellte sich heraus, dass es keinen Fehler in meinem Code gab, sondern einen Bug im komprimierten Ordner.Wie implementiere ich Zip-Funktionalität in VBA?

Wenn der Fehler "Datei existiert bereits" in einer bestimmten ZIP-Datei auf Ihrem System angezeigt wird, funktioniert Compressed Folder nicht mehr bei ANY-Datei mit demselben Namen. Wenn Sie diese Datei umbenennen, beginnt sie wieder zu arbeiten. Hier ist meine Frage: Wie kann ich Zip-Fähigkeit in VBA ohne komprimierte Ordner implementieren? Bonusfrage: Wie kann ich komprimierte Ordner reparieren?

Danke für Ihre Zeit.

-Seamus

Update: Zur Zeit habe ich es Compressed Folders arbeiten mit, arbeite ich, um den Fehler, indem Sie die Datei auf etwas Neues jedes Mal Umbenennung geschieht der Fehler. Das funktioniert OK, aber ich suche eher nach einer Lösung als nach einem Hack um das Problem herum.

Antwort

0

Es scheint, dass es keinen guten Weg gibt, auf die Zip-Funktionalität direkt in Windows zuzugreifen. Es scheint, dass der einzige gute Weg, dies zu tun, ist die Verwendung der Zip-Ordner-Kopiermethode, die in anderen Antworten verlinkt ist. Was das Problem betrifft, das ich habe, werde ich es umgehen, indem ich jedes Mal einen neuen Dateinamen verwende.

0

Vielleicht eine Idee für die Bonusfrage: Kannst du die Datei nicht 2 Mal umbenennen, bevor du sie mit deiner VBA App verwendest? Geben Sie ihm zunächst einen temporären Namen und benennen Sie ihn dann wieder in den ursprünglichen Namen um.

EDIT: Ich rate nur hier, aber es scheint unwahrscheinlich, dieses Problem in Ihrer App zu beheben, sondern es als eine Art Windows-Patch zu beheben. Dies bedeutet, dass auf jedem Computer, auf dem Ihre App ausgeführt werden soll, dieser Patch installiert sein muss, damit er ordnungsgemäß funktioniert. Darauf können Sie sich nicht verlassen. Ich denke, du solltest bei einem Workaround bleiben.

+0

Das ist eigentlich was ich jetzt mache, aber es ist ein bisschen suboptimal, weil ich zufällig den neuen Dateinamen erzeugen muss, der mir schlecht riecht. –

+0

Ein völlig zufälliger Dateiname riecht in der Tat schlecht. Könnten Sie nicht einfach den Dateinamen mit einer fortlaufenden Nummer erweitern, während Sie nach einer bereits vorhandenen Datei mit dem Namen suchen? – DaClown

0

This kann Ihnen vielleicht helfen. Es sieht so aus, als ob er das Scripting-Dateisystem-Objekt verwendet ...

+0

Vielen Dank für den Link, es enthält viele nützliche Informationen. Er verwendet jedoch die integrierte Zip-Funktion des Computers: oShellApp.Namespace (UnzipFolder) .CopyHere oShellApp.Namespace (SourceFile) .items Es gibt jedoch andere Dinge auf dieser Seite, die mir mit anderen Problemen helfen werden. Vielen Dank! –

+0

Das ist die Compressed Folder-Funktion, um genau zu sein. –