Странно встретить эту ошибку, но вы можете исправить ее, сбросив объект IE
.
For i = 2 To 2
IE.navigate "http://www.airlinecodes.co.uk/airlcodesearch.asp"
Do
DoEvents
Set IE = GetIE("airlinecodes.co.uk")
Loop While IE.readyState < READYSTATE_COMPLETE
Set DOC = IE.document
DoEvents
DOC.getElementsByName("icaocode").Item(0).Value = Sheet1.Range("A" & i).Value
For Each inpt In DOC.getElementsByTagName("input")
If inpt.Name = "submit" And inpt.Type = "submit" And inpt.Value = "Submit" Then
inpt.Click
Do
DoEvents
Set IE = GetIE("airlinecodes.co.uk")
Loop While IE.readyState < READYSTATE_COMPLETE
Exit For
End If
Next inpt
Я обновил два цикла здесь, используя
Do
DoEvents
Set IE = GetIE("airlinecodes.co.uk")
Loop While IE.readyState < READYSTATE_COMPLETE
Это означает, что вы будете запускать этот цикл как минимум один раз, так как я переместил оператор While
вниз - он будет постоянно сбрасывать ваш IE
объект до загрузки страницы - опять же, это не то, с чем вы всегда будете сталкиваться при просмотре веб-страниц, хотя это, конечно, странно.
Вам также необходимо добавить следующую подпрограмму в свой модуль - это то, что собирается сбросить ваш IE
объект:
Function GetIE(sLocation As String) As InternetExplorer
Dim objShell As Object, objShellWindows As Object, o As Object
Dim sURL As String
Dim RetVal As InternetExplorer
Set RetVal = Nothing
Set objShell = CreateObject("shell.application")
Set objShellWindows = objShell.Windows
For Each o In objShellWindows
sURL = ""
On Error Resume Next
sURL = o.document.Location
On Error GoTo 0
If sURL Like "*" & sLocation & "*" Then
Set RetVal = o
Exit For
End If
Next o
Set GetIE = RetVal
End Function