当例程没有时,宏单步就可以工作

时间:2017-07-02 00:58:28

标签: vba

我一直在运行这个宏,它提出了一个424对象所需的错误,但宏工作,当我用一个步骤按钮" F8"运行它时,我得到了预期的结果。

Sub FileUpload()

    Dim IEexp As InternetExplorer
      Set IEexp = CreateObject("InternetExplorer.Application")
    IEexp.Visible = False


    IEexp.navigate "https://www.google.co.uk/?gws_rd=ssl#q=lenti+a+contatto+colorate"

      Do While IEexp.ReadyState <> 4: DoEvents: Loop

    Dim inputElement As HTMLDivElement
      Set inputElement = IEexp.Document.getElementById("brs")
    MsgBox inputElement.textContent


 IEexp.Quit
    Set IEexp = Nothing

End Sub

错误出现在Set inputElement = IEexp.Document.getElementById("brs")行。

1 个答案:

答案 0 :(得分:0)

您正在检查浏览器的ReadyState,但是在某些现代网页上,直到至少这一点,DOM才真正被某些对象更新。

VBA中的IE自动化非常原始,听起来像在这种情况下,您试图在DOM中存在一个节点之前就已经对其进行了访问-尽管您已尽最大努力等待浏览器准备就绪。在某些情况下,这实际上可能是几毫秒的时间。

这里最快的解决方法是在循环中添加Application.Wait(),以引起实际的时间延迟。一个更优雅的选择可能是在循环中引入检查并在所需的DOM对象实际存在时退出循环。如果这样做,则有可能陷入无限循环,因此我总是建议您设置最大增量作为备份。