Excel VBA オートメーションエラー(Automation Error)とは?

Office

最近、Excel VBA(Excelマクロ)でインターネットエクスプローラ(Internet Explorer / IE)をCreateObjectしてスクレイピングしていたところ、Webリクエストを何度も繰り返すとIEプロセスのメモリが溜まり続け、1.5Gくらいになると、Webページを新しいタブで開きなおしますというメッセージがIEで発生し、VBAがオチるという事象がありました。

VBA側ではオートメーションエラーが発生します。

VBAでエラーハンドル(On Error GoTo)を入れても引っかかりません。

VBAのエラーハンドルVBAの中の例外を補足するものであって、CreateObjectした外部プロセスの例外は捕捉できないのです。(言われてみれば当たり前ですね)

とりあえず、今回は規定リクエスト数でIEをCreateObjectし直すことで回避するようにしました。

オートメーションエラーとは?

ところで、VBAに表示される「オートメーションエラー」とはどういう意味なのでしょうか?

これは、そもそもCreateObjectから順に追っていくことで判明します。

CreateObjectとは?

CreateObjectの正式リファレンスを参照します。概要には、

ActiveX オブジェクトへの参照を作成して返します。

CreateObject 関数

とあります。

ActiveXとは?

ActiveXとはなんでしょう?
先ほどの概要のリンクをたどると、ActiveXとは

オートメーション インターフェイスを通して他のアプリケーションまたはプログラミング ツールに公開されるオブジェクト。

ActiveXオブジェクト

との用語解説になっています。

ここでオートメーションという用語が出てきました。オートメーションエラーはココから来ています。

ActiveXとは「オートメーションインターフェイス」というインターフェイス(規格)を通じて他のアプリケーションで使用できるオブジェクト(アプリケーション)ということですね。
上に紹介したVBAはまさに「オートメーションインターフェイス」を備えたActiveXであるIEをExcel VBAが使っているという例です。

ActiveXの詳細はコチラです。
(英語ですが、chromeブラウザの翻訳が可能です)

ここには以下の記述があります。

The objects an application or programming tool exposes are called ActiveX objects. Applications and programming tools that access those objects are called ActiveX clients.
アプリケーションまたはプログラミングツールが公開するオブジェクトは、ActiveXオブジェクトと呼ばれます。これらのオブジェクトにアクセスするアプリケーションとプログラミングツールは、ActiveXクライアントと呼ばれます。(google翻訳)

結局オートメーションインターフェイスの実装はActiveXのことなので、ActiveXでエラーと言われた方がしっくりきますね。

オートメーションエラー=ActiveXのエラーということです。


他にExcelに関する記事はこちらをどうぞ