2016-12-01 97 views
2

早上好,VBA getelementsbytagname問題

我試圖提取HTML表格信息並在en excel電子表格中比較結果。

我使用getelementsbytagname("table")(0)函數來提取HTML表格信息,它運行良好。有人可以告訴我表後面的(0)有什麼意義?

此外,我有一個實例,一個打開的網頁沒有任何表信息處理(我不知道這個,直到頁面打開),這導致我的代碼中的錯誤,因爲我嘗試初始化我的數據數組到表格的尺寸。是否有提取getelementsbytagname("table")(0)結果的一種方式,我已經試過: -

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

但這返回一個運行時錯誤。 非常感謝您的幫助。

回答

0

在VBA中,附加的(0)引用數組的第一個元素(假設爲Option Base 0)。下面是一個簡單的例子:

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

上述代碼應返回element 2作爲基於零陣列的第二元件。

因此,getelementsbytagname("table")(0)引用該表的第一個元素。然而,如果沒有找到「表」,那麼沒有數組可以從該表中獲取,並從該數組中獲取第一個元素(通過追加(0))會產生錯誤。

相反,你應該測試,如果確實有一個表通過該名稱(試圖訪問的元素是表中的前陣),像這樣:

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

非常感謝您的回覆拉爾夫,非常感謝。 我曾試過'if(iDom.getelementsbytagname(「table」)= 0)的變體然後'但我得到相同的運行時錯誤。在我知道沒有表格時,在iDom.getelementsbytagname(「table」)(0)中加入了一個監視表後,我看到返回類型是Variant/Object,所以我可以通過測試'If ifDo.getelementsbytagname (「表」)(0)沒有那麼',這似乎工作。 再次感謝 – GLW75

1

首先要Microsoft Internet Controls (SHDocVw)Microsoft HTML Object Library添加引用:

enter image description here

然後Object Explorer是你的朋友:

enter image description here

所以getElementsByTagName返回IHTMLElementCollection它有財產length。當在頁面上找到一些具有特定標籤名稱的元素時,則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

輝煌,謝謝迪。當我在doc.getElementsByTagName(「table」)上放置手錶時,我可以看到IHTMLElementCollection,但我不確定如何訪問這些元素。 再次非常感謝,我們將在哪裏沒有夢幻般的資源和夢幻般的人像你自己! – GLW75

+0

不客氣! :) – dee