Excel VBA Internet Explorer 错误 462

Excel VBA Error 462 With Internet Explorer

我有这个功能:

Sub CreateDatabase()
    Dim ieNewPage As InternetExplorer, TableRows As Object, TableRow As Object
    Dim TableRowsSpecificOwner As Object, TableRowSpecificOwner As Object, TagNeeded As Object
    Set TableRows = GetData()
    Set ieNewPage = New InternetExplorer
    For Each TableRow In TableRows
        ieNewPage.navigate CStr(TableRow.href)
        Do While ieNewPage.ReadyState <> 4
            DoEvents
        Loop
        ieNewPage.Visible = True
        Set TableRowsSpecificOwner = ieNewPage.document.querySelectorAll("tr[class='puce_texte']")
        For Each TableRowSpecificOwner In TableRowsSpecificOwner
            If Excel.Application.IfError(Excel.Application.Search("France", TableRowSpecificOwner.innerText), -1) > 0 Then
                    Debug.Print TableRow.innerText
                    Debug.Print TableRowSpecificOwner.getElementsByTagName("a")(1).innerText
            End If
        Next
        Excel.Application.Wait (Now + TimeValue("0:00:02"))
    Next
End Sub

它应该做的是遍历我使用函数 GetData() 获得的 href,导航页面,获取一些数据并移至下一个。

这适用于第一个 link,但随后我收到错误 462:

The remote server does not exists or is unavailable.

错误在这一行:

ieNewPage.navigate CStr(TableRow.href)

我到底该如何解决这个问题?

关于这个错误有一篇文章:Excel automation fails second time code runs,你可以看看。错误原因是:

Visual Basic has established a reference to Excel because of a line of code that calls an Excel object, method, or property without qualifying the element with an Excel object variable. Visual Basic does not release this reference until you end the program. This errant reference interferes with automation code when the code is run more than one time.

我认为错误发生是因为你没有第二次调用ieNewPageSet。您可以尝试将 Set ieNewPage = New InternetExplorer 放入循环中,如下所示:

...    
Set TableRows = GetData()    
For Each TableRow In TableRows
    Set ieNewPage = New InternetExplorer
    ieNewPage.navigate CStr(TableRow.href)
    ...
Next
...