AFormAut特有のVBA実行エラー

TOP > AFormAut > AFormAut特有のVBA実行エラー


Full Service for Takuma

概要

AFormAutオブジェクト特有のVBAでの実行エラーが有ります。そのエラーが発生するタイミングと、その対策について紹介します。

現在 Acrobat で文書が開いていません。

AFormAutオブジェクトはAcrobat OLEです。

動作確認

  • Windows 10 64bit
  • Acrobat XI Pro
  • Microsoft Excel 2007 - VBA

エラー発生の内容

以下のVBAコード上

Dim objAcroApp As New Acrobat.AcroApp
Dim objAFormApp As New AFORMAUTLib.AFormApp
Dim objAFormFields As New AFORMAUTLib.Fields

objAcroApp.CloseAllDocs
objAcroApp.Hide
bRet = objAcroAVDoc.Open(sFilePathIn, "I:\ABC.pdf")

Set objAFormFields = objAFormApp.Fields

  

「Set objAFormFields = objAFormApp.Fields」を特定のタイミングで実行した時に、以下のVBAランタイムエラー(実行エラー)が発生します。

実行時エラー'-2147220991 (80040201)':
現在 Acrobat で文書が開いていません。
現在 Acrobat で文書が開いていません。

1つ前のPDFオープン「objAcroAVDoc.Open」は正常です。

エラー発生のタイミング

時間の流れ(1):VBAでPDFの一連の処理が完了すると、メモリ上のAcrobatプロセス(Acrobat.exe)は数秒後に消えます。再度、VBAの処理を開始するとメモリ上にも再度Acrobatプロセスが発生します。

正常なケース

      

時間の流れ(2): 1回目と2回目の時間間隔が短いと、メモリ上のAcrobatプロセス(Acrobat.exe)は消えずにそのまま継続して使用されます。

正常なケース

   

時間の流れ(3): 但し、1回目のAcrobatプロセスがメモリ上から消える直前に AformAut オブジェクトの操作を開始すると実行エラー「現在 Acrobat で文書が開いていません。」が発生してしまいます。

実行エラーが発生するケース

   

上記はメモリから消えるのに10秒掛かるケースで、最後の3秒間にAformAutオブジェクトを呼び出すと実行エラーになりました。

時間的な流れ(2)は最後の3秒間には呼ばれなかったケースです。

実行エラーの回避方法

AformAut オブジェクトの実行時は1つ前のAcrobat プロセスの終了間際を避ける必要が有ります。そこで1回目も2回目も同様に処理を開始する前にメモリ上のAcrobatプロセスを強制的に終了させます。

実行エラーを回避するタイミング

以下のVBAロジックを使います。

Private Sub TerminateAcrobat()
Dim items As Object
Dim item As Object
Set items = CreateObject("WbemScripting.SWbemLocator") _
.ConnectServer.ExecQuery( _
"Select * From Win32_Process " & _
"Where Name = 'Acrobat.exe'")
If items.Count > 0 Then
For Each item In items
item.Terminate
Next
End If
End Sub

実行前にAcrobatプロセスが残っているのは、前で何らかの問題が生じた可能性が有ります。むしろ、その場合は一旦強制終了した方がイイとも考えることが出来ます。

TerminateAcrobatを実行する位置に関しては以下で再確認できます。

処理の最後で強制終了しない理由

1回目の全ての処理が完了したら、最後の後処理でAcrobatプロセスを強制終了した方が、全体の流れとしてはスッキリとします。しかし、これは危険です。

Acrobat(Acrobat.exeプロセス)は起動時にレジストリの内容を読み込みます。終了時には逆にレジストリへの書き込みを行います。レジストリへの書き込みは実行中でも行われる場合も有ります。
( 過去のテスト結果より。但し、Acrobat OLEも同様な動作をするかは未確認)

終了時には、一時作業ファイルの削除、関連プロセスの解除、その他モロモロを実行していると予測しています。残念なことにコノ手の情報は「メーカー非公開?」なのか、見つけることが出来ませんでした。

VBAでのPDFの一連の処理が全て完了後に即座にメモリに残っているAcrobatプロセスを強制的に消すと、Acrobatプロセスの後処理が出来ない状態になるはずです。後々で原因不明のトラブルに遭遇する可能性が出てきます。最後での強制終了はおすすめ出来ません。

当サイト管理者のパソコン環境(=超低速)では Acrobat プロセスが消えるのに約10秒は掛かります。もしかしたら、OS側と一緒に何らかの後処理をしているかもしれません。

最後での強制終了

場合によっては最後しかタイミングがない場合もあります。その時はよく検証し、リスク覚悟で行って下さい。

最後で強制終了するとAcrobat側で後処理が出来ない。

備考

  • 「Acrobatプロセスの後処理」は、当サイト管理者の経験上からの推測です。メーカー公式の情報ではありません。

戻る

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


出来るだけ早く返答する様には心がけていますが、遅くなる時もあります。ご了承ください。


SAMURAI Plugin

コメントをする時は出来れば以下もお願いします。

  • OS名 バージョン
  • Acrobat バージョン
  • ツール(Excel等) バージョン
コメントにサンプルコードを入れる時はコードの前後に <code> ・・・</code> タグを入れないとエラー(403)になります。それでもエラーが回避できない時はコメント下さい。個別に対処します。



お仕事で当サイトを見ている方へ
考え込んだら、ご質問下さい。
一緒に解決策を考えましょう。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください