TOP > AFormAut > AFormAut特有のVBA実行エラー
概要
AFormAutオブジェクト特有のVBAでの実行エラーが有ります。そのエラーが発生するタイミングと、その対策について紹介します。
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ランタイムエラー(実行エラー)が発生します。
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プロセスの後処理」は、当サイト管理者の経験上からの推測です。メーカー公式の情報ではありません。
< 戻る >