3

以下のようなコードを使用して、いくつかのファイルを zip フォルダーに追加しています。

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

ほとんどの場合、これで問題なく動作しますが、時々エラーが発生します。

「(圧縮 (zip 形式) フォルダー エラー) 出力ファイルを作成できません」. このエラーは、VBA コードの外部で非同期的に発生するため、トラップして是正措置を取ることはできません。

ブレーク モードに入り、次のステップに戻る場合:

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

その後、ファイルは正しく追加されます。

この問題の原因となっている圧縮フォルダーまたはソース ファイルに何らかのロックがあると推測していますが、これを確認する方法がわかりません。追加されるファイルは Microsoft Access 2007 から作成された pdf ファイルであり、完全修飾パスを使用しており、コードは次のように実行され、zip ファイルごとに最大 10 個の pdf が作成されることに注意してください。

  1. 郵便番号を作成

  2. このループを実行します。

  ReportToRun ごとに
    CreatePdf ' DoCmd.OutputTo acOutputReport、"rptHame"、acFormatPDF、strReportName を使用
    郵便番号に追加
  次

これを修正するか、出力ファイルを作成できませんエラーをトラップする方法はありますか? ありがとう

4

2 に答える 2

1

私は、オープン ソースの Info Zip DLL をうまく使用しました。リンクとサンプル VB コードについては、圧縮 DLL、OCX などを参照してください。

于 2009-12-21T22:46:20.130 に答える
0

2つの考え、どちらも問題を解決する可能性は低いです:

  1. 次の引数、つまり AutoStart 引数として明示的に FALSE を指定しようとしましたか? ヘルプ ファイルには、デフォルトで FALSE が設定されていると書かれていますが、PDF を生成した後に開いているため、まだ開いているのではないでしょうか?

  2. 数秒の SLEEP を追加します (コードについては、コードをスリープ状態にするを参照してください)。

  3. または、レポートごとに生成/コピーするのではなく、すべてのレポートをループしてすべて生成してから、新しいループを開始して各レポートを zip ファイルにコピーします。2 つのループの間に数​​秒のスリープがあっても問題ないかもしれません (問題は、コピーが開始された時点で非同期 PDF 生成プロセスが完全に完了していないことにあると仮定します)。

于 2009-12-22T00:37:52.857 に答える