我刚刚开始使用VBA,我正在按照一个简单的教程使用VBA在IE中进行Google搜索。
Sub FillInternetForm()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "https://www.google.com"
IE.Visible = True
While IE.busy
DoEvents 'wait for page to finish loading
Wend
IE.Document.All("q").Value = ThisWorkbook.Sheets("sheet1").Range("a1")
IE.Document.All("btnK").Click
End Sub
我多次运行此代码(通过按f5),似乎IE.Document.All("btnK").Click
有时只能运行。
有时会显示Macros pop up,有时则不会。
我只是想知道这可能是什么原因,或者无论如何都要阻止这种情况发生。
我正在使用Excel 2013
谢谢
答案 0 :(得分:1)
您可以完全避免使用搜索按钮,并将搜索字词直接连接到URL。例如:
Option Explicit
Sub FillInternetForm()
Dim IE As Object, searchTerm As String
searchTerm = ThisWorkbook.Worksheets("Sheet1").Range("A1")
Set IE = CreateObject("InternetExplorer.Application")
With IE
.navigate "https://www.google.co.uk/search?safe=strict&source=hp&ei=XiooW8rAKMeZsgGji57gBw&q=" & searchTerm & "&oq=" & searchTerm & "&gs_l=psy-ab.3..0l2j0i131k1j0l2j0i131k1j0j0i131k1l3.1481.2118.0.2518.7.6.0.0.0.0.124.555.0j5.6.0..3..0...1.1.64.psy-ab..1.6.657.6..35i39k1.103.n22OrWdTQrs"
.Visible = True
While .Busy Or .readyState < 4: DoEvents: Wend
Stop '<= Delete this line
.Quit
End With
End Sub
如果您进行示例搜索,您可以将变量名称中的URL和编辑捕获为字符串,如上所示。
正如@RyszardJędraszyk解释的那样(非常感谢),您可能有一个动态加载的网页,当您尝试抓住元素时,内容不可用。在这种情况下,你可以有一个循环,它试图设置一个你知道应该存在的元素和循环而什么都不是(有超时)。
Ryszard进一步指出你错过了你的ReadyState = 4
满载(这意味着一个动态页面,例如,实际上是完全加载的,或者一个延迟加载的页面显示所有项目(你可能需要滚动)实现这一目标。上面的答案向您展示了如何使用ReadyState
。
我不确定这个弹出窗口的原因,所以我只是用最简单的路线来获取感兴趣的页面,试图减少发生这种情况的风险。这不是我曾经发生的事情或者我可能会重现的事情。