我从网站上提取某些数据。我必须为表中的至少百万行执行此任务。我正在使用excel VBA连接MySQL。
按照上述步骤,一切正常。但是,如果我尝试超过10行,我会收到以下错误。
自动化错误远程过程调用失败且未执行
我意识到这与IE的开启/关闭有关。在我的程序中,我有以下代码。
要创建新的IE应用程序,我已定义如下。
Set ie = New InternetExplorer
Set RegEx = New RegExp
Dim iedoc As Object
ie.Navigate "http://www.google.com/search?hl=en&q=" & FirstName & "+" & LastName &
"+linkedin&meta="
Do Until ie.ReadyState = READYSTATE_COMPLETE
Loop
MyStr = ie.Document.body.innerText
Set RegMatch = RegEx.Execute(MyStr)
在为一位作者提取数据之后,我在最后有一段代码。
ie.Quit
Set RegEx = Nothing
Set ie = Nothing
Dim strBatchName As String
strBatchName = "F:\command.bat"
Shell strBatchName
command.bat具有以下代码。
taskkill.exe /F /IM iexplore.exe /T
如果我的表格中有少于10行,那么它的效果非常好。但是,对于更多行,我确实得到了上面提到的错误。
答案 0 :(得分:3)
我更倾向于使用相同的ie实例来获取所有作者数据,如下例所示循环遍历它们。另外,您的批处理文件用于处理数据是什么?我从未发现需要批处理文件来帮助执行vba。你用它们写文本文件吗?你也可以用vba完成它。
Dim ie As Object, lastRowAuthors as long, i as long, strBatchName As String
lastRowAuthors = sheets("Authors").Cells(Rows.Count, 1).End(xlUp).row
Set ie = New InternetExplorer
for i = 1 to lastRowAuthors
ie.Navigate "http://www.google.com/search?hl=en&q=" & sheets("Authors").range("A" & i).value & "+" & sheets("Authors").range("B" & i).value &
"+linkedin&meta="
Do Until ie.ReadyState = READYSTATE_COMPLETE
Loop
Set RegEx = New RegExp
MyStr = ie.Document.body.innerText
Set RegMatch = RegEx.Execute(MyStr)
'*****************************************************************
' Use your REGEX commands to extract data
'*****************************************************************
strBatchName = "F:\command.bat"
Shell strBatchName
next i
ie.Quit
Set RegEx = Nothing
Set ie = Nothing
end sub
答案 1 :(得分:1)
我遇到了类似的问题,我找到的解决方案是:
在每次搜索之间添加一个暂停,例如秒,以确保它可以浏览每个记录并搜索它们没有任何问题。为了做到这一点,我建议在Application.Wait Now + 1
行之前添加ie.Navigate
,或者添加额外的子进行此操作
Sub WaitFor(PauseInSeconds As Long)
Dim SngSec As Long
SngSec = Timer + PauseInSeconds
Do While Timer < SngSec
DoEvents
Loop
End Sub
额外:如果你按照你所说的那样拥有数百万行&#34;你肯定应该添加一个错误处理程序来检索代码崩溃的最终行,这样你就不必确保它一直运行正常。使用On Error Resume Next
执行此操作。然后,您可以手动检查这些行,将其索引存储在一个数组中,然后再次遍历每个行。