IE操作時のオートメーションエラーと戦う

2019年8月28日

はじめに

Excel VBAでツールを作成する時に、よく目にするオートメーションエラーについてIEブラウザ操作関連のオートメーションエラーについて、自分なりの対策を残しておきます。

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

メモリ不足や、参照の切れた変数の使用、ブックに対する矛盾する処理、PCが重い場合等々…様々な理由が原因で発生するエラーです。

基本的な対策

基本的にはエラー発生時のメッセージに記載されているエラーコードをGoogleで検索すると、先人様達の解決策がヒットします。

しかし中には全く解決策のないものや、解決策を講じてもまだ発生するなんてことも結構あります。特にIEブラウザ操作関連がオートメーションエラーの発生率が高かったので今回は記事にまとめようと思いました。

ソースコード

いろいろ話す前にIEブラウザ操作時のテンプレートとして使用できるソースコードを載せておきます。
InternetExplorerMediumを使用しているので、IEの保護モードは解除してください。

Googleのトップページを開いて、閉じるサンプルです。
強いて特筆する点と言えば、仰々しく書いてあるIEのプロセスを削除する部分でしょうか。
実は無くても、普通に動きます。しかしある操作を行うとオートメーションエラーが発生してしまう状態なのです。

その操作ですが、Quit後に再度処理を実行することです。
objIEは閉じている、Nothingもセットしてるから安心!とは行きません。
まだプロセスが残存しています。試しにIeProcessKillのコール処理を削除して複数回実行するとページトップ画像の-2125463506 (8150002e)エラーが発生すると思います。

これが意外とソースを見ているだけでは気付かないもので、しばらく頭を悩ませることになります。エラーコードで検索をかけても別の解決策が提示されていることが多いので、結局治らず…。という方もいたのではないでしょうか。

こんな時に発生する

上記のサンプルでは、2度目の実行でエラーとなるソースを記載しましたが、
ループ処理の中でQuit、NothingをSetした場合にも同様の事象が起きる場合があったりなかったりします。(これは原因不明、エラーが起きなかった箇所が別のところにソース追加したりするとエラーが発生しはじめたりもする)

その場合でもとりあえずプロセスを削除しておけば、この事象でのエラーは回避できます。お約束的な感じで記載するのもいいかもしれません。

最後に

今回はIEのプロセスを一括で削除するようなソースとしましたが、実際に使用する際にはExcel VBAが開いたIEブラウザのプロセスのみを削除するべきだと思います。
使用する際にはご注意ください。