2009-12-21 65 views
3

我使用类似于下面的代码添加一些文件到一个zip文件夹:VBA 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. 创建压缩

  2. 运行这个循环:

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

任何想法如何可以解决这个问题还是陷阱无法创建输出文件错误? 谢谢

+1

此问题的任何更新?我的老板有同样的问题,正在寻找解决方案。 – 2011-05-16 21:55:37

回答

0

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

+0

谢谢。会给它一个去 – 2009-12-22 21:42:29

0

两个意念,也不容易解决这个问题:

  1. 您是否尝试过明确提供虚假作为一个参数,即自动启动的说法?帮助文件说它默认为FALSE,但也许它在生成它们后打开PDF,以便它们仍然打开?

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

  3. 另外,遍历所有报表,并生成所有的人,然后开始一个新的循环,每一个副本复制到压缩文件,而不是生成/每个报告。在两个循环之间休眠几秒钟可能不会造成伤害(假设问题是异步PDF生成过程在复制启动时尚未完全完成)。

+0

1.绝对不会打开它们。 2.试图添加一个睡眠....没有快乐。 3.正在考虑尝试。将不得不看我如何得到... – 2009-12-22 21:41:28

+1

我有同样的问题。你有没有找到解决方案? – synergetic 2010-09-09 08:25:36