[英]Syntax Error Issue on VBA
我试图从网站使用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没有值,如果我使用“(”括号,但是如果我在Internet Explorer上使用“[”它可以工作,但VBA不接受“[”括号。
document.getElementsByClassName("list-flights")(0).querySelectorAll("[class$='price']")[0]
上面的代码适用于Internet Explorer控制台,但无法在VBA中使用。
我相信如果你可以建议解决方法是什么,我会遗漏一些会有很大帮助。
要获取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对象准备就绪,查询结果也不会快速返回。 这意味着您要查找的元素尚未准备好并且不存在,因此您收到错误消息:
运行时错误'91':对象变量或未设置块变量
为避免此消息,我的解决方法如下:
Do
On Error Resume Next
Set priceData = IE.document.getElementsByClassName("list-flights")(0).getElementsByClassName("price")
Loop Until Err.Number <> 91
我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.