VBA automation error in CreateObject(“InternetExplorer.Application”)

前端 未结 3 2063
谎友^
谎友^ 2020-12-15 14:06

I am getting the an automation error while invoking the following object

Set IE = CreateObject(\"InternetExplorer.Application\")

The error

相关标签:
3条回答
  • For others who end up here with the same error...

    This can also be caused by referencing the Document object property in an InternetExplorer object that has been quit and set to nothing. That this is not what is happening in this question but the following code throws the same error.

    Dim ie As New InternetExplorer
    ie.Visible = True
    ie.Navigate "google.com"
    
    ie.Quit
    Set ie = Nothing
    
    If ie.Document Is Nothing Then 'Error thrown here
        MsgBox "Can't get here"
    End If
    
    0 讨论(0)
  • 2020-12-15 15:05

    I just wasted 4 hours on this, and I'm facepalming at how easy the solution was. Excel creates a new activeX instance every time you run the line:

    Set IE = CreateObject("InternetExplorer.Application")
    

    How exactly that works is out of my league, but those references stick around even after you restart excel. After a couple dozen pile up, excel runs out of memory to make more

    Restart your computer, (probably an easier way, but that worked for me) and then stick the line

    IE.Quit 
    

    at the end of your code

    0 讨论(0)
  • 2020-12-15 15:08

    Add the code to make sure all IE browsers are fully closed right before the Set line.
    `Set IE = CreateObject("InternetExplorer.Application")`

    Change it to:
    Call IE_Sledgehammer
    Set IE = CreateObject("InternetExplorer.Application")

    Add the Sledgehammer module as its own macro somewhere else in the workbook:

    Sub IE_Sledgehammer()
    Dim objWMI As Object, objProcess As Object, objProcesses As Object
    Set objWMI = GetObject("winmgmts://.")
    Set objProcesses = objWMI.ExecQuery( _
    "SELECT * FROM Win32_Process WHERE Name = 'iexplore.exe'")
    For Each objProcess In objProcesses
    On Error Resume Next
    Call objProcess.Terminate
    Next
    Set objProcesses = Nothing: Set objWMI = Nothing
    End Sub

    0 讨论(0)
提交回复
热议问题