【问题标题】:VBA Run-time Error '91' Object-variable or With block variable not setVBA 运行时错误“91”对象变量或未设置块变量
【发布时间】:2016-04-28 14:28:57
【问题描述】:

我有大约 12,000 行数据需要网站来处理。此 VBA 代码运行良好约 800,然后停止。由于这个错误,现在我无法让它再次运行。我不知道如何让它再次运行。

运行时错误“91”对象变量或未设置块变量

Sub XMLHTTP()

    Dim url As String, lastRow As Long
    Dim XMLHTTP As Object, html As Object, objResultDiv As Object, objH3 As Object, link 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("rso")
        Set objH3 = objResultDiv.getelementsbytagname("H3")(0)
        Set link = objH3.getelementsbytagname("a")(0)


        str_text = Replace(link.innerHTML, "<EM>", "")
        str_text = Replace(str_text, "</EM>", "")

        Cells(i, 2) = str_text
        Cells(i, 3) = link.href
        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

【问题讨论】:

  • url = "https://www.google.co.in/search?q=" &amp; Cells(i, 1) &amp; "&amp;rnd=" &amp; WorksheetFunction.RandBetween(1, 10000)你在破解网站吗?
  • 我不确定你所说的“破解网站”是什么意思我应该提到我从这个页面找到了这段代码:stackoverflow.com/questions/17495644/…
  • 您在 google 上搜索随机页面 (RandBetween) 12k 次。这是饼干做的事情。只是想确定一下。
  • 在顶部粘贴On Error GoTo ErrHandler,然后在底部粘贴Exit Sub,并在其下方制作ErrHandler: 行标签,将StopResume 说明放在那里,然后逐步完成您的代码。它在哪里爆炸?
  • 您是否知道 Google 的软件可以识别过多的机器人搜索并在短时间内阻止 IP?

标签: vba excel


【解决方案1】:

运行时错误“91”对象变量或未设置块变量

您收到该错误是因为以下 SET 语句之一失败。

Set objResultDiv = html.getelementbyid("rso")
Set objH3 = objResultDiv.getelementsbytagname("H3")(0)
Set link = objH3.getelementsbytagname("a")(0)

您需要正确处理这些对象。例如

Set objResultDiv = HTML.getelementbyid("rso")

If objResultDiv Is Nothing Then
    MsgBox "Id `rso` not found for " & Cells(i, 1)
Else
    Set objH3 = objResultDiv.getelementsbytagname("H3")(0)

    If objH3 Is Nothing Then
        MsgBox "Tag `H3` not found for " & Cells(i, 1)
    Else
        Set link = objH3.getelementsbytagname("a")(0)

        If link Is Nothing Then
            MsgBox "Tag `a` not found for " & Cells(i, 1)
        Else
            '
            '~~> Rest of your code
            '
        End If
    End If
End If

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2017-05-20
    相关资源
    最近更新 更多