2013-09-25 92 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