1

Web サイトからデータを抽出してスプレッドシートに保持するプログラムを作成しました。しかし、私が直面している主な問題は、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

Internet Explorer が適切にロードできず、readystate 4 にならないため、ループ Do While がスタックして終了しないことがあります。この場合、ページを手動で更新する (つまり true の表示を維持する) か、停止する必要があります。プログラムを更新し、プログラムにいくつかの更新を行います (データのソースと宛先の場所)。10 番目の Web ページごとにループを開いたままにしておくと、これはかなり時間がかかります。

解決策が 1 つあります。つまり、ループの実行中に、プログラムはループの実行中に経過した時間をチェックする必要があります。ループが 50 秒以上続く場合、プログラムは現在のループを中断し、ページを更新して再開する必要があります。(より良いロジックがあれば教えてください)。

この仕事の正しいコーディングを行うことができません。誰か解けますか...

4

1 に答える 1

1

これを試してください(未テスト

これが行うことは、変数をインクリメントし、ループが呼び出された回数をチェックすることです。

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 に答える