2

Я запрограммировал VBA для взаимодействия с IE довольно широко и начал делать это снова, но натолкнулся на странное явление, которое я, похоже, не могу решить со всеми исследование, которое я сделал.IE Automation - Excel VBA ... Выполнение ошибок после загрузки сайта

Как только я загружаю веб-сайт, я теряю всю ссылку на InternetExplorer Application и больше не могу работать с объектом.

Когда я проверяю на сайте будучи полностью загружен, я получил Run-Time Error 424 Object Required, или Run-time error '-2147023179 (...)': Automation Error The interface is Unknown

Если я пройти мимо этой линии (в то время как видит сайт полностью загружен) и запустить Set doc ... линии, я получаю Run-Time Error 462: The remote server machine does not exist or is unavailable.

Я использую IE 11 и Excel 2010. У меня есть ссылки VBAProject на Microsoft Internet Controls и библиотеку объектов MicrosoftHTML, но ошибки также возникают при позднем связывании.

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

У меня была проблема, как у вас, ваша сеть использует какую-то безопасность? Если это так, проблема в том, что экземпляр IE при проверке ваших «прав доступа» «уничтожен» и «перестроен», следовательно, исходный объект потерян – Sgdva

+0

Спасибо @Sgdva - У меня есть чувство, связанное с безопасностью, t "доказать это" еще. Вы все равно можете обойти это или назначить новый объект? (Я не подозреваю). –

+0

К сожалению, в то время я не нашел решение для этого, но теперь, когда я знаю немного больше об этом, возможно, вы можете получить расположение памяти в Internet Explorer вместо самого элемента и как-то ссылаться на него, к сожалению, я не могу проверить его на данный момент, если он будет работать, но, возможно, это будет хорошим обходным решением, проверьте мой ответ на рекомендации о том, как можно работать с [ObjPtr] (https://support.microsoft.com/ en-us/kb/199824) – Sgdva

ответ

0

После того, как IE создается, вероятно, вы могли бы получить выделение памяти для него и к счастью, будет таким же, после того, как сетевая безопасность делаются.

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

Ницца! Я собираюсь проверить его для меня, как только я снова перейду проблему с sharepoint. Я не думал об этой возможности в то время, – Sgdva

Смежные вопросы