2013-09-25 124 views
0

我想提取網頁的鏈接,但似乎web瀏覽器不瀏覽,所以我會在webbrowser1.readstate <> READYSTATE_COMPLETE ...字VBA:網頁瀏覽器不用於導航的readyState檢查

無論其無限循環,如果在webbrowser1.readstate> readystate_complete,在web瀏覽器在用戶表單中成功導航並且代碼正常工作,則在webbrowser1.readstate < ....

任何想法?由於

Do Until n = num 

    WebBrowser1.Navigate URL 

    Do While WebBrowser1.readyState <> READYSTATE_COMPLETE 

    Loop 


    If WebBrowser1.readyState = READYSTATE_COMPLETE Then 
     'code 
    end if 

    n = n +1 

loop 
+0

找到了解決方案,請勿使用webbrowser,請使用Internet Explorer應用程序,請參閱http://www.jpsoftwaretech.com/excel-vba/automate-internet-explorer/ – user2468695

回答

3

while循環您在您的問題和答案中使用是busy waiting緊密的循環,消耗CPU週期白白等待事情發生。它適用於InternetExplorer對象(有點),因爲後者運行在它自己的獨立進程中。它不適用於進行中的WebBrowser控件,因爲您的循環不會泵送導航工作所需的Windows消息。如果您想堅持使用循環方法,請考慮在環路中放置Sleep 250DoEvents調用以減輕繁忙的等待和泵消息。這仍然是not recommended,相反,您應該考慮重新考慮您的代碼以使用WebBrowser_DocumentComplete事件。

+1

謝謝。 DocumentComplete方法似乎是標準的,但我需要一種方法將我的所有代碼保存在一個子例程中,因爲它在IE/webbrowser被調用之前循環並在調用之前使用存儲的數據。 – user2468695