私はmorningstarのウェブサイトで資金量を更新しようとしています。私の以前のIE自動化の試みは機能しませんでしたので、XML httpRequestに切り替えました。今私は、私がウェブサイトから入手した文書から正しい行を印刷することに困難を抱えています。私はコードが私に "tr"タグの中に3番目の "td"タグを与えることを望みます。これは "td"タグが "Fund Size(Mil)"と呼ばれています。だから、コードはすべての "td"タグの見出しをループし、その結果が"{line heading}" = "Fund Size (Mil)"
であればアクションにジャンプします。今これが問題です。私はこれらの見出しを参照する方法を知らない。VBAのHTML解析
"td"タグを変数に設定しようとしました( "tr"タグに3つの "td"タグがあるので、変数 "row1"、row2、row3 "td-tag" )が、私は今これを行うにしようとすると、私は実行時エラー438を取得:さらに、I Debug.Print TDElement.innerHTML
、私は見ていないときにオブジェクトが行にこのプロパティまたはメソッドをサポートしていません
Debug.Print TDElements.getElementsByTagName("tr")(0).Cells(0).innerHTML
を私が必要とする「td」タグ。代わりに.innerText
を代わりに入力すると、すべての「td」タグが表示されます。
今質問は次のとおりです。 1)見出しを直接参照するにはどうすればよいですか? (For Each
ループ内のコメント行を参照してください) 2).innerHTMLですべてのtdタグが表示されない理由は何でしょうか。
のURL http://www.morningstar.co.uk/uk/funds/snapshot/snapshot.aspx?id=F0GBR04BKW エクセル2010、IEのバージョン11
Sub XMLhttpRequestTest2()
'Microsoft XML, v 6.0
'Microsoft HTML object library, used in parsing HTML
Dim myurl As String
Dim TDElement As Object
Dim TDElements As IHTMLElementCollection
Dim IE As MSXML2.XMLHTTP60
Dim HTMLDoc As MSHTML.HTMLDocument
Dim HTMLBody As MSHTML.HTMLBody
Set IE = New MSXML2.XMLHTTP60
Set HTMLDoc = New MSHTML.HTMLDocument
Set HTMLBody = HTMLDoc.body
myurl = "http://www.morningstar.co.uk/uk/funds/snapshot/snapshot.aspx?id=F0GBR04BKW"
IE.Open "GET", myurl, False
IE.send
HTMLBody.innerHTML = IE.responseText
Set TDElements = HTMLDoc.getElementsByTagName("td")
For Each TDElement In TDElements
Debug.Print TDElement.innerText '.innerText/.innerHTML. Can't see the fund size with .innerHTML??
' If "{line heading}" = "Fund Size (Mil)" Then 'How can I refer to headings in the html document?
' Worksheets("Sheet3").Range("B3") = Split("{line text}", ";")(1) 'reference to line text?
Next
End Sub
H2SO4の答えは、上記の問題を修正しました。以下は最初の質問への拡張です。
TDElementには、2行のテキストが割り当てられます(h2so4の値10を3に変更しました。したがって、資金化文字列が見つかるとコードに次の3行が表示されます)。これをさらに解析するにはどうすればよいですか?現在の行Worksheets("helper").Cells(x, 6).Value = Split(TDElement.innerText, " ")(1)
は私が必要とする値(769.28)を返しますが、実際にここで何が起こっているのか本当に分かっていれば、将来的に役立ちます。
練習のために、私はどのようにして自分のセルに3行すべてを印刷するのですか?したがって、出力は、ファンドサイズ(Mil)、31/08/2017、セル(x、6)、(x、7)、(x、8)の769.28となります。関数 "Split"または "Left"をTDElementに使用すると、関数は上の他の行ではなく最後の行のみを対象とします。しかし、私がDebug.Print TDElement.innerText
/.innerHTML
となると、私は他の行も見ています。では、最後の行の上にある行にはどうすればアクセスできますか? Debug.Print TDElement.innerText
の
出力:
基金サイズ(ミル)
31/08/2017
EUR 769.28
ありがとうございました!これは機能します。新しい整数変数nを宣言してコードを修正し、10の代わりに3に設定しました(必要な行のみを対象としています)。しかし、私はコードが返す最後の行だけを解析できる理由を知りたいと思います。上記の最初の質問**の拡張子をご覧ください。 – Samppa