2013-10-12 6 views
5

मैं उपयोग कर रहा हूँ:काम नहीं कर रहा ie.busy अच्छी तरह से [VBA]

While ie.busy 
DoEvents 
Wend 

' Some Code 

मेरी कोड में एक ठहराव को जोड़ने के लिए है, जबकि इंटरनेट एक्सप्लोरर के रिफ्रेश। लेकिन ऐसा लगता है कि यह अच्छी तरह से काम नहीं कर रहा है। 'कुछ कोड भाग पूर्व-परिपक्व रूप से निष्पादित हो रहा है और एक त्रुटि फेंक रहा है।

मैंने अन्य विधियों का भी उपयोग करने का प्रयास किया है। उदाहरण के लिए

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

@ डेविड ज़ेमेन्स, हां यह एक अच्छी टिप्पणी है। मैंने अपना जवाब संशोधित किया। – jacouh

+0

डीएलएल एपीआई फ़ंक्शन का उपयोग करने के लिए परेशान होने पर कोई नींद() के उपयोग पर टिप्पणी कर सकता है। – jacouh

संबंधित मुद्दे