VBA中不存在的HTML标记是否有If…Then循环
我有一个名单,我想谷歌生日。这个VBA脚本允许我从Google中搜索和提取数据,只要它具有具有该类名的特定元素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
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.