我编写了 VBA 代码来从 Yahoo Finance 中提取数据。在大多数情况下,代码正在执行其工作并提取我想要的内容。然而,时不时地,当它循环遍历不同的公司并且整个代码停止工作时,它会卡住。我怀疑这可能是由于互联网连接在循环通过特定公司时暂时中断而发生的。具体来说,我认为这发生在我的以下代码块中:
For i = 1 To 14
.navigate "http://finance.yahoo.com/q/hp?s=" & Arrays(i) & "+Historical+Prices"
Do While .busy: DoEvents: Loop
Do While .ReadyState <> 4: DoEvents: Loop here
互联网在尝试导航第 i 个公司 (Arrays(i)) 时最有可能中断并导致代码在 Do While .ReadyState <> 4: DoEvents: Loop.ReadyState <>4
无限循环的地方.出于某种原因,即使在互联网重新打开后,代码也无法正常工作,并且一直卡在尝试执行到第 i 个数组的导航时。为什么会这样?有没有办法纠正这个问题?
注意:如果我结束宏的执行并重新启动它,它会完美地工作。
这是供您引用的完整代码块。
Sub GetYahooFinanceTable()
Dim sURL As String, sResult As String
Dim oResult As Variant, oData As Variant, R As Long, C As Long, Arrays(30) As String, IE As Object
Set IE = CreateObject("InternetExplorer.Application")
For i = 1 To 14
Arrays(i) = Sheets("List of Companies").Cells(i, 1).Value
Next i
Set IE = CreateObject("InternetExplorer.Application")
With IE
.Visible = False
For i = 1 To 14
.navigate "http://finance.yahoo.com/q/hp?s=" & Arrays(i) & "+Historical+Prices"
Do While .busy: DoEvents: Loop
Do While .ReadyState <> 4: DoEvents: Loop
With .document
Sheets("Data Pull Adj Close Yahoo").Cells(3, 7 * i) = .getElementById("yfs_l84_" & Arrays(i)).innerText
End With
Next i
End With
Set IE = Nothing
End Sub
最佳答案
我不确定这是否可行。但是您是否尝试过使用 Sleep
函数?我会尝试像这样插入它:
使用.document
Sheets("Data Pull Adj Close Yahoo").Cells(3, 7 * i) =
.getElementById("yfs_l84_" & Arrays(i)).innerText
Sleep 10000
...
关于html - 由于网络中断,VBA 随机停止执行循环。互联网恢复后如何恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33000409/