VBA getelementsbytagname问题

早上好,

我正在尝试提取HTML表格信息并在en excel电子表格中对结果进行比较。

我使用getelementsbytagname("table")(0)函数来提取HTML表格信息,它运行良好。 有人可以告诉我表后(0)的意义是什么?

此外,我有一个实例,一个打开的网页没有任何表信息处理(我不知道这个,直到页面被打开),这导致了我的代码中的错误,因为我尝试初始化我的数据数组到表格尺寸。 有没有办法从getelementsbytagname("table")(0)中提取结果,我试过了: –

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

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

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

在这里输入图像说明

那么Object Explorer是你的朋友:

在这里输入图像说明

所以getElementsByTagName返回具有属性length IHTMLElementCollection 。 在页面上find一些具有特定标签名称的元素,然后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 

在VBA中,附加的(0)是指数组的第一个元素(假设一个Option Base 0 )。 这里是一个简短的例子:

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

上面的代码应该返回element 2作为基于零的数组的第二个元素。

因此, getelementsbytagname("table")(0)引用该表的第一个元素。 然而,如果没有find“表”,那么没有数组可以从该表中获取,并从数组中获取第一个元素(通过附加(0) )会产生一个错误。

相反,你应该testing一下,如果实际上有一个表名(在尝试访问该表中的元素数组之前),如下所示:

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