Excel VBA вылетает после большого числа строк - PullRequest
0 голосов
/ 24 ноября 2018

Я создал макрос Excel для запуска анализа для большого набора данных (~ 24 000 строк).Макрос работает хорошо для первого c.2000 запросов / строк, но после этого обычно происходит сбой.Номер запроса / строки, при котором происходит сбой, тем самым варьируется.

Отладчик, который появляется в этой точке, подчеркивает, что строка кода, приводящая к сбою:

Cells(i, 7).Value = var1.innerText

Я уже проверил другие темы и решения по этой теме, включая предлагаемое изменение с «Int» на «Long» и т. Д., Однако ни один из них не сработал.Может кто-нибудь помочь, почему макрос работает хорошо для небольших запросов, но терпит неудачу после определенного количества строк?

Код, который я использую, вставлен ниже.Большое спасибо заранее.

Sub Gethits()
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
Dim var As String
Dim var1 As Object

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 = 1654 To lastRow

url = "https://www.google.com/search?q=" & Cells(i, 4) & "&source=lnt&tbs=cdr%3A1%2Ccd_min%3A" & Cells(i, 5) & "%2Ccd_max%3A" & Cells(i, 6) & "&tbm=nws"

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 var1 = html.getElementById("resultStats")
Cells(i, 7).Value = var1.innerText

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

1 Ответ

0 голосов
/ 07 января 2019

Спасибо за ваш отзыв.Похоже, что ограничение действительно вызвано тем, что Google ограничивает количество запросов в данный период времени.При посещении веб-страницы Google после возникновения ошибки меня просят выполнить процедуру проверки с использованием капчи из-за необычно высокой активности запросов.

Идея отправки нескольких запросов за раз кажется очень интересной в любом случае, так каксэкономит много времени на сбор данных.Есть ли, однако, упрощенный подход к примеру со стороны TinMan (codereview.stackexchange.com/a/196922/171419)?Я проверил другие темы, но пока не нашел ничего полезного.

...