2

Ich habe VBA programmiert, um mit IE ziemlich umfassend zu interagieren und habe begonnen, dies wieder zu tun, aber bin auf ein seltsames Phänomen, das ich nicht scheinen kann, mit allen zu lösen die Forschung, die ich gemacht habe.IE Automatisierung - Excel VBA ... läuft in Fehler nach Laden der Website

Sobald ich die Website laden, verliere ich alle Bezug auf die InternetExplorer Application und kann nicht mehr mit dem Objekt arbeiten.

Wenn ich überprüfen, für die Website vollständig geladen ist, habe ich eine Run-Time Error 424 Object Required bekam, oder eine Run-time error '-2147023179 (...)': Automation Error The interface is Unknown

Wenn ich an dieser Linie bewegen (während die Seite vollständig geladen zu sehen) und führen Sie die Set doc ... Linie, erhalte ich Run-Time Error 462: The remote server machine does not exist or is unavailable.

Ich verwende IE 11 und Excel 2010. Ich habe VBAProject Verweise auf Microsoft Internet Controls und Microsoft HTML-Objektbibliothek, aber die Fehler treten auch bei der späten Bindung.

Sub LoginToFXAll() 

Dim ieApp As InternetExplorer 
Set ieApp = New InternetExplorer 

With ieApp 

    .Visible = True 

    .Navigate "https://www.google.com/" 

    Do 
     DoEvents 
    Loop Until .ReadyState = READYSTATE_COMPLETE ''<- Run-Time Error 424 occurs here 


    Dim doc As HTMLDocument 
    Set doc = .Document '<- Run-Time Error 462 occurs here 
    doc.all("q").Value = "Scott" 

End With 

End Sub 
+0

Ich hatte ein Problem wie es, verwendet Ihr Netzwerk eine Art von Sicherheit? Wenn ja, das Problem ist, dass die IE-Instanz während der Validierung Ihrer "Zugriffsrechte" ist "zerstört" und "neu aufzubauen", daher ist das ursprüngliche Objekt verloren – Sgdva

+0

Dank @Sgdva - Ich habe ein Gefühl seiner Sicherheit verwandt, aber kann ' t "beweise es" noch nicht. Finden Sie es trotzdem, um es zu umgehen oder das neue Objekt zuzuweisen? (Ich vermute nicht). –

+0

Leider habe ich zu dem Zeitpunkt keine Lösung dafür gefunden, aber jetzt, da ich ein wenig mehr darüber weiß, könnte man wahrscheinlich den Speicherort des Internet Explorers anstelle des Elements selbst ermitteln und sich irgendwie darauf beziehen, Leider kann ich es im Moment nicht testen, ob es funktioniert, aber das könnte eine gute Problemumgehung sein, überprüfe meine Antwort auf Richtlinien, wie mit [ObjPtr] gearbeitet werden könnte (https://support.microsoft.com/ de-de/kb/199824) – Sgdva

Antwort

0

Nach dem IE erstellt wird, wird wahrscheinlich sein, könnten Sie die Speicherzuweisung für sie bekommen und zum Glück die gleiche, nachdem das Sicherheitsnetz erfolgt.

Option Explicit 
#If VBA7 Then 
    Public Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef destination As Any, ByRef source As Any, ByVal length As Long) 
#Else 
    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef destination As Any, ByRef source As Any, ByVal length As Long) 
#End If 

#If VBA7 Then 
Function GetMemoryAddress(ByVal IEPointer As LongPtr) As Object 
#Else 
Function GetMemoryAddress(ByVal IEPointer As Long) As Object 
#End If 
     Dim objIE As Object 
     CopyMemory objIE, GetMemoryAddress, LenB(GetMemoryAddress) 
     Set GetMemoryAddress = objIE 
     Set objIE = Nothing 
End Function 
+0

Schön! Ich werde es für mich testen, sobald ich das Sharepoint-Problem wieder durchquere - ich habe damals über diese Möglichkeit nicht nachgedacht- – Sgdva