Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Automation error when getting ReadyState of InternetExplorer object

I get two different errors on the same line. Sometimes this one:

Automation error: object invoked has disconnected from its clients

and sometimes:

the interface is unknown

Minimal code to reproduce error:

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

This requires a reference: Tools > References... > Microsoft Internet Controls

The error occurs on While ie.ReadyState <> 4 the second time. How do I fix this?

like image 928
Amar Avatar asked Nov 14 '14 07:11

Amar


2 Answers

This is a duplicate of a previously asked question. The problem seems to be caused by Internet Explorer security settings - when switching between security zones, the current instance of IE is killed and a new instance is created, so your reference to the old process is no longer valid.

Some of the suggested solutions were:

  1. Change IE security settings. Uncheck "enable protected mode" on the Security tab of Internet Options.
  2. Navigate to the IP address directly instead of the URL. This is the one that fixed it for me. For example, ie.navigate "64.233.177.106" (Google's IP address)
  3. Set ie = New InternetExplorerMedium instead of New InternetExplorer. Or in your case, vice versa.
like image 98
Elizabeth Amato Avatar answered Oct 23 '22 02:10

Elizabeth Amato


Instead of

Set ie = New InternetExplorerMedium

just use

Set ie = New InternetExplorer

or, for late binding:

Set ie = CreateObject("InternetExplorer.Application")

This makes the error go away.

I'm not sure why you would use InternetExplorerMedium in the first place. Quoting the small print in the documentation:

Remarks

Windows Internet Explorer 8. On Windows Vista, to create an instance of Internet Explorer running at a medium integrity level, pass CLSID_InternetExplorerMedium (defined in exdisp.idl) to CoCreateInstance. The resulting InternetExplorerMedium object supports the same events, methods, and properties as the InternetExplorer object.

Are you really using IE8 on Windows Vista, and do you really want "medium integrity level", whatever that means? I didn't think so.

like image 4
Jean-François Corbett Avatar answered Oct 23 '22 01:10

Jean-François Corbett