VBAでIE自動制御で問題になるのが、オートメーションエラーです。
通常、IEを読み込み待ちをすれば問題ないのですが、この処理はあまり信用できません。
読み込み待ちでOKとなったにも関わらず、オブジェクトに指定した要素が存在していないケースがあり、
結果、オートメーションエラーになることがあります。
(もしくはオブジェクト変数またはWithブロック変数が設定されていませんのエラーが発生します)
こちらは指定要素が存在するかどうかを判断して処理を変更すれば問題ありません。
あまり読み込み待ちを信用しない事が正解です。
Webページに指定要素が存在するかチェックするサンプルコード
'■Webページに指定要素が存在しているかチェック Sub sample_IE_isNull_Check() Dim objIE As Object '■IE起動→該当ページへ遷移 Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "https://vba-create.jp/" Call Call_IE_WaitTime ’■指定要素(今回ならmenu-item-976のid要素)が存在するかどうかチェック If IsNull(objIE.document.getElementById("menu-item-976")) Then MsgBox "読込が正常にできてません(要素が存在していない扱いとなっています)" Else MsgBox "読込が正常に完了" End If End Sub
注意点
上記は、サイトに「menu-item-976」のid要素は存在している前提です。
存在しているにも関わらず、またCall_IE_WaitTimeで読み込み待ちしてOKと判断されたにも関わらず、
指定要素がないと判断される場合は、isNullで切り分けしましょう。
Nullとなった場合は、再度Wait処理を入れるなどすれば、エラーで止まることはありません。
- 上記コードのみでは動作しません。下記記事のパーツ化した処理を入れましょう。
VBAでIE操作「ブラウザの読込待ち」処理をパーツ化する【エクセルマクロ】
関連記事
その他
Internet Explorerを使用して、Webスクレイピングは敷居が高い風に捉えられますが、
上記のように、パーツ化して組み合わせ処理するだけです。
Web上のデータを触りたい要望は会社様でも個人様でも多いと思います。
VBA IE操作を覚えて効率化しませんか?
作成が大変であれば弊社で代行開発も可能です。お気軽にお問い合わせください。
コメント