/ / VBA Erro em tempo de execução '91' Variável de objeto ou com variável de bloco não definida - excel, vba, excel-vba

Erro de tempo de execução do VBA '91' Variável de objeto ou Com variável de bloco não definida - excel, vba, excel-vba

Tenho cerca de 12.000 linhas de dados de que precisosites para. Este código VBA estava funcionando bem por cerca de 800 e então parou. Agora não consigo executar novamente devido a este erro. Não consigo descobrir como fazê-lo funcionar novamente.

Erro em tempo de execução "91" Variável de objeto ou com variável de bloco não definida

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

Respostas:

1 para resposta № 1

Erro em tempo de execução "91" Variável de objeto ou com variável de bloco não definida

Você está recebendo esse erro porque uma das instruções SET abaixo está falhando.

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

Você precisa lidar adequadamente com os objetos. Por exemplo

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