获取InternetExplorer对象的ReadyState时出现自动化错误

时间:2014-11-14 07:43:39

标签: vba internet-explorer excel-vba excel

我在同一行上遇到两个不同的错误。有时候这个:

  

自动化错误:调用的对象已与其客户端断开连接

有时候:

  

界面未知

重现错误的最小代码:

Sub mcve()
    Dim ie As Object
    Dim www As String
    Set ie = New InternetExplorerMedium
    www = "http://www.stackoverflow.com"
    ie.navigate www
    ie.Visible = False
    While ie.ReadyState <> 4    ' <~~~~~~~~~~~~~~~~~~~~~~~~ Error occurs here
        DoEvents
    Wend
End Sub

这需要参考:工具&gt;参考文献...&gt; Microsoft Internet Controls

第二次While ie.ReadyState <> 4发生错误。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

这是previously asked question的副本。问题似乎是由Internet Explorer安全设置引起的 - 当在安全区域之间切换时,IE的当前实例被终止并且创建了一个新实例,因此您对旧进程的引用不再有效。

一些建议的解决方案是:

  1. 更改IE安全设置。取消选中“Internet选项”的“安全”选项卡上的“启用保护模式”。
  2. 直接导航到IP地址而不是URL。这是为我修复它的那个。例如,ie.navigate "64.233.177.106"(Google的IP地址)
  3. Set ie = New InternetExplorerMedium代替New InternetExplorer。或者在你的情况下,反之亦然。

答案 1 :(得分:3)

而不是

Set ie = New InternetExplorerMedium

只需使用

Set ie = New InternetExplorer

或者,对于后期绑定:

Set ie = CreateObject("InternetExplorer.Application")

这会使错误消失。

我不确定为什么你会首先使用InternetExplorerMedium。在the documentation中引用小字:

  

<强>说明

     

Windows Internet Explorer 8.在Windows Vista上,要创建以中等完整性级别运行的Internet Explorer实例,请将CLSID_InternetExplorerMedium(在exdisp.idl中定义)传递给{{1 }}。生成的CoCreateInstance对象支持与InternetExplorerMedium对象相同的事件,方法和属性。

您是否真的在Windows Vista上使用IE8,并且您真的想要“中等完整性级别”,无论这意味着什么?我不这么认为。

答案 2 :(得分:0)

打开Internet Explorer,然后转到Internet设置,打开“站点”,然后清除需要服务器识别的网页。问题出在服务器上。