我正在使用 VBA 浏览 IE,但在重置文档对象以便浏览多个页面时遇到了问题。我使用了 this 的答案帮助创建原始脚本的问题,但遇到了海报遇到的非常相似的问题。不幸的是,列出的答案没有帮助或引导我找到解决方案。
我正在使用以下代码来拉取页面和导航。
Sub UpdatesalesNotes()
Dim ie As Object, ieDoc As HTMLDocument
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
strHTML = ActiveSheet.Range("A31").Value
ie.navigate strHTML
'wait for browser
While ie.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
Set ieDoc = ie.Document
Call ClickButton(ieDoc, "New Service Note")
'wait for browser
While ie.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
ieDoc.getElementById("00Nj0000009FpF9").Value = "Placeholder Text"
Call ClickButton(ieDoc, "Save")
End Sub
我在第二页上与之交互的元素是一个文本框。下面列出了调用的函数(工作正常)。
Function ClickButton(ieDoc As HTMLDocument, ByVal strButtonName As String)
Dim objInputs As Object, ele As Variant
Set objInputs = ieDoc.getElementsByTagName("input")
For Each ele In objInputs
If ele.Title = strButtonName Then
ele.Click
End If
Next
End Function
如何将 ieDoc 重置为等于当前页面,以便我能够与新页面上的文本框进行交互?在与文本框交互之前插入以下内容不起作用(我不知道为什么)。
set ieDoc = ie.document
非常感谢您提供的任何帮助!
最佳答案
@dee 你已经竭尽全力回答这个问题。非常感谢!
您的回答并没有为我解决问题,但这是我能够解决问题的原因。您提到它可能是一个框架让我们(我和一个同事)意识到 IE 可能会在框架完成加载之前完成一个过程。
修复就像添加一样简单
Application.wait DateAdd("s", 5, Now)
之后
While ie.busy Or ie.ReadyState<> Readystate_complete: DoEvents: Wend
代码的最后一位现在是
While ie.Busy Or ie.ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
Application.Wait DateAdd("s", 5, Now)
iedoc.getElementById("00Nj0000009FpF9").Value = "Place holder Text"
Call ClickButton(ieDoc, "Save")
这是一个不优雅的解决方案,但它可以完成工作。
再次感谢您的帮助。我将实现您所做的一些其他更改,以使我的代码更明确、更易于阅读。
关于html - 导航到 VBA 中的页面后无法重置 HTML 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40388599/