2009-05-14 12 views
0

récemment je travaille sur une application dans vba qui s'appuie sur certains fichiers qui sont contenus dans le fichier .docm du document lui-même. Initialement, j'utilisais la fonctionnalité du dossier compressé Windows XP pour extraire par programme le contenu du docm. C'était une solution optimale car elle est intégrée dans tout Windows XP sur lequel elle sera utilisée et donc aucune installation requise. Cependant, j'ai rencontré un problème: il semble qu'après avoir extrait le docm un certain nombre de fois, il commence à dire "Erreur, ce fichier existe déjà". Au début, je pensais que j'avais cassé quelque chose et creusé un peu plus profond, il s'est avéré qu'il n'y avait pas de bogue dans mon code, mais plutôt un bug dans Compressed Folder. Si l'erreur "File Already Exists" apparaît sur un fichier zip de votre système, Compressed Folder ne fonctionne plus sur TOUT fichier du même nom, si vous le renommez, il recommence à fonctionner. Donc, voici ma question: Comment puis-je mettre en œuvre la capacité de fermeture à glissière dans VBA sans dossiers compressés? Question bonus: Comment puis-je réparer les dossiers compressés?Comment implémenter la fonctionnalité Zip dans VBA?

Merci pour votre temps.

-Seamus

Mise à jour: Actuellement je l'ai travail à l'aide des dossiers compressés, je travaille autour du bug en renommant le fichier à quelque chose de nouveau chaque fois que l'erreur se produit. Cela fonctionne bien, mais je cherche plus d'un correctif plutôt qu'un hack autour du problème.

Répondre

0

Il semble qu'il n'y ait aucun moyen d'accéder à la fonctionnalité zip directement dans Windows. Il semble que le seul bon moyen de le faire est d'utiliser la méthode de copie du dossier zip liée à d'autres réponses. Quant au problème que je rencontre, je vais le contourner en utilisant un nouveau nom de fichier à chaque fois.

0

Peut-être une idée pour la question de bonus: ne pouvez-vous pas renommer le fichier 2 fois avant de l'utiliser avec votre application VBA? Donnez-lui d'abord un nom temporaire, puis renommez le nom d'origine.

EDIT: Je ne fais que deviner ici, mais il semble peu probable de résoudre ce problème au sein de votre application, mais plutôt de le réparer comme un type de patch de Windows. Cela signifie que chaque ordinateur sur lequel votre application doit fonctionner devrait avoir ce correctif installé pour fonctionner correctement. Et ce n'est pas quelque chose sur lequel vous pouvez compter. Donc, je pense que vous devriez rester avec une solution de contournement.

+0

C'est en fait ce que je suis en train de faire, mais c'est un peu insuffisant parce que je dois générer aléatoirement le nouveau nom de fichier, qui me semble mauvais. –

+0

Un nom de fichier complètement aléatoire sent mauvais. Ne pourriez-vous pas simplement étendre le nom de fichier avec un numéro consécutif tout en recherchant un fichier déjà existant avec le nom? – DaClown

0

This peut peut-être vous aider. Il semble qu'il utilise l'objet du système de fichiers de script ...

+0

Merci beaucoup pour le lien, il contient beaucoup d'informations utiles. Il utilise cependant la fonctionnalité zip intégrée de l'ordinateur: oShellApp.Namespace (UnzipFolder) .CopyHere oShellApp.Namespace (SourceFile) .items Il existe cependant d'autres éléments sur cette page qui m'aideront à résoudre d'autres problèmes. Merci! –

+0

C'est la fonctionnalité Dossier compressé pour être exact. –

Questions connexes