我遇到一个小问题,我需要遍历excel行
然而,代码破了。如果我只是通过克服F8一步一步地运行它,那没关系。但如果我想通过F5运行它,它会破坏...
我想不是快速连接到外部源,但我该如何解决这个问题呢?
lDate = ws.Cells(i, 2).Value
With appIE
.Navigate "www.thisisjusttheexampleweb.com"
'it usually breaks here or below
End With
Do While appIE.Busy
DoEvents
Loop
'or it breaks here on setting allRowOfData
Set allRowOfData = appIE.document.getElementById("Table")
Set InterestingFields = allRowOfData.Children
感谢所有帮助
P上。
编辑:我发现其他解决方案没有解析任何网页,更有利的是使用一些API来免费获取数据,而且网站所有者通常不允许从网络上解析/抓取任何信息
答案 0 :(得分:2)
至于您在问题中询问的问题,问题是浏览器在页面完全加载之前更改其“忙碌”状态。这可能会发生,所以声明:
Do While appIE.Busy
DoEvents
Loop
在页面真正加载之前退出循环。那么会发生什么?好吧,当你试图设置你的陈述时:
Set allRowOfData = appIE.document.getElementById("historicalRateTb1")
...它失败了,因为您查找的具有此ID的元素尚未出现在您的IE应用程序的文档中。一个“不太好”的方法来解决这个问题,但这应该回答你的问题,通常是让Excel应用程序等待一段时间才能运行其余的代码,这样浏览器就有了物质时间来加载完整的页:
Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now())+5) 'this waits 5 seconds before the code run is restored
然而,既然您似乎对IE自动化更熟悉,我的建议是开始学习使用所谓的 XMLHTTP请求对象。查找有关它的更多信息here。我事先知道你: