Ошибка VBA Zip-файла - PullRequest
       14

Ошибка VBA Zip-файла

3 голосов
/ 21 декабря 2009

Я использую код, подобный приведенному ниже, чтобы добавить некоторые файлы в папку zip:

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

В большинстве случаев это работает нормально, но иногда я получаю сообщение об ошибке:

"(Ошибка сжатых (заархивированных) папок). Невозможно создать выходной файл". Эта ошибка возникает асинхронно за пределами моего кода VBA, и поэтому я не могу перехватить ее, чтобы предпринять действия по исправлению.

Если я войду в режим перерыва и вернусь к:

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

тогда файл добавлен правильно.

Я предполагаю, что существует какая-то блокировка сжатой папки или исходного файла, вызывающая эту проблему, но я не уверен, как это проверить. Я должен отметить, что добавляемые файлы являются файлами PDF, созданными в Microsoft Access 2007, и мы используем полные пути, и код выполняется следующим образом, создавая до 10 файлов PDF на файл ZIP:

  1. Создать почтовый индекс

  2. Запустить этот цикл:

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

Есть идеи, как это исправить или перехватить ошибку Не удается создать выходной файл? Спасибо

Ответы [ 2 ]

1 голос
/ 22 декабря 2009

Я очень успешно использовал открытые библиотеки Info Zip Info. См. Сжатие DLL, OCX и т. Д. для ссылок и примера кода VB.

0 голосов
/ 22 декабря 2009

Две мысли, ни одна из которых не может решить проблему:

  1. Вы пытались явно указать FALSE в качестве следующего аргумента, то есть аргумента AutoStart? В файле справки указано, что по умолчанию установлено значение ЛОЖЬ, но, возможно, он открывает PDF-файлы после их создания, чтобы они все еще оставались открытыми?

  2. добавьте SLEEP на пару секунд (см. Заставьте код перейти в Sleep для кода).

  3. альтернативно, переберите все ваши отчеты и сгенерируйте их все, затем начните новый цикл, чтобы скопировать каждый в zip-файл, а не создавать / копировать для каждого отчета. Сон в паре секунд между двумя циклами может не помешать (при условии, что проблема заключается в том, что процесс асинхронной генерации PDF не полностью завершен в момент запуска копирования).

...