人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VBAでのHTMLDocument

VBAでHTMLの解析をしたいと思っています。
ですが解析対象のページに行くまでログイン処理だったりと辿り着くのが面倒です。

ですからHTMLをコピペして対処しようと思っております。

URL先のHTMLを読み込むのは
Dim doc As HTMLDocument
Set doc = oHTML.createDocumentFromUrl(url, vbNullString)
で出来ましたが、

doc = "<html>...</html>"
のようにString型を代入するにはどうしたらよいのでしょうか。

よろしくお願いします。




●質問者: after_333sec
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● きゃづみぃ
●10ポイント

http://mt-soft.sakura.ne.jp/web_dl/vb-parts/get_http2/

こちらを参考にしてみてください。


after_333secさんのコメント
URL先のHTMLを読み込むだけですね。 そうではなくString型を代入したいのです。 やりたいことはフォームにHTMLを入力し、それを処理させることなので、これを実現するための方法を教えてください。

きゃづみぃさんのコメント
まず Set doc = oHTML.createDocumentFromUrl(url, vbNullString) とやったときに 読み込みが完了するまで待つ必要があります。 読み込めれば Doc.body.innerHTML に HTMLが 入っているはずです。 それは Stringですよ。 それらが 回答内のURLのホームページにかかれてますけど、違うことが知りたいのでしょうか?

2 ● a-kuma3
●0ポイント

MSHTML は、参照設定してある、ってことですよね。
こんな感じで、できるんじゃないかな、と。

Dim doc As HTMLDocument
Set doc = New HTMLDocument
doc.write "<html>...</html>"

3 ● taroe
●10ポイント

Dim doc As HTMLDocument
Set doc = oHTML.createDocumentFromUrl(url, vbNullString)

String htmlString = doc.getElementsByTagName("html");

これで、HTMLタグで囲まれている部分が文字列として取得できます。


4 ● TransFreeBSD
●30ポイント

doc.write使えなかった。.NetだとOpenNewが必要だとあるけれど、vbaにはOpenNewない。でもそれが原因かはわからない。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.htmldocument.write.aspx
innerHtmlに書けばいいかなと思ったけど、html要素、head要素共に書くとエラーになる。
なのでBodyに書いてみた。htmlタグとかheadタグあっても無視されるけれどbody内はちゃんと反映される。
もし、head要素も反映させたいという場合はファイルに書いてそれを読ませるという手がある。

Option Explicit

Sub Macro1()
 Dim doc As HTMLDocument
 Set doc = New HTMLDocument
  'doc.write "<html><head><title>test</title></head><body><p>test</p></body></html>"
  'MsgBox doc.FirstChild.FirstChild.outerHTML
  'doc.FirstChild.FirstChild.innerHTML = "<title>test</title>"
  'doc.FirstChild.FirstChild.innerHTML = ""
 doc.Body.innerHTML = "<html><head><title>test</title></head><body><p>test</p></body></html>"
 MsgBox doc.FirstChild.outerHTML
End Sub

Sub Macro2()
 Open "D:\example\q1326289490\tmp.html" For Output As #1
 Print #1, "<html><head><title>test</title></head><body><p>test</p></body></html>"
 Close #1
 Dim doc As HTMLDocument
 Dim doc2 As HTMLDocument
 Set doc = New HTMLDocument
 Set doc2 = doc.createDocumentFromUrl("file:///d:/example/q1326289490/tmp.html", vbNullString)
 DoEvents
 MsgBox doc2.FirstChild.outerHTML
End Sub

5 ● a-kuma3
●50ポイント ベストアンサー

by TransFreeBSD
doc.write使えなかった。.NetだとOpenNewが必要だとあるけれど、vbaにはOpenNewない。でもそれが原因かはわからない。

たしかに、「コンパイルエラー関数またはインターフェイスが予約されているか、またはVisual Basicでサポートされていないオートメーションタイプが関数で使用されています」というエラーが出てしまうようです。

こんな感じで動作するようになりました。

Sub Macro1()

 Dim doc As Object
 Set doc = CreateObject("htmlfile")
 doc.write ("<html><head><title>test</title></head><body><p>test</p></body></html>")

  ' 確認っ!
 MsgBox doc.FirstChild.outerHTML

End Sub

MSHTML への参照設定も必要なさそうです。


こんなんでもイケました。

 Dim doc As Object
 Set doc = New HTMLDocument
 doc.write "<html><head><title>test</title></head><body><p>test</p></body></html>"

こっちは、MSHTML への参照設定が必要です。


【追記】
型を Object にすると動くので、As HTMLDocument がマズいんだろうなあ、と試行錯誤。

Sub Macro1()

 Dim doc As IHTMLDocument  '※ これっ!
 Set doc = New HTMLDocument
 doc.write "<html><head><title>test</title></head><body><p>test</p></body></html>"

  ' 確認っ!
 MsgBox doc.FirstChild.outerHTML

End Sub

http://msdn.microsoft.com/en-us/library/aa752574%28v=VS.85%29.aspx
write メソッドを規定しているのは、IHTMLDocument2 インターフェースにもかかわらず、
型を IHTMLDocument2 にしても駄目で、IHTMLDocument にすると動くという不思議。

オブジェクトブラウザで確認しても、write を持っているのは、HTMLDocument だったり、IHTMLDocument2 だったりするのだけれど。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ