2013-10-12 2 views
5

Я использую:не ie.busy работает хорошо [VBA]

While ie.busy 
DoEvents 
Wend 

' Some Code 

Чтобы добавить паузу в своем коде, в то время как интернет-проводник освежает. Но, похоже, это плохо работает. «Некоторая часть кода запускается досрочно и бросает ошибку.

Я пробовал использовать другие методы. например.

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 Object) является не очень надежным. Вот что мы используем и работаем:

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

Можно прокомментировать использование sleep(), если вам надоело использовать функцию DLL API. – jacouh

Смежные вопросы