ExcelVBA

VBAでIE操作「Webページに指定要素が存在するかチェックする」【エクセルマクロ】

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 "http://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操作を覚えて効率化しませんか?
作成が大変であれば弊社で代行開発も可能です。お気軽にお問い合わせください。

 

コメント

タイトルとURLをコピーしました