Excel VBA to populate I.E. causes Run-time error i

2019-08-15 00:04发布

I created a sub to populate form fields in a website with data from an Excel workbook

The sub opens a new window in Internet Explorer, navigates to a intranet site, and populates form fields with data from an Excel workbook

This sub works using Win7 Excel 2010 and I.E. 9

When I use newer versions of I.E., the sub opens a new window in Internet Explorer and navigates to a intranet site, but fails to populate the form fields I receive the following error from VBA:

Run-time error ‘-2147417848 (80010108)’:

Automation error

The object invoked has disconnected from its clients

Here is my code

Sub hOpenWsAndPopulate()
Dim ie      As Object
Dim frm     As Variant
Dim element As Variant

Set ie = CreateObject("InternetExplorer.Application")
ie.navigate "www.mywebsite.com"
While ie.readyState <> 4: DoEvents: Wend

' try to get form by ID
Set frm = ie.document.getElementById("incidentTicket_Form")

' try to get form by tag name and index.
' Item(0) = 1st form
' Item(1) = 2nd form
' Item(2) = 3rd form, etc.
If frm Is Nothing Then Set frm = ie.document.getElementsByTagName("form").Item(0)

If frm Is Nothing Then
    MsgBox "Form not found"
    ie.Quit
    Set ie = Nothing
    Else
        ie.Visible = True
        For Each element In frm.elements
            On Error Resume Next
            Select Case element.Name
                ' Input Classification
                    Case "strClassificationName": element.Value = Sheets("OUT-Class").Range("Classification")
                ' Input Short Description
                    Case "txtShortDescription": element.Value = Sheets("OUT-SD").Range("SD_Output")
                ' Input Long Description
                    Case "txtLongDescription": element.Value = Sheets("OUT-LD").Range("LD_Output")
                ' Input CC
                    Case "strCCString": element.Value = Sheets("OUT-CC").Range("CcBa")
            End Select
    Next
End If
End Sub

I've tried numerous changes to my code (below), but nothing works

Sub zzzOpenWsAndPopulate()

Dim objIE As InternetExplorer
Dim htmlDoc As HTMLDocument
Dim htmlFrame As HTMLFrameElement
Dim frame As HTMLIFrame
Dim htmlElement As HTMLDTElement
Dim myDoc As Object
Dim frm     As Variant
Dim element As Variant


' Set the variables
Set objIE = New InternetExplorer

' Make the browser visible and navigate
With objIE
    .Visible = True
    .navigate "www.mywebsite.com"
End With

hWaitForInternetToLoad objIE

Set frm = objIE.document.getElementById("incidentTicket_Form")

If frm Is Nothing Then Set frm = ie.document.getElementsByTagName("form").Item(0)

If frm Is Nothing Then
    MsgBox "Form not found"
    ie.Quit
    Set ie = Nothing
    Else
        objIE.Visible = True
        For Each element In frm.elements
            On Error Resume Next
            Select Case element.Name
                ' Input Classification
                    Case "strClassificationName": element.Value = Sheets("OUT-Class").Range("Classification")
                ' Input Short Description
                    Case "txtShortDescription": element.Value = Sheets("OUT-SD").Range("SD_Output")
                ' Input Long Description
                    Case "txtLongDescription": element.Value = Sheets("OUT-LD").Range("LD_Output")
                ' Input CC
                    Case "strCCString": element.Value = Sheets("OUT-CC").Range("CcBa")
            End Select
    Next
End If


End Sub

Is there something about I.E. 10, 11, etc. that is different from I.E. 9?

Is there a way to force open an older version of I.E. (browser mode 9)

Any suggestions?

1条回答
2楼-- · 2019-08-15 00:33

For the script element, readyState is no longer supported. Starting with Internet Explorer 11, use onload.

IE 11 has different ways to access attributes:

Example: this will work for IE8 and 9

Set doc = ie.document
Set doc1 = doc.frames(2).document 'here comes the error

and this will work for IE11

Set doc = ie.document.frames

Set doc1 = doc.frames(2)
查看更多
登录 后发表回答