首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA按钮有时会单击工作

VBA按钮有时会单击工作
EN

Stack Overflow用户
提问于 2018-06-19 05:45:47
回答 1查看 334关注 0票数 0

我刚刚开始使用VBA,我正在遵循一个简单的教程来使用VBA在IE中进行Google搜索。

代码语言:javascript
复制
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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-19 05:59:17

您可以完全避免使用搜索按钮,直接将搜索词连接到URL中。例如:

代码语言:javascript
复制
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解释的那样(非常感谢),你可能有一个动态加载的网页,其中的内容在你试图抓住一个元素的时候是不可用的。在这种情况下,你可以有一个循环,它试图设置一个你知道应该存在的元素,并在is nothing时循环(带超时)。

Ryszard进一步指出,你错过了完全加载的ReadyState = 4 (例如,这确实意味着动态页面实际上是完全加载的,或者延迟加载页面的所有项目都是可见的(您可能需要滚动才能实现这一点。我上面的回答向你展示了如何使用ReadyState

我不确定这个弹出窗口的原因,所以我选择了最简单的方法来获取感兴趣的页面,试图减少这种情况发生的风险。我担心这不是我曾经发生过的事情,也不会重现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50917913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档