作業効率化@情報商材 -2ページ目

エクセル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に出てきて貰う必要は無いのですが

どうしたものかな。