VBA開発

VBAでIE操作「ブラウザの読込待ち」処理をパーツ化する【エクセルマクロ】

VBAでIE操作(InternetExplorer操作)

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

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

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

今回はIE操作で必要な、待機処理です。
指定したページへ遷移しても、Webページの読込前に次の処理をすると、エラー発生してしまいます。

VBAでのIE操作はページ遷移後、必ずページ読み込み待ちの処理が必要です。

'■Internet Explorerの読込待ち処理
Public Function Call_IE_WaitTime()
  ’■objIEがBusy(処理中なら)DoEventsで待機
    Do While objIE.Busy = True
        DoEvents
    Loop
  ’■objIEがREADYSTATE_COMPLETE(全データ読込完了になるまで)DoEventsで待機 
    Do While objIE.readyState <> READYSTATE_COMPLETE
        DoEvents
    Loop
End Function

 

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

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

コードの意味

READYSTATE_COMPLETEは定数

定数戻り値説明
READYSTATE_UNINITIALIZED0未完了。デフォルト値。
READYSTATE_LOADING1ロード中。
READYSTATE_LOADED2ロード完了。ただし操作不可能状態。
READYSTATE_INTERACTIVE3IE操作可能。
READYSTATE_COMPLETE4全データ読込完了。

DoEvents

マクロはループ状態の際、OS(Windows)にも処理をさせず、ループ処理を続けます。
DoEventsがないと、Internet Explorerが処理読み込むまでフリーズしたように見えるため、
一度DoEventsでOS側に処理を渡します。

 

 

その他

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

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

 

コメント

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