いままでVB.NETでWebbrowserのTABLEを参照していたのですが、VB2005に移行して、参照できなくなりました。
Dim objTables As Object
objTables = objIE.Document.getElementsByTagName("TABLE")
MsgBox(objTables(0).rows(0).cells(0).innerText)
この記述でVB.NETはOKでしたが、VB2005ではobjTables(0).rows(0).cells(0).innerTextの参照で例外が発生します。
「公開メンバ 'rows' は型 'HtmlElement' に見つかりませんでした。」
VB2005ではどのような記述になるのでしょうか?
宜しくお願い致します。
Dim objDoc As Object
Dim objTables As Object
Dim objTable As Object
Dim objTBodies As Object
Dim objTBody As Object
Dim objRows As Object
Dim objRow As Object
Dim objCells As Object
Dim objCell As Object
Dim rIdx As Integer
Dim cIdx As Integer
objDoc = objIE.Document
objTables = objDoc.GetElementsByTagName("TABLE")
Debug.WriteLine("Tables Count:" & objTables.count)
For Each objTable In objTables
objTBodies = objTable.tbodies
Debug.WriteLine("TBodies Count:" & objTBodies.count)
For Each objTBody In objTBodies
objRows = objTBody.rows
Debug.WriteLine("Row Count:" & objRows.count)
rIdx = 0
cIdx = 0
For Each objRow In objRows
objCells = objRow.cells
Debug.WriteLine("Cell Count:" & objCells.count)
For Each objCell In objCells
Debug.WriteLine("row( " & rIdx & " ).cell(" & cIdx & "):" & objCell.innerText)
cIdx += 1
Next
rIdx += 1
Next
Next
Next
もう少し、細かくやってみましたが、やっぱりうまくいきません。
上記のコーディングでVB.NETはOKなんですが・・・
今度は、「objTBodies = objTable.tbodies」のところで
「公開メンバ 'tbodies' は型 'HtmlElement' に見つかりませんでした」の例外となります。
> VB2005に移行して、参照できなくなりました。
ActiveXコントロール版 AxWebBrowser の Documentプロパティは、
アンマネージ(COM側)の DOM (IHTMLDocument2) を返しますが、
.NET 2.0 版 WebBrowser コントロールの Documentプロパティは、
マネージ(.NET側)の DOM (HtmlDocument) を返すからでしょう。
> VB2005ではどのような記述になるのでしょうか?
まずは、アンマネージ DOM で使えていた機能が、
マネージ DOM に実装されているのかをチェックしましょう。
その結果、マネージ DOM に実装されていないようであれば、
DomDocument プロパティからアンマネージ DOM を取得して、
それを使うようにしてみてください。
魔界の仮面弁士様、早速のご回答ありがとうございます。
objDoc = objIE.Document.DomDocument
この1行だけでした。
あと、objxxx.countをobjxxx.lengthにしなければなりません。
(VB.NETは.lengthだったのになぁと気になっていましたが・・・)
これで5日間悩んだ問題がこの1行で解決です。
これなら既存のプログラムを大改造なく使えそうです。
ありがとうございました。
本当に感謝いたして降ります(5日間の気持ち・・・)
ツイート | ![]() |