VBA getelementsbytagname问题

时间:2016-12-01 09:46:19

标签: excel vba

早上好,

我试图提取HTML表信息并整理en excel电子表格中的结果。

我使用getelementsbytagname("table")(0)函数提取HTML表格信息,效果很好。有人可以告诉我桌子后(0)有什么意义吗?

另外,我有一个实例,其中打开的网页没有任何要处理的表信息(在页面打开之前我不知道这一点),这导致我的代码出错,因为我尝试初始化我的数据数组到表的维度。有没有办法从getelementsbytagname("table")(0)中提取结果,我尝试过: -

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

但这会返回运行时错误。 非常感谢您的帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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