2013-10-12 111 views
5

我使用:ie.busy都不盡如人意[VBA]

While ie.busy 
DoEvents 
Wend 

' Some Code 

要在我的代碼添加暫停,而IE瀏覽器刷新。但是這似乎沒有效果。 '部分代碼部分正在過早執行並拋出錯誤。

我嘗試過使用其他方法。例如,

Errorhandler: 

While ie.busy 
DoEvents 
Wend 

On Error Goto Errorhandler 
'Some Code 

但即使這樣做沒有起作用,有時代碼已經成熟地被刪除了。

請提出一個可靠的替代ie.busy

+2

請參閱[此鏈接](http://stackoverflow.com/a/19019200/1768303)瞭解如何處理繁忙的等待循環。你不應該僅僅針對'.busy',而是針對'ReadyState = 4'Complete'進行檢查。 –

回答

4

在我們的代碼,ie.Busy(InternetExplorer.Application對象)是不太可信。這裏是我們使用和運作的:

Enum READYSTATE 
    READYSTATE_UNINITIALIZED = 0 
    READYSTATE_LOADING = 1 
    READYSTATE_LOADED = 2 
    READYSTATE_INTERACTIVE = 3 
    READYSTATE_COMPLETE = 4 
End Enum 

Dim strUrl 
Dim ie As Object 

Set ie = CreateObject("InternetExplorer.Application") 
'.... 
' do navigation... 
' 
strUrl = "http://www.example.com/" 
ie.Navigate strUrl 

' 
' waiting for the ie complete loading: 
' 
Do While (ie.Busy Or ie.READYSTATE <> READYSTATE.READYSTATE_COMPLETE) 
    DoEvents 
Loop 

' 
' here below you do stuffs on the new loaded URL: 
' 

你可以試試。

+1

這不是一個完整的答案,除非你還提供了WinAPI睡眠功能的代碼:) –

+0

@David Zemens,是的這是一個很好的評論。我修改了我的答案。 – jacouh

+0

如果打擾使用DLL API函數,可以評論sleep()的用法。 – jacouh