Home » エクセルマクロ・Excel VBAの使い方 » MSHTML.HTMLDocumentを使ってHTMLファイルのソースを取得するExcelマクロ

MSHTML.HTMLDocumentを使ってHTMLファイルのソースを取得するExcelマクロ

ローカルに保存したHTMLファイルのソースから、Excel VBAでデータを抜き出したいと考えテストしてみました。

難点があるのですが、ご紹介しておきます。

[スポンサードリンク]

MSHTML.HTMLDocumentを使ってHTMLファイルのソースを取得するサンプルマクロ

Microsoft HTML Objet Libraryへの参照設定を行い、

Cドライブのtempフォルダーにsample.htmlを用意しておいてから以下のExcelマクロを実行すると、(一応)イミディエイトウィンドウにソースコードの内容が出力されます。

ただし、処理が終わるまで、かなり待つ場合があるのが難点です。

Sub ローカルのHTMLファイルのソースをイミディエイトウィンドウに出力する()
 Dim html As MSHTML.HTMLDocument
 Set html = New MSHTML.HTMLDocument
 
 Dim doc As MSHTML.IHTMLDocument2
 Set doc = html.createDocumentFromUrl("file:///C:\temp\sample.html", "")
 
 Do Until doc.readyState = "complete"
  DoEvents
  Debug.Print "実行中"
 Loop
 
 Debug.Print doc.body.innerHTML
 
 Set doc = Nothing
 Set html = Nothing
End Sub

サンプルマクロで行っている処理

MSHTML.HTMLDocumentオブジェクトへの参照を取得してから、

 Dim html As MSHTML.HTMLDocument
 Set html = New HTMLDocument

MSHTML.HTMLDocument.createDocumentFromUrlメソッドで、

ローカルに保存したHTMLファイルを表す、MSHTML.IHTMLDocument2オブジェクトを取得しています。

 Dim doc As MSHTML.IHTMLDocument2
 Set doc = html.createDocumentFromUrl("file:///C:\temp\sample.html", "")

その後、HTML.IHTMLDocument2.readyStateプロパティが、

文字列「complete」を返すまで処理を待機します。

 Do Until doc.readyState = "complete"
  DoEvents
  Debug.Print "実行中"
 Loop

この部分の処理が、何故か時間がかかってしまうので、イミディエイトウィンドウに「実行中」と文字列を出力し続けています。

TML.IHTMLDocument2.readyStateプロパティが「complete」を返してきたら、MSHTML.IHTMLElement.innerHTMLプロパティが返す文字列を

イミディエイトウィンドウに出力しています。

 Debug.Print doc.body.innerHTML

最終更新日時:2024-11-20 04:46

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » MSHTML.HTMLDocumentを使ってHTMLファイルのソースを取得するExcelマクロ

「エクセルマクロ・Excel VBAの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.