VBA中不存在的HTML标记是否有If…Then循环

VBA中不存在的HTML标记是否有If…Then循环,vba,excel,Vba,Excel,我有一个名单,我想谷歌生日。这个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 obj

我有一个名单,我想谷歌生日。这个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
子搜索器()
Dim objIE作为InternetExplorer
作为HTMLDocument的Dim doc
Dim y作为整数
作为整数的Dim x
将结果变暗为字符串
Set objIE=新的InternetExplorer
y=2
对于x=2到3000
objIE.Visible=True
objIE.navigate“https://www.google.com/search?q=&Sheets(“Sheet4”).范围(“A”和“y”).值和“+”&Sheets(“Sheet4”).范围(“B”和“y”).值和“+Born”
Do While objIE.Busy=True或objIE.readyState 4:DoEvents:Loop
Set doc=objIE.document
结果=doc.getElementsByClassName(“XWk”)(0)。innerText
表(“表4”)。范围(“C”和y)。值=结果
y=y+1
下一个
objIE,退出
端接头
如果站点没有具有该类名的元素,它将超时并给出错误。我想知道如果网站没有类名,我是否可以使用某种if/Then,并让它跳到下一次搜索。任何想法都会有帮助。非常感谢

像这样的

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

错误必须发生在此处,可能是“424对象、变量或未设置块”错误

原因是,如果
doc.getElementsByClassName(“\uxwk”)
不存在,则链式表达式的该部分计算结果为
Nothing
。因此,你最终会:

result = Nothing(0).innerText
它失败了,因为您不能为
无任何内容编制索引,也不能
。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.

谢谢你们的反馈。非常感谢。我开始运行脚本,到目前为止,它就像一个魅力。大卫,这就是我遇到的错误。谢谢你的提醒。我很感激你的理解。喝彩。克里斯确实认为标记答案是“被接受的”,如果它解决了你的问题:)我试过了,它是有意义的,它可以工作,但它没有。我甚至把y=y+1行移到了else块中,我把它拿回来,我用了你的理论,在If元素的末尾加了(0),现在它就像一个charm@Chris好的,这也是有道理的。
doc.getElementsByClassName(“\u XWk”)
可能会返回类似于空集合的内容,而不是
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.