Internet Explorer自動操作

VBAでIE操作「フレームありページの読込待ち」処理をパーツ化する【エクセルマクロ】

VBAでIE操作(InternetExplorer操作)

ExcelVBAマクロでIEを操作し、Webスクレイピング、Webクローリングをする事が可能です。
マクロがインターネットエクスプローラーを自動で操作し、
WEBのデータ取得・登録などの、各種WEB操作します。

具体的には以下が可能です。
・IEから取得したデータをシートに書込。
・エクセルデータを、WEBブラウザに反映。

以下のパーツをコピペでOK

フレームありのページの場合、よく使うIE読込待ち処理だとエラーが出る可能性があります。
VBAでIE操作「IEのフレーム内の値を取得する」【エクセルマクロ】
VBAでIE操作「IEのフレーム内のリンクをクリックする」【エクセルマクロ】

VBAでのIE操作はページ遷移後、必ずページ読み込み待ちの処理が必要です。
フレームがある場合は、親ページだけでなく、子ページ(フレーム側)の読み込み処理も考えないといけません。

'■Internet Explorerの読込待ち処理(フレームがある場合)
Public Function Call_IE_WaitTimeFrame()
  ’■objIEがBusy(処理中なら)DoEventsで待機
    Do While objIE.Busy = True
        DoEvents
    Loop
  ’■objIEがREADYSTATE_COMPLETE(全データ読込完了になるまで)DoEventsで待機 
    Do While objIE.readyState <> READYSTATE_COMPLETE
        DoEvents
    Loop
  ’■Frameも含めた全ての要素がcompleteになるまで待機
    Do While objIE.document.readyState <> "complete"
        DoEvents
    Loop
  ’■操作が安定しない場合は、下記の待機処理も入れましょう。
    Application.Wait [Now() + "00:00:02"]
End Function

 

実際に使用する時は以下のような形で使用してください。

Sub test()
    Call Call_IE_WaitTimeFrame
End Sub
■注意
IEを操作するオブジェクトは「objIE」である必要があります。
引数を渡して処理をすることも可能ですが、VBAでWebを操作する際は一つのオブジェクトだけだと思いますので、引数なしでパーツ化しております。

注意点

今までは定数で読み込み完了を判断していましたが、今回は "complete" と文字列で返却されます。
= Do While objIE.document.readyState <> READYSTATE_COMPLETE とすると動作しません。

その他

Internet Explorerを使用して、Webスクレイピングは敷居が高い風に捉えられますが、
上記のように、パーツ化して組み合わせ処理するだけです。

Web上のデータを触りたい要望は会社様でも個人様でも多いと思います。
VBA IE操作を覚えて効率化しませんか?
作成が大変であれば弊社で代行開発も可能です。お気軽にお問い合わせください。

 

コメント

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