当例程不起作用时,宏单步工作



我一直在运行这个宏,它出现一个 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")行上。

您正在检查浏览器的ReadyState,但是对于某些现代网页,DOM 实际上直到至少在那之前才会使用某些对象进行更新。

VBA 中的 IE 自动化非常原始,听起来在这种情况下,您正在尝试在 DOM 存在之前访问它 - 尽管您尽最大努力等到浏览器准备就绪。在某些情况下,这实际上可能是几毫秒的时间。

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

最新更新