1

我创建了一个程序,可以从网站中提取数据并保存在电子表格中。但我遇到的主要问题是 Internet Explorer 的挂起。

With ie
        .Visible = True
        .Navigate urll
        Do While .readyState <> 4
            Application.StatusBar = "Opening Page : " & i & ", Please wait..."
            DoEvents
        Loop
        Set html = .Document
End With

循环 Do While 有时会卡住并且永远不会结束,因为 Internet Explorer 无法正确加载并且永远不会进入就绪状态 4。在这种情况下,我必须手动刷新页面(保持 ie 的可见性)或者我必须停止程序,并对程序进行一些更新(数据源和目标的位置)。如果每 10 个网页保持循环打开,这将非常耗时。

我有一个解决方案,即在循环进行期间,程序应检查循环执行期间经过的时间,如果循环持续超过 50 秒,程序应暂停当前循环并通过刷新页面重新开始。(如果您有更好的逻辑,请告诉我)。

我无法为这项工作进行正确的编码。有谁能解决这个...

4

1 回答 1

1

Try this (UNTESTED)

What this does is increments a variable and checks for the number of time the loop was called.

Dim nCount As Long

Sub Sample()
    '
    '~~> Rest of the code
    '
    With ie
        .Visible = True
        .Navigate urll
        Do While .readyState <> 4
            Application.StatusBar = "Opening Page : " & i & ", Please wait..."

            Wait 2 '<~~ Wait for 2 Seconds

            If nCount > 25 Then
                '~~> Approx 50 seconds have elapsed
            End If
        Loop
        Set HTML = .Document
    End With
    '
    '~~> Rest of the code
    '
End Sub

Private Sub Wait(ByVal nSec As Long)
    nSec = nSec + Timer
    While nSec > Timer
        DoEvents
    Wend
    nCount = nCount + 1
End Sub
于 2013-10-16T06:27:19.733 回答