我正在编写Excel脚本以在Internet Explorer选项卡中打开PDF列表。它在大多数情况下工作正常,但偶尔当我尝试关闭浏览器窗口时,一些选项卡将关闭,然后停止并且所有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
是什么给出的?它为什么会这样冻结?它有什么事要做this issue吗? (请尽量不要嘲笑我的无知!)非常感谢任何帮助。
编辑:请参阅上面的斜体文字。我没有准确地描述这个问题!
答案 0 :(得分:1)
那么浏览器忙碌的检查呢?它有助于避免这个问题吗?
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
或者只是在浏览器之间等待。在开始加载下一个之前,给浏览器提供足够的时间来加载一个dokument。尝试不同的时间段,观察是否可以通过这种方式避免冻结问题。
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
答案 1 :(得分:0)
嗯,我也是新手,但是,据我所知,我会在sub的末尾设置ie = Nothing以松开VBA和InternetExplorer应用程序之间的任何关系