2016-12-01 10 views
2

おはよう、VBA getelementsbytagname問題

私はHTML表情報を抽出し、結果をExcelシートで照合しようとしています。

私はgetelementsbytagname("table")(0)関数を使用して、うまくいきなりHTMLテーブル情報を抽出しています。誰かがテーブルの後に(0)の意義を教えていただけますか?

また、開かれたWebページに処理するテーブル情報がない(私はページが開かれるまでこれを知らない)というインスタンスがあります。これは私のコードを初期化しようとするとエラーになりますデータ配列をテーブルの次元に変換します。 getelementsbytagname("table")(0)から結果を抽出する方法はあります、私が試してみた: -

If (iDom.getelementsbytagname("table")(0) = 0) Then 

が、これは、実行時エラーを返します。 ご協力いただきありがとうございます。

答えて

0

VBAでは、(0)は、配列の最初の要素を指します(Option Base 0と仮定します)。上記のコードは、ゼロベースの配列の第二の要素としてelement 2を返すべき

vArr = Array("element 1", "element 2", "element 3") 
Debug.Print v(1) 

:ここで簡単な例です。

したがって、getelementsbytagname("table")(0)は、そのテーブルの最初の要素を指します。それでも "テーブル"が見つからない場合は、そのテーブルから取得する配列がなく、配列の最初の要素を((0)を付加して)取得するとエラーになります。

If (iDom.getelementsbytagname("table") = 0) Then 
+0

あなたのお返事ありがとうございます。 私は 'if(iDom.getelementsbytagname( "table")= 0)のバリエーションを試していましたが、'しかし、同じランタイムエラーが発生しました。 iDom.getelementsbytagname( "table")(0)にウォッチを入れた後、テーブルがないことがわかったときに、戻り値の型がVariant/Objectであることがわかりましたので、If 'iDom.getelementsbytagname ( "table")(0)Is Nothing Then、これはうまくいくようです。 ありがとうございました – GLW75

1

まずMicrosoft Internet Controls (SHDocVw)にしてMicrosoft HTML Object Libraryへの参照を追加します:代わりに、テーブルは(そのテーブル内の要素の配列にアクセスしようとする前に)、その名前によって実際にそこにある場合は、そのようにテストする必要があり

enter image description here

その後Object Explorerはあなたの友達です:

enter image description here

したがってgetElementsByTagNameは、lengthというプロパティを持つIHTMLElementCollectionを返します。ページ上に特定のタグ名を持つ要素が見つかると、lengthはゼロより大きくなります。 HTH

Dim tables As IHTMLElementCollection 
Set tables = doc.getElementsByTagName("table") 
If tables.Length > 0 Then 
    Dim table As HTMLTable 
    Set table = tables.item(0) 
    ' Because item is the default property of IHTMLElementCollection we can simplyfy 
    Set table = tables(0) ' this is the same as tables.item(0) 
End If 
+0

Brilliant、thanks dee。私がdoc.getElementsByTagName( "table")に時計を置いたとき、IHTMLElementCollectionが見えましたが、要素へのアクセス方法がわかりませんでした。 もう一度お世話になりました。素晴らしいリソースやあなたのお誕生日のような素晴らしい人たちがいなければ、 – GLW75

+0

あなたは大歓迎です! :) – dee