由于互联网中断,VBA随机停止执行循环。 互联网恢复时如何恢复?

我已经写了VBA代码来从雅虎财经提取数据。 大部分代码正在做它的工作,并提取我想要的。 然而,每当它循环通过不同的公司,整个代码就停止工作,它就会经常卡住。 我怀疑这可能是由于互联网连接在特定公司循环时暂时中断而发生的。 具体来说,我认为这是发生在我的代码的以下块:

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并导致代码无限循环在Do While .ReadyState <> 4: DoEvents: Loop.ReadyState <>4 。 出于某种原因,即使互联网切换回来,代码也不能正常工作,只是试图执行导航到这个ith数组。 为什么会这样? 有没有办法纠正这一点?

注意:如果我结束macros的执行并重新启动它,它完美的工作。

以下是供您参考的完整代码块。

 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 

我不确定这是否会奏效。 但是你有没有尝试使用Sleepfunction? 我会尝试像这样插入它:

.document

 Sheets("Data Pull Adj Close Yahoo").Cells(3, 7 * i) = .getElementById("yfs_l84_" & Arrays(i)).innerText Sleep 10000 ...