2013-10-12 9 views
5

を働いていない:ie.busyは、私が使用しているだけでなく、[VBA]

While ie.busy 
DoEvents 
Wend 

' Some Code 

をInternet Explorerのリフレッシュながら、私のコードで一時停止を追加します。しかし、これはうまく動作していないようです。 '一部のコード部分が成熟前に実行され、エラーがスローされています。

他の方法も試してみました。例えば、

Errorhandler: 

While ie.busy 
DoEvents 
Wend 

On Error Goto Errorhandler 
'Some Code 

でも、これは動作しませんし、時にはコードが事前に成熟していることがあります。

我々のコードでは

+2

ビジーな待機ループの処理方法については、[このリンクを参照してください(http://stackoverflow.com/a/19019200/1768303)を参照してください。 '.busy'だけでなく' ReadyState = 4 'Complete'に対してもチェックするべきです。 –

答えて

4

をie.busyする絶対確実代替を提案してください、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

関連する問題