Internet-Explorer, VBA-Automatisierungsfehler: Das Aufgerufene Objekt wurde von den clients getrennt

Ich versuche, code zu schreiben, der liest einen Wert aus Excel, suchen Sie es in einer internen web-basierten system und speichern die Ergebnisse wieder zurück in die Excel. Es liest die Excel kein problem, öffnet sich Internet Explorer mit kein problem, aber wenn ich dann versuche zu verweisen, was geöffnet wurde, erhalte ich die obige Fehlermeldung. Die Zeile "ie.Navigieren url" funktioniert, aber in der nächsten Zeile "Set DOC = dh.Dokument" erzeugt den Fehler. Irgendwelche Ideen auf, was dies verursacht? Hier ist mein code:

Public Sub getClient()
  Dim xOpen As Boolean
  xOpen = False
  Dim row As Long

  Dim xL As Excel.Application
  Set xL = New Excel.Application
  xL.Visible = False
  Dim wb As Excel.Workbook
  Dim sh As Excel.Worksheet

  'Change the name as needed, out put in some facility to input it or 
  'process multiples...
  Dim filename As String
  filename = "auditLookup.xlsx"
  Set wb = xL.Workbooks.Open(getPath("Audit") + filename)
  xOpen = True
  Set sh = wb.Sheets(1)

  Dim ie As Variant
  Set ie = CreateObject("InternetExplorer.Application")
  ie.Visible = True

  Dim DOC As HTMLDocument
  Dim idx As Integer
  Dim data As String

  Dim links As Variant
  Dim lnk As Variant
  Dim iRow As Long
  iRow = 2            'Assume headers

  Dim clientName As String
  Dim clientID As String
  Dim nameFound As Boolean
  Dim idFound As Boolean
  Dim url As String

  While sh.Cells(iRow, 1) <> ""
    'Just in case these IDs are ever prefixed with zeroes, I'm inserting 
    'some random character in front, but removing it of course when 
    'processing.
    url = "https://.../" +  mid(sh.Cells(iRow, 1), 2)
    ie.navigate url
    Set DOC = ie.Document

    'Search td until we find "Name:" then the next td will be the name. 
    'Then search for "P1 ID (ACES):" and the next td with be that.
    Set links = DOC.getElementsByTagName("td")
    clientName = ""
    clientID = ""
    nameFound = False
    idFound = False
    For Each lnk In links
        data = lnk.innerText
        If nameFound Then
            clientName = data
        ElseIf idFound Then
            clientID = data
        End If
        If nameFound And idFound Then
            Exit For
        End If

        If data = "Name:" Then
            nameFound = True
        ElseIf data = "P1 ID (ACES):" Then
            idFound = True
        End If
    Next
    sh.Cells(iRow, 2) = clientName
    sh.Cells(iRow, 2) = clientID
    iRow = iRow + 1
  Wend

  Set ie = Nothing
  If xOpen Then
    wb.Save
    Set wb = Nothing
    xL.Quit
    Set xL = Nothing
    Set sh = Nothing
    xOpen = False
  End If
Exit Sub
  • sieht aus wie vielleicht benötigen Sie eine " ready/waiting-Schleife? (Suche nach diesem Begriff hier SO ich bin sicher, du wirst exmaples der Umsetzung) Die Idee ist, dass navigieren passiert nicht sofort, und während die Seite geladen wird, der browser möglicherweise nicht verfügbar für die Automatisierung von Anfragen, etc.
  • Nicht in der obigen Beispielcode, aber ich habe Folgendes in den code: "Tun<cr>DoEvents<cr>Loop Until ie.ReadyState = READYSTATE_COMPLETE" und es gibt mir den gleichen Fehler auf der Schleife Bis Zeile.
  • Und wenn ich debug und lass es einfach zu sitzen (ich kann sehen, brachte es bis auf IE, ich bekomme immer noch den Fehler sowieso).
InformationsquelleAutor PKatona | 2017-02-22
Schreibe einen Kommentar