单词vba:webbrowser不导航ReadyState进行检查

时间:2013-09-25 18:21:15

标签: vba ms-word webbrowser-control word-vba

我正在尝试从网页中提取链接,但似乎webbrowser无法导航,因此我在webbrowser1.readstate<>处获得无限循环READYSTATE_COMPLETE ...

但是,如果在webbrowser1.readstate<>处创建一个断点readystate_complete,webbrowser在userform中成功导航,代码工作....

有什么想法吗?感谢

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

1 个答案:

答案 0 :(得分:3)

您在问题和答案中使用的while循环是一个busy waiting紧密循环,在等待某事发生时消耗CPU周期是徒劳的。它适用于InternetExplorer对象(因为后者在其自己的独立进程中运行)。它不适用于进程内WebBrowser控件,因为您的循环不会抽取Windows消息,这是导航工作所必需的。如果您想坚持使用循环方法,请考虑在循环中放置Sleep 250DoEvents个调用来缓解繁忙的等待和泵消息。这仍然是not recommended,您应该考虑重新分解代码以使用WebBrowser_DocumentComplete事件。