2009-12-21 14 views
3

J'utilise un code similaire à ci-dessous pour ajouter des fichiers dans un dossier zip:VBA Zip Erreur de fichier

Set oApp = CreateObject("Shell.Application") 
oApp.Namespace(CVar(strDest)).CopyHere CVar(strSource) 

Cela fonctionne bien la plupart du temps, mais parfois je reçois une erreur:

"(Erreur Dossiers compressés (zippés)) Impossible de créer le fichier de sortie". Cette erreur est déclenchée de manière asynchrone en dehors de mon code VBA et en tant que telle, je ne peux pas l'intercepter pour prendre des mesures correctives.

Si je passer en mode pause et revenir vers:

oApp.Namespace(CVar(strDest)).CopyHere CVar(strSource) 

le fichier est ajouté correctement.

Je suppose qu'il existe une sorte de verrou sur le dossier compressé ou le fichier source qui provoque ce problème, mais je ne suis pas sûr de la façon de vérifier cela. Je dois souligner que les fichiers sont ajoutés sont des fichiers PDF créés à partir de Microsoft Access 2007 et nous utilisons les chemins qualifiés et le code fonctionne comme suit la création de jusqu'à 10 pdfs par fichier zip:

  1. Créer Zip

  2. Exécutez cette boucle:

 For Each ReportToRun 
    CreatePdf ' using DoCmd.OutputTo acOutputReport, "rptHame", acFormatPDF, strReportName 
    AddToZip 
    Next

Toute idée comment résoudre ce soit ou piéger l'erreur Impossible de créer de fichier de sortie? Merci

+1

Des mises à jour avec cette question? Mon patron a le même problème et cherche une solution. –

Répondre

0

J'ai très bien utilisé les DLLs Info Zip open souurce. Voir Compression DLLs, OCXs, etc pour les liens et l'échantillon de code VB.

+0

Merci. Va le faire –

0

Deux pensées, ni susceptible de résoudre le problème:

  1. Avez-vous essayé explicitement fournir FAUX comme l'argument suivant, à savoir, l'argument AutoStart? Le fichier d'aide indique par défaut FALSE, mais peut-être que c'est l'ouverture des fichiers PDF après les avoir générés, afin qu'ils soient toujours ouverts? Ajouter un SLEEP de quelques secondes (voir Make code go to Sleep pour le code). Alternativement, parcourez tous vos rapports et générez-les tous, puis démarrez une nouvelle boucle pour copier chacun dans le fichier zip, plutôt que de générer/copier pour chaque rapport. Avoir quelques secondes de sommeil entre les deux boucles pourrait ne pas faire de mal (en supposant que le problème est que le processus de génération de PDF asynchrone n'est pas complètement terminé au moment où la copie est lancée).

+0

1. Certainement pas les ouvrir. 2. Essayé d'ajouter un sommeil .... pas de joie. 3. Pensais essayer cela. Je vais devoir voir comment je vais ... –

+1

J'ai le même problème. Avez-vous trouvé une solution? – synergetic