我真的很难让我的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;,
如果我再单击然后再刷新页面仍在执行其内部搜索。
任何帮助都会感激不尽!
吉姆
答案 0 :(得分:0)
这是一个棘手的情况,我也遇到过很多次。第一次访问页面时,使用IE.ReadyState的传统“Do ... Until”循环在之后不起作用,主要是因为IE和Excel在此时不同步。我发现的最佳方法是在“Do ... If”循环中使用布尔标志,其中标志由对您正在刷新的页面中的元素的引用触发。在页面刷新之前,标志将处于一种状态。只要标志处于该状态,Do循环就会继续。因此,在您指示页面刷新后的某个位置,插入以下代码(确保根据您的具体情况进行调整):
{{1}}
注意:我添加了计数器(lng_cnt)以防止无限循环。如果页面尚未加载,它指示程序等待1秒再继续,并在30秒后停止;因为你永远不知道页面的服务器是否已关闭或其他什么。希望这可以帮助。