如何使用VBA excel等待IE9框架加载?

有许多在线资源,说明使用VBA Excel中的Microsoft Internet Explorer控件执行基本的IE自动化任务。 当所讨论的网页有一个基本的结构时,这些工作很好。 但是,当网页包含多个框架时,他们可能很难合作。 目前我有问题确定如果一个网页内的个别框架已完全加载。 例如…这个VBA Excel代码打开IE浏览器,加载一个网页,循环一个Excel表单放置数据到网页字段,执行search,然后返回IE结果数据为Excel(我的道歉为省略站点地址)。 这里蹭的是,目标网页包含两个框架:

1)用于search值input并执行search的searchbar.asp框架

2)显示search结果的searchresults.asp框架

在这个结构中,search栏是静态的,而search结果根据input条件而改变。 由于网页是以这种方式构build的,IEApp.ReadyState和IEApp.Busy不能用于确定IEfr1帧加载完成,因为这些属性在初始search.asp加载后不会更改。 因此,我使用了大量的静态等待时间来避免运行时错误,因为互联网stream量很浪费。 这段代码确实有效,但是速度很慢…记下cmdGO语句后的第10秒钟。 我真的想通过添加坚实的逻辑来确定帧加载进度来提高此过程的性能。

我的问题是这样的 – 有谁知道一个聪明的方式来确定是否一个自主的框架已经完成加载?

谢谢,

〜Z

' NOTE: you must add a VBA project reference to "Internet Explorer Controls" ' in order for this code to work Dim IEapp As Object Dim IEfr0 As Object Dim IEfr1 As Object ' Set new IE instance Set IEapp = New InternetExplorer ' With IE object With IEapp ' Make visible on desktop .Visible = True ' Load target webpage .Navigate "http://www.MyTargetWebpage.com/search.asp" ' Loop until IE finishes loading While .ReadyState <> READYSTATE_COMPLETE DoEvents Wend End With ' Set the searchbar.asp frame0 Set IEfr0 = IEapp.Document.frames(0).Document ' For each row in my worksheet For i = 1 To 9999 ' Input search values into IEfr0 (frame0) IEfr0.getElementById("SearchVal1").Value = Cells(i, 5) IEfr0.getElementById("SearchVal2").Value = Cells(i, 6) ' Execute search IEfr0.all("cmdGo").Click ' Wait a fixed 10sec Application.Wait (Now() + TimeValue("00:00:10")) ' Set the searchresults.asp frame1 Set IEfr1 = IEapp.Document.frames(1).Document ' Retrieve webpage results data Cells(i, 7) = Trim(IEfr1.all.Item(26).innerText) Cells(i, 8) = Trim(IEfr1.all.Item(35).innerText) Next 

正如@JimmyPena所说。 如果我们可以看到url,帮助起来更容易。

如果我们不能,希望这个概述可以把你放在正确的方向:

  1. 等待页面加载(IEApp.ReadyState和IEApp.Busy)
  2. 从IE对象获取文档对象。 (完成)
  3. 循环直到文档对象不是什么都没有。
  4. 从文档对象中获取框架对象。
  5. 循环,直到框架对象不是什么。

希望这可以帮助!

我使用循环选项来检查字段值,直到它像这样填充

Do,而IE.Document.getElementById(“USERID”)。值<>“test3”IE.Document.getElementById(“USERID”)。Value =“test3”Loop