VBA上的语法错误问题

时间:2017-04-30 09:37:16

标签: vba excel-vba excel

我正在尝试使用来自网站的VBA提取一些值

以下代码包含我要查找的数据数组。这非常有效,并为我提供了我正在寻找的数据数组。

document.getElementsByClassName("list-flights")(0).querySelectorAll("[class$='price']")

以上结果是

<NodeList length="23">...</NodeList>

但是当我尝试通过使用以下代码在VBA中运行循环来提取值时

lnth = document.getElementsByClassName("list-flights")(0).querySelectorAll("[class$='price']").Length - 1

For x = 0 To lnth

    firstResult = document.getElementsByClassName("list-flights")(0).querySelectorAll("[class$='price']")(x).innerText

Next x

代码会在firstResult上出错,因为它不会获得任何值。我检查过Internet Explorer没有价值,如果我使用&#34;(&#34;括号,但是如果我使用&#34; [&#34;在Internet Explorer上它可以工作,但VBA不接受&#34; [&#34; Brackets。

document.getElementsByClassName("list-flights")(0).querySelectorAll("[class$='price']")[0] 

上述代码适用于Internet Explorer控制台,但无法在VBA中使用。

我相信如果你能就这方面的解决方法提出建议,我会遗漏一些会有很大帮助。

enter image description here

1 个答案:

答案 0 :(得分:3)

要获取innerText,您可以多次使用getElementsByClassName 2次,其中一次在for each .. next循环中,因为您的值在list-flights -> price -> cash js_linkInsideCell中:

Set priceData = IE.document.getElementsByClassName("list-flights")(0).getElementsByClassName("price")

For Each Item In priceData
    Debug.Print Item.getElementsByClassName("cash js_linkInsideCell")(0).innerHTML
Next Item

使用.querySelectorAll("[class$='price']")也可以,但解析后会崩溃IE对象。试试看它是否崩溃:

Set priceData = IE.document.getElementsByClassName("list-flights")(0).querySelectorAll("[class$='price']")

For Each Item In priceData
    Debug.Print Item.getElementsByClassName("cash js_linkInsideCell")(0).innerHTML
Next Item

一些快速说明:

1 - 您可以使用此代码等待IE对象加载url:

Do While IE.Busy
    DoEvents
Loop

2 - 有时,即使IE对象准备就绪,查询结果也不会快速返回。这意味着您要查找的元素尚未准备好并且不存在,因此您收到错误消息:

  

运行时错误&#39; 91&#39;:对象变量或未设置块变量

为避免此消息,我的解决方法如下:

Do
On Error Resume Next
Set priceData = IE.document.getElementsByClassName("list-flights")(0).getElementsByClassName("price")
Loop Until Err.Number <> 91

我希望这会有所帮助。