如果元素存在,使用Excel VBA获取web元素,如果不存在则跳过

我在刷新网页方面比较陌生,但是我已经掌握了一些。 我用下面的命令成功地从网页获取数据:

sht.Range("b" & RowCount).Value = .document.getElementById("PriceLabel").getElementsByTagName("span")(3).innerText sht.Range("c" & RowCount).Value = .document.getElementById("QuantityInput").Value 

我的挑战是,不是我search的所有网页都有这些元素,所以脚本停止运行时错误424 – 对象所需。

我已经尝试了一个On Error GoTo命令,但是这只适用于第一个事件,然后停在第二个缺less元素的网页上。

该代码是:

 Next_sku: Do RowCount = RowCount + 1 SKU = sht.Range("a" & RowCount).Value With ie .Visible = False .navigate "http://www.staples.no/search?keywords=" & SKU Do While .Busy Or _ .readyState <> 4 DoEvents Loop sht.Range("b" & RowCount).Value = .document.getElementById("PriceLabel").getElementsByTagName("span")(3).innerText sht.Range("c" & RowCount).Value = .document.getElementById("QuantityInput").Value On Error GoTo Next_sku End With Loop While sht.Range("a" & RowCount + 1).Value <> "" 

任何人都可以帮助我一个代码,将返回一个空白的结果,手动input,如f.eks“不存在”og只要跳过到下一个命令行,如果该元素是不存在的。 最重要的是脚本不停止。

谢谢 :-)

我认为问题是你的代码没有从第一个错误恢复。 您不能在error handling程序中检查错误。 通过添加一个简历语句到您的代码,VBA将不再认为您在error handling程序内,您的代码将恢复正常。

这是一个例子:

 On Error GoTo Next_sku sht.Range("b" & RowCount).Value = .document.getElementById("PriceLabel").getElementsByTagName("span")(3).innerText sht.Range("c" & RowCount).Value = .document.getElementById("QuantityInput").Value Next_sku: 'Do something on error Resume Next 

如果没有findSKU,上面的代码将留下一个空白的结果。 您可以在Next_sku:标签之后添加代码以返回“不存在”。

您也可以尝试使用on error resume next语句。

非常感谢@Hubvillfind答案。

代码On Error Resume Next解决这个问题。 我的代码现在读取如下:

 Do RowCount = RowCount + 1 SKU = sht.Range("a" & RowCount).Value With ie .Visible = False .navigate "http://www.staples.no/search?keywords=" & SKU Do While .Busy Or _ .readyState <> 4 DoEvents Loop sht.Range("b" & RowCount).Value = .document.getElementById("PriceLabel").getElementsByTagName("span")(3).innerText sht.Range("c" & RowCount).Value = .document.getElementById("QuantityInput").Value On Error Resume Next End With Loop While sht.Range("a" & RowCount + 1).Value <> "" 

结果是将该字段留空,并继续在SKU列表中查找并获取数据。

卓越的解决scheme。