VBAでWebサイトを操作する場合、一般的には「InternetExplorer(以下「IE」と省略)」で操作する方法を紹介している参考書がほとんどです。
プログラム作成が主目的ではないので、ここからの説明もIEを利用して『国税庁確定申告書等作成コーナー』を操作していきます。
VBAでIEを操作する場合、事前設定しなければいけないことがあります。
Sub 作成コーナー1()
Dim objIE As Object Dim htmlDoc As HTMLDocument Set objIE = New InternetExplorerMedium objIE.Navigate "https://www.keisan.nta.go.jp/kyoutu/ky/sm/top_web#bsctrl" Set htmlDoc = objIE.document Set htmlDoc = Nothing Set objIE = Nothing End Sub |
【説明】 上記のコードの説明(イメージ)
|
(後で、シート上にボタンを作成して該当するブログラムを割り当てる方法を紹介するつもりです)。
「Sub/ユーザーフォームの実行」(以下「実行ボタン」)ボタンをクリック
とりあえず実行してみると!
案の定・・・エラー
エラーを解明できない(デバッグ方法がわからない)ために挫折する方が多いです。
・・・検索エンジンで調べてみること!
Googleで「Documentメソッドは失敗しました iwebbrowser2」と検索して見ると・・・
・・・
今回の場合は、エラーが表示された後にコードを修正することなく「実行」してみると正常に終了してしまう。
[結論]「ページを最後まで読み込むタイミング」と「ページのソースを取得するタイミング」が逆転しているためにエラーとなっていると考えられる。
Sub 作成コーナー1()
Dim objIE As Object Dim htmlDoc As HTMLDocument Set objIE = New InternetExplorerMedium objIE.Navigate "https://www.keisan.nta.go.jp/kyoutu/ky/sm/top_web#bsctrl" cnt = 0 Do While (objIE.Busy = True Or objIE.readyState < 3) DoEvents cnt = cnt + 1 If cnt > 100000 Then Exit Do Loop Set htmlDoc = objIE.document Set htmlDoc = Nothing Set objIE = Nothing End Sub |
再度「実行」してみると・・・今度はエラーは表示されませんでした。
なにごともなく・・・?
VBAでどのように値を取得しているのかがわからないので、次のコードを追加
・・・ Set htmlDoc = objIE.document Debug.Print htmlDoc.Title ・・・ |