3

Excel で VBA を使用して、このサイトからデータを取得しようとしています。私がやろうとしたこととうまくいったことは、次のような InternetExplorer オブジェクトを使用することでした:

Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False
IE.Navigate "http://zertifikate.finanztreff.de"
IE.document.getElementById("USFsecuritySearchDropDown").Value = "DE000BP5TBQ2"
IE.document.getElementById("USFsecuritySearchDropDownForm").submit

Do While IE.Busy Or IE.readyState <> 4  'wait until page is loaded
    Application.Wait DateAdd("s", 1, Now)
Loop
MsgBox IE.document.getElementById("BP5TBQ~30~5").innerHTML

ただし、これは非常に遅く機能し、常に正しい結果が得られるとは限りませんでした。ウェブページがロードされるまで待たないことがあったと思います。答えを探してみたところ、stackoverflow でこの答えを見つけました。現在、MSXML2 と MSHTML を使用してマクロを書き直す方法を見つけようとしています。これまでのところ、私はこれを行うことができました:

Dim IE As MSXML2.XMLHTTP60
Set IE = New MSXML2.XMLHTTP60

IE.Open "GET", "http://zertifikate.finanztreff.de", False
IE.send
While IE.ReadyState <> 4
    DoEvents
Wend

Dim HTMLDoc As MSHTML.HTMLDocument
Dim htmlBody As MSHTML.htmlBody

Set HTMLDoc = New MSHTML.HTMLDocument
Set htmlBody = HTMLDoc.body
htmlBody.innerHTML = IE.responseText
HTMLDoc.getElementById("USFsecuritySearchDropDown").Value = "DE000BP5TBQ2"

HTMLDoc には getElementById メソッドがあり、htmlBody にはメソッドがないのはなぜですか? フォーム「USFsecuritySearchDropDownForm」を送信するにはどうすればよいですか。私はこれを試しました:

 HTMLDoc.getElementById("USFsecuritySearchDropDownForm").submit

、しかし、デフォルトのブラウザで常に新しいウィンドウを開くので、非表示にしたいと思います。XMLHTTP60 と MSHTML.HTMLDocument の違いがないように思えます。私を助けてくれるか、少なくともこの情報をどこで見つけられるかを教えていただければ、本当に感謝しています...

4

1 に答える 1