VBA Zip文件错误

时间:2009-12-21 15:07:33

标签: vba ms-access zip windows-shell

我使用类似下面的代码将一些文件添加到zip文件夹中:

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

大部分时间都可以正常工作,但有时我会收到错误:

“(压缩(压缩)文件夹错误)无法创建输出文件”。这个错误是在我的VBA代码之外异步引发的,因此我无法捕获它以采取补救措施。

如果我进入休息模式并退回到:

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

然后正确添加文件。

我猜测压缩文件夹或导致此问题的源文件存在某种锁定,但我不确定如何检查这一点。我应该注意,正在添加的文件是从Microsoft Access 2007创建的pdf文件,我们正在使用完全限定的路径,代码运行如下,每个zip文件最多可创建10个pdf文件:

  1. 创建Zip

  2. 运行此循环:

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

    知道如何修复此问题或陷阱无法创建输出文件错误? 感谢

2 个答案:

答案 0 :(得分:1)

我已经非常成功地使用了开源Info Zip DLL。有关链接和示例VB代码,请参阅Compression DLLs, OCXs, etc

答案 1 :(得分:0)

两个想法,既不可能解决问题:

  1. 您是否尝试过显式提供FALSE作为下一个参数,即AutoStart参数?帮助文件说它默认为FALSE,但也许它在生成后打开PDF,这样它们仍然是打开的?

  2. 添加几秒钟的休眠时间(请参阅Make code go to Sleep代码)。

  3. 或者,遍历所有报告并生成所有报告,然后启动新循环将每个报告复制到zip文件中,而不是为每个报告生成/复制。在两个循环之间休息几秒钟可能不会造成伤害(假设问题是异步PDF生成过程在启动副本时没有完全完成)。