等待使用VBA完成网站内部搜索

等待使用VBA完成网站内部搜索,vba,Vba,我真的很难让我的VBA代码等到我访问的网站完成了它正在执行的内部搜索 到目前为止,我已经尝试: Do While ie.Busy: DoEvents: Loop Set doc = ie.document Do While doc.readyState <> "complete": DoEvents: Loop 编辑 我破解了它,最终它真的很简单。我使用以下命令在正在加载的页面上搜索已知id。因此,当它找到这个id时,它知道代码可以继续。如果知道加载页面上i

我真的很难让我的VBA代码等到我访问的网站完成了它正在执行的内部搜索

到目前为止,我已经尝试:

Do While ie.Busy: DoEvents: Loop     

Set doc = ie.document     

Do While doc.readyState <> "complete": DoEvents: Loop
编辑

我破解了它,最终它真的很简单。我使用以下命令在正在加载的页面上搜索已知id。因此,当它找到这个id时,它知道代码可以继续。如果知道加载页面上id的名称,这是一种非常有用的技术

Do


Do While ie.Busy: DoEvents: Loop

    Set doc = ie.document

Do While doc.readyState <> "complete": DoEvents: Loop


Set testobject = ie.document.getElementById("changeFilterCriteria")

   If Not testobject Is Nothing Then Exit Do
IE出现“internet explorer无法显示网页”

如果单击“上一步”然后刷新,则页面仍在执行内部搜索

任何帮助都将受到感激


吉姆

这是一个棘手的情况,我也遇到过很多次。在第一次访问页面后,IE.ReadyState的传统“Do…Until”循环就不起作用了,这主要是因为此时IE和Excel不同步。我发现最好的方法是在“Do…If”循环中使用布尔标志,该标志由对正在刷新的页面中的元素的引用触发。在页面刷新之前,该标志将处于一种状态。只要标志处于该状态,Do循环就会继续。因此,在指示页面刷新后,插入以下代码(请确保根据您的具体情况进行调整):


注意:我添加了计数器(lng_cnt)以防止无限循环。如果页面尚未加载,则指示程序等待1秒后继续,并在30秒后停止;因为你永远不知道网页的服务器是否关闭了。希望这有帮助

什么是“内部”搜索?我认为更多的代码会很有用……它使用的是我从源代码中收集的以下函数:var limit=“5”函数beginrefresh(){if(!document.images)return if(limit==1)document.getElementsByTagName('Form')[0]。submit()否则{limit-=1 window.status=“Page将在“+limit+”秒内刷新。”setTimeout(“beginrefresh()”,1000)}window.onload=function(){beginrefresh()如何添加完整注释并使用正确的代码标记?@Jim77您不能。您应该更新原始问题,将代码段包含在注释中,而不是放在注释中。请尝试以下操作:
IE.Busy或IE.ReadyState 4:DoEvents:Wend
Do


Do While ie.Busy: DoEvents: Loop

    Set doc = ie.document

Do While doc.readyState <> "complete": DoEvents: Loop


Set testobject = ie.document.getElementById("changeFilterCriteria")

   If Not testobject Is Nothing Then Exit Do
Set testobject = ie.document.getElementById("changeFilterCriteria")
Dim flag as Boolean: flag = False
Dim lng_cnt as long: long_cnt = 0
Dim elem_temp as IHTMLElement: Set elem_temp = IE.document.getElementById("*element_name*")
Do Unitl flag = True or lng_cnt = 30
    If elem_temp Is Nothing Then
        flag = False
    Else
        flag = True
        Exit Do
    End If
    lng_cnt = lng_cnt +1
    Application.Wait (Now() + TimeValue("00:00:01"))
Loop