2013-10-12 17 views
5

ich verwende:ie.busy nicht gut funktioniert [VBA]

While ie.busy 
DoEvents 
Wend 

' Some Code 

eine Pause in meinem Code hinzuzufügen, während Internet Explorer aktualisiert. Aber das scheint nicht gut zu funktionieren. Der 'Einige Code-Teil wird vorrichtig ausgeführt und wirft einen Fehler auf.

Ich habe versucht, auch andere Methoden zu verwenden. für z.B.

Errorhandler: 

While ie.busy 
DoEvents 
Wend 

On Error Goto Errorhandler 
'Some Code 

Aber auch das funktioniert nicht und manchmal wird der Code vor gereift ausgeführt.

Bitte eine unfehlbare Alternative vorschlagen, unseren Code zu ie.busy

+2

Unter [this link] (http://stackoverflow.com/a/19019200/1768303) erfahren Sie, wie Sie mit einer Warteschleife umgehen. Sie sollten nicht nur gegen '.busy', sondern auch gegen' ReadyState = 4 'Complete' prüfen. –

Antwort

4

In ist ie.Busy (InternetExplorer.Application Object) nicht sehr glaubwürdig. Hier ist, was wir verwenden und funktioniert:

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: 
' 

Sie können es versuchen.

+1

Dies ist keine vollständige Antwort, es sei denn, Sie geben auch Code für die WinAPI-Schlaf-Funktion :) –

+0

@David Zemens, Ja das ist eine gute Bemerkung. Ich habe meine Antwort überarbeitet. – jacouh

+0

Man kann die Verwendung von sleep() kommentieren, wenn die Verwendung der DLL-API-Funktion gestört ist. – jacouh