excel - 大量行后 Excel VBA 崩溃
问题描述
我创建了一个 Excel 宏来对更大的数据集(约 24,000 行)运行分析。该宏在第一个 c 中运行良好。2,000 个请求/行,但此后通常会崩溃。因此,发生崩溃的请求/行号会有所不同。
此时出现的调试器突出显示导致崩溃的代码行是:
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
解决方案
感谢您的反馈意见。该限制确实似乎是由谷歌限制给定时间段内的请求数量所驱动的。发生错误后访问 Google 网页时,由于请求活动异常高,我被要求通过验证码进程运行。
在任何情况下,一次提交多个请求的想法似乎都非常有趣,因为它可以节省大量收集数据的时间。但是,TinMan (codereview.stackexchange.com/a/196922/171419) 是否有简化示例的方法?我已经检查了其他线程,但到目前为止还没有发现任何有用的东西。
推荐阅读
- apache-flink - 尽管重试,flink如何保证kafka记录只发生一次
- javascript - 无法正确执行 else if 语句
- django - Django 管理员。如何更改字段标签的位置
- javascript - 为什么,当滚动页面时,当滚动到带有水平块的块时,它并不总是滚动?
- json - 如何将输出转换为 JSON 格式?
- css -
Ionic + Angular 中的二维码大小 - python - Tensorflow2.1:训练时不更新 tf.Variable 值
- docker - 如何将 docker 连接到 WSL2 发行版
- wordpress - Fusion Builder 中继器
- reactjs - 如何在 Fluent UI React 中使用网格布局