运行时错误424所需的对象

我得到运行时错误91对象或块variables未设置为下面的行说< – 错误在这里!

Set html = CreateObject("htmlfile") html.body.innerHTML = XMLHTTP.ResponseText Set objResultDiv = html.getElementById("rhs_block")(0) ' <- Error Here!! Set objH3 = objResultDiv.getElementsByTagName("div")(7).getElementsByTagName("a")(2).getElementsByTagName("span")(0).innerHTML Cells(i, 2) = objH3 

我在Stackoverflowsearch,但还没有find答案。

完整的VBA代码:

 Sub XMLHTTP() Dim url As String, lastRow As Long Dim XMLHTTP As Object, html As Object, objResultDiv As Object, objH3 As Object Dim start_time As Date Dim end_time As Date lastRow = Range("A" & Rows.Count).End(xlUp).Row Dim cookie As String Dim result_cookie As String start_time = Time Debug.Print "start_time:" & start_time For i = 2 To lastRow url = "https://www.google.co.in/search?q=" & Cells(i, 1) & "&rnd=" & WorksheetFunction.RandBetween(1, 10000) Set XMLHTTP = CreateObject("MSXML2.serverXMLHTTP") XMLHTTP.Open "GET", url, False XMLHTTP.setRequestHeader "Content-Type", "text/xml" XMLHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0" XMLHTTP.send Set html = CreateObject("htmlfile") html.body.innerHTML = XMLHTTP.ResponseText Set objResultDiv = html.getElementById("rhs_block")(0) Set objH3 = objResultDiv.getElementsByTagName("div")(7).getElementsByTagName("a")(2).getElementsByTagName("span")(0).innerHTML Cells(i, 2) = objH3 DoEvents Next end_time = Time Debug.Print "end_time:" & end_time Debug.Print "done" & "Time taken : " & DateDiff("n", start_time, end_time) MsgBox "done" & "Time taken : " & DateDiff("n", start_time, end_time) End Sub 

在这里输入图像描述

html页面上的元素ID是唯一的(否则它不会是“标识符”)。 所以一个ID只能附加到一个元素上。 但是,浏览器不会检查这个,在HTML文件中分别忽略这个错误。

无论如何,您的JavaScript函数getElementById()这意味着它将只返回一个单一的元素。 你需要改变:

 Set objResultDiv = html.getElementById("rhs_block")(0) 

 Set objResultDiv = html.getElementById("rhs_block") 

那么你的objResultDiv不应该抛出运行时错误91。

顺便说一句,有JavaScript函数返回一组元素。 像getElementsByTagName("p") (返回带有段落标签的所有元素)或者getElementsByName("test123") (返回所有name="test123"元素)。

您可以从函数名称中判断是否返回单个或多个元素。 (getElementById与getElement ByName)