IWebBrowser2のDocumentCompleteイベントが捕捉できなかったのは、どうもアパートメントのせいだったらしい。
イベントが発生するのは別スレッドなのかなーと思っていたので、CoInitializeEx()でマルチスレッドを指定できるというから試しにMTAを指定してみたら、見事にビンゴ!
しかし他の関数を実行してみたら、STAで動いていたのにMTAでエラーになるものを発見。手放しでMTAにすればいいってもんでもないようだ…。
つーわけでJava版にもMTAを指定できるようなメソッドを加えてはみたものの、イベントの捕捉は実装していないし、使い道は無いかなー。
検索でここがひっかかったので。
EXCELマクロを組んでいる時に、webbrowser1のDocumentCompleteイベントが幾度も発生してしまうページ(たとえばアマゾン)があります。
下記のように組んだのですが、アマゾンで商品ページを開くとDCCountが8とかになる場合があります。
大抵のページでは1になります。(というかそれを期待しているわけで。DCCount絡みのコードはデバグのために追加したものです。)
とても困ったんですが、結局APIを使う方が正解という事で無視する予定です。
単なる愚痴でした。すみません。
Dim flag As Integer
Dim DCCount As Integer
Private Sub wopen(WB As WebBrowser, url As String)
flag = True
DCCount = 0
WB.Navigate url
Do While flag
DoEvents
Loop
End Sub
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, url As Variant)
flag = False
DCCount = DCCount + 1
End Sub