ブラウザコントロール
今までは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イベントを使えばいいじゃないかって言われそうだな。確かに。そうかも。