在VBA中是否有一个If ... Then循环用于不存在的HTML标记

时间:2017-06-23 14:37:37

标签: excel vba excel-vba

我有一个我想要谷歌生日的名单。此VBA脚本允许我仅在具有该类名称的特定元素时才从Google搜索和提取数据。

Sub Searcher()

Dim objIE As InternetExplorer 
Dim doc As HTMLDocument
Dim y As Integer 
Dim x As Integer
Dim result As String 



Set objIE = New InternetExplorer

y = 2

For x = 2 To 3000

objIE.Visible = True

objIE.navigate "https://www.google.com/search?q=" & Sheets("Sheet4").Range("A" & y).Value & "+" & Sheets("Sheet4").Range("B" & y).Value & "+Born"


Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop

Set doc = objIE.document

result = doc.getElementsByClassName("_XWk")(0).innerText

Sheets("Sheet4").Range("C" & y).Value = result


y = y + 1

Next

objIE.Quit

End Sub

如果网站没有具有该类名的元素,则会超时并出错。我想知道是否有某种If /然后我可以使用如果该网站没有该类名称并让它跳到下一个搜索。任何想法都会有所帮助。非常感谢。

2 个答案:

答案 0 :(得分:0)

这样的东西?

Set resultClasses = html.getElementsByTagName("div") 
For Each resultClass In resultClasses 
    If resultClass.getAttribute("class") = "_XWk" Then 
        Msgbox "Found"
        Exit For 
    End If 
Next resultClass 

答案 1 :(得分:0)

错误必须在这里发生,可能是&#34; 424对象,变量或未设置的块&#34;错误。

result = doc.getElementsByClassName("_XWk")(0).innerText

原因是,因为如果doc.getElementsByClassName("_XWk")不存在,那么链式表达式的部分将计算为Nothing。所以你最终得到:

result = Nothing(0).innerText

哪个失败了,因为您无法为Nothing编制索引而您无法.innerText出错:)

解决方案是避免将可能评估为Nothing的表达式链接起来,并适当地处理错误:

If doc.getElementsByClassName("_XWk") Is Nothing Then
    'Do nothing
Else
    result = doc.getElementsByClassName("_XWk")(0).innerText
    Sheets("Sheet4").Range("C" & y).Value = result
End If
y = y + 1 '## might need to put this up in the Else block, I'm not sure.