ブラウザコントロール

今まではIEをCreateObjectして使っていたんだけれども、WebBrowserコントロールを使うように変えてみました。なんとなくこっちの方が速いんじゃないかという期待を込めて。
で移植に当たって一つ引っかかったのが、navigateしてからページ読み込み完了を待つためにbusy状態をチェックするわけだけど、ここがbusyにならないという症状。

    UserForm1.WebBrowser1.navigate "http://www.hogehoge.com"
    Do While (UserForm1.WebBrowser1.Busy = True Or UserForm1.WebBrowser1.ReadyState <> 4)
        DoEvents
    Loop

これだとwhileをすぐ抜けてしまうので次のようにする。

    UserForm1.WebBrowser1.navigate "http://www.hogehoge.com"
    DoEvents
    Do While (UserForm1.WebBrowser1.Busy = True Or UserForm1.WebBrowser1.ReadyState <> 4)
        DoEvents
    Loop

これでOK。たぶんnavigateの指示がブラウザコントロールのスレッドで処理されるまではステータスが更新されないから、みたいな都合があるんだろうと思うけど、わかりにくいよなあ。

あーでもDocumentCompleteイベントを使えばいいじゃないかって言われそうだな。確かに。そうかも。