我知道这样的问题已经被问过,但我是有点不同的,已经相当令人担忧。 我正在处理的是与当输入框某些项目填写的装载更多的页面的几个事件形式的网页。 当这些事件再次触发页面加载,但保持在与同nameprop相同的URL。 我一直在使用以下几种方法都seperately和串在一起来处理等待页面加载,但有时仍VBA管理继续执行并设置HTMLDocument的变量到一个页面上没有它适当的信息导致宏调试。 这里有各种各样的事情,我一直在努力,到目前为止:
While IE.Busy
DoEvents
Wend
Do Until IE.statusText = "Done"
DoEvents
Loop
Do Until IE.readyState = 4
DoEvents
Loop
我甚至尝试这些事件放入类似下面的循环,但它确实不太工作,因为上次更改属性只返回一个值精确到秒和宏在田地里旋转速度不够快,它返回一个新的在相同的第二页:
Do Until IE.statusText = "Done" And IE.Busy = False And IE.ReadyState = 4 _
And IE.document.lastModified > LastModified ----or---- IE.document.nameprop = _
"some known and expected name prop here"
While IE.Busy
DoEvents
Wend
Do Until IE.statusText = "Done"
DoEvents
Loop
Do Until IE.readyState = 4
DoEvents
Loop
Loop
即使是没有等待足够长的时间设置HTMLDocument的对象导致调试。 我已经考虑将下一个输入元素和检查,对于没有进一步的代码,但因为一般输入元素在HTML存在,但被隐藏,直到合适的事件被触发,即使那会不会是时间成功100% ,这不会是一个问题,但他们没有加载其可能的选择,直到事件被触发后。 这可能是一个奇数页。
反正...不知道还有什么要补充。 如果有别的东西,可能是有益的,看看就问。 我猜我寻找的是一种方式来获得VBA等到IE知道另一页上没有它的方式。 看来之前是完全做得到加载几次。
所以...任何人有什么想法?
编辑:发现了一些新的东西去尝试。 尽管如此,没有骰子。 有人建议我加入这些尝试。 下面是代码,出于某种原因,VBE和发射应该填充选择的元素上的选项...想尝试XML事件后,使用这种方法时,Excel实例无响应...这里是代码:
intCounter = 0
Do until intCounter > 2
Do Until IE.Busy = False: DoEvents: Loop
Do Until IE.ReadyState = 4: DoEvents: Loop
Set HTMLDoc = IE.Document
Do Until HTMLDoc.ReadyState = "complete"
Set HTMLSelect = HTMLDoc.getElementById("ctl00$ctl00$MainContent$ChildMainContent$ddlEmployeeBranchCodes")
intCounter = 0
For each Opt in HTMLSelect
intCounter = intCounter + 1
Next Opt
Loop
根据我可以在网页上看到的情况,我知道这是在这个循环中的VBE和Excel无响应的地方。
希望帮助......我知道这对我没有帮助... Drats。
编辑:只是想我要补充这一点。 当涉及到自动化的网页,在大多数情况下,我不再使用IE浏览器。 我发现这是好多了,完全回避的异步的东西这个问题,简单地执行职务,并得到自己。 可能不取决于你想做什么最佳的解决方案,但它工作,如果你在交通仔细观察和参数事情做好相当可靠。