エクセルVBAでMSHTMLを使ってみる
3ヶ月ぶりの更新とは・・・
このブログの本来の目的であるエクセルVBAのはなしをば。
エクセルVBAからブラウザーコントロールを使ってデータを所得すると
まずwebページを開かなければならないため読み込み完了まで時間がかかる。
表形式(テーブル)のデータが欲しいのでエクセルのwebクエリでも可能なのだが
テーブル1つならともかく5つも6つもあるとこれまた時間がかかる。
という時間で悩んでいたのですが、データさえ所得出来れば良いので
画像のDLをして無駄に時間をかける意味は無いし、
そもそもwebページを開く必要は無いので方法を探していました。
方法は2つ見つかりました。MSHTMLを使う方法とMSXMLを使う方法です。
備忘録を兼ねて今回はMSHTMLの方について。
参考にしたのは
http://d.hatena.ne.jp/ken3memo/20090904/1252025888
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsMSHTML.html
です。ほとんど上の方の記事の記述で簡単に作ることが出来ました。
MSHTMLの参照設定が必要です。
Sub test()
Const strURL = "http://www.yahoo.co.jp/"
Dim objWEB As HTMLDocument
Set objWEB = New HTMLDocument
objWEB.designMode = "on"
Dim objDOC As HTMLDocument
Set objDOC = objWEB.createDocumentFromUrl(strURL, vbNullString)
While objDOC.readyState <> "complete"
DoEvents
Wend
Debug.Print objDOC.body.innerHTML
Set objDOC = Nothing
Set objWEB = Nothing
End Sub
こんな感じで読み取れました。
が、問題発生
空のIEが出てきてしまう・・・実行した回数分出てきてしまうのでただの邪魔にしかなってない。
IEを開くくらいなら操作をしやすいフォーム上のwebブラウザを使うのでIEに出てきて貰う必要は無いのですが
どうしたものかな。
このブログの本来の目的であるエクセルVBAのはなしをば。
エクセルVBAからブラウザーコントロールを使ってデータを所得すると
まずwebページを開かなければならないため読み込み完了まで時間がかかる。
表形式(テーブル)のデータが欲しいのでエクセルのwebクエリでも可能なのだが
テーブル1つならともかく5つも6つもあるとこれまた時間がかかる。
という時間で悩んでいたのですが、データさえ所得出来れば良いので
画像のDLをして無駄に時間をかける意味は無いし、
そもそもwebページを開く必要は無いので方法を探していました。
方法は2つ見つかりました。MSHTMLを使う方法とMSXMLを使う方法です。
備忘録を兼ねて今回はMSHTMLの方について。
参考にしたのは
http://d.hatena.ne.jp/ken3memo/20090904/1252025888
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsMSHTML.html
です。ほとんど上の方の記事の記述で簡単に作ることが出来ました。
MSHTMLの参照設定が必要です。
Sub test()
Const strURL = "http://www.yahoo.co.jp/"
Dim objWEB As HTMLDocument
Set objWEB = New HTMLDocument
objWEB.designMode = "on"
Dim objDOC As HTMLDocument
Set objDOC = objWEB.createDocumentFromUrl(strURL, vbNullString)
While objDOC.readyState <> "complete"
DoEvents
Wend
Debug.Print objDOC.body.innerHTML
Set objDOC = Nothing
Set objWEB = Nothing
End Sub
こんな感じで読み取れました。
が、問題発生
空のIEが出てきてしまう・・・実行した回数分出てきてしまうのでただの邪魔にしかなってない。
IEを開くくらいなら操作をしやすいフォーム上のwebブラウザを使うのでIEに出てきて貰う必要は無いのですが
どうしたものかな。