0

Internet Explorer のタブで PDF のリストを開く Excel スクリプトを作成しています。ほとんどの場合は正常に動作しますが、ブラウザ ウィンドウを閉じようとすると、いくつかのタブが閉じてから停止し、すべての IE インスタンスがフリーズすることがあるため、タスク マネージャーでそれらをすべて強制終了する必要があります。各タブを個別に閉じることで問題を回避できることに注意してください

記録のために、IE8 と Excel 2007 を実行しています。これが私のコードです:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    ShowBrowserWarning
    Dim TheHTML As String, PDFs, PDF, First, SerialValue, Test, k
    If Target.Column = 1 And Target.Count = 1 Then
        ' Get the serial number from the adjacent column
        SerialValue = Cells(Target.Row, Target.Column + 1)
        TheHTML = ShowHTML("http://ucmwww.dnr.state.la.us/ucmsearch/findAllDocuments.aspx?brief=False&query=xwellserialnumber+LIKE+'" & SerialValue & "'+AND+xdocumenttype+LIKE+'WELL ENGINEERING/MECHANICAL'&format=HTML&sortfield=xdate")
        Set PDFs = ExtractPDFs(TheHTML)
        If PDFs Is Nothing Then
            MsgBox "No associated well engineering/mechanical PDFs."
        Else
            First = True
            Dim ie As Object
            Set ie = CreateObject("InternetExplorer.Application")
            ie.Visible = True
            For Each PDF In PDFs
                'While ie.Busy
                '    Dim testvar
                '    testvar = 1 + 1
                'Wend
                If First Then
                    ' Open new IE window
                    ie.Navigate2 PDF.Value
                    First = False
                Else
                    ' Open tab in existing IE window
                    ie.Navigate2 PDF.Value, 2048
                End If
            Next
        End If
    End If
End Sub

何を与える?なんでこんなにフリーズするの?この問題に何か関係がありますか? (私の無知を笑わないようにしてください!)どんな助けでも大歓迎です。

編集: 上記のイタリック体のテキストを参照してください。問題を正確に説明していませんでした。

4

2 に答える 2

1

また、Browser-Busy チェックについてはどうでしょうか。問題を回避するのに役立ちますか?

    For Each PDF In PDFs

        While ie.Busy
            DoEvents
        Wend

        If First Then
            ' Open new IE window
            ie.Navigate2 PDF.Value
            First = False
        Else
            ' Open tab in existing IE window
            ie.Navigate2 PDF.Value, 2048
        End If
    Next

または、次のドキュメントのロードを開始する前に、ブラウザが 1 つのドキュメントをロードするのに十分な時間を与えるために、browser.Navigate 呼び出しの間しばらく待ちます。さまざまな期間を試して、この方法でフリーズの問題を回避できるかどうかを確認してください.

For Each PDF In PDFs

  DoEventsForTimePeriod timePeriodInSeconds:=15 ' try different time periods here

  If First Then
  ' Open new IE window
  ie.Navigate2 PDF.Value
  First = False
  Else
  ' Open tab in existing IE window
  ie.Navigate2 PDF.Value, 2048
  End If
Next

Private Sub DoEventsForTimePeriod(ByVal timePeriodInSeconds As Single)
    ' VBA.Timer: Returns a Single representing the number of seconds elapsed since midnight.
    Dim pause As Single: pause = VBA.Timer + timePeriodInSeconds
    Do While VBA.Timer < pause
        DoEvents ' Yield to other processes.
    Loop
End Sub
于 2012-11-07T18:29:02.320 に答える
0

ええと、私も初心者ですが、見る限り、サブルーチンの最後に ie = Nothing を設定して、VBA と InternetExplorer アプリケーションの間の関係を失います。

于 2013-12-03T18:56:16.873 に答える