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).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wechseln zu:
Das problem gelöst. Plus ich habe hinzufügen müssen, um wieder die Do-Schleife genannt, in die Kommentare: