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

时间:2014-04-03 18:30:00

标签: vba

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

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

Do While ie.Busy: DoEvents: Loop     

Set doc = ie.document     

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

但它不起作用。我可以发布html&#39;刷新&#39;这有用吗?

非常感谢任何想法。

修改 它使用了我从源代码中收集的以下函数:

var limit="5"; 
function beginrefresh()
{ 
if (!document.images) return;
if (limit==1) 
    document.getElementsByTagName("Form")[0].submit(); 
else
   { 
      limit-=1; 
      window.status="Page will refresh in " + limit + " seconds."; 
      setTimeout("beginrefresh()",1000);
   } 
} 

window.onload = function () { beginrefresh(); }

修改

我破解了它,最后它真的很简单。我使用以下内容在正在加载的页面上搜索已知的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

循环

修改

或者可能不是 - 它连续工作约5或6次但随后崩溃

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

IE出现&#39; Internet Explorer无法显示网页&#39;,

如果我再单击然后再刷新页面仍在执行其内部搜索。

任何帮助都会感激不尽!

吉姆

1 个答案:

答案 0 :(得分:0)

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

{{1}}

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