У меня возникает этот раздражительный синдром IE при попытке управлять формой IE VBA. Я намереваюсь открыть веб-сайт и искать конкретный файл (т. Е. XLS), а затем загрузить его.InternetExplorer vs MSHTML2.XMLHTTP60 в VBA
Мой код:
Dim IE as InternetExplorer ' I could also use "Object" here
Dim HTMLDoc as HTMLDocument
Dim OHTML_Element as IHTMLElement
Set IE = New InternetExplorer ' I could also use "InternetExplorerMedium" here
IE.Silent = True
IE.Navigate (sURL)
IE.Visible = True
Set HTMLDoc = IE.document
mimtype = "Microsoft Office Excel 97-2003 Worksheet"
For Each oHTML_Element In HTMLDoc.Links
If InStr(oHTML_Element.mimeType, mimtype) Then
If InStr(oHTML_Element.href, FileType) Then
' Get the SOURCE file and DESTINATION files
SRCfile = mainURL & oHTML_Element.pathname
FileName = DESTPath & oHTML_Element.nameProp
'Download the file
ret = URLDownloadToFile(0, SRCfile, FileName, 0, 0)
'See if the download happened correctly
If ret = 0 Then
'all went well
GetFile = True
Else
MsgBox "There was a problem downloading the file.", vbCritical, "DOWNLOADING ERROR!"
GetFile = False
Exit Function
End If
Exit For
End If
End If
Next oHTML_Element
Теперь это казалось довольно последовательно работать в течение последних нескольких месяцев. За последние два дня система зависает после IE.navigate(sURL
. В режиме отладки я могу четко видеть все поля объекта IE
, который был создан, но после выполнения IE.navigate(sURL)
все поля объекта исчезают, однако веб-сайт открывается правильно. Однако эта проблема не очень «последовательна», поэтому она может исчезнуть или не стать ее раздражительной! Это «исчезающие» поля опасны, так как в дальнейшем у меня есть условие if
, чтобы проверить, пусты ли поля, если True
для выхода.
Просто немного фона, я на Win 7, IE 11 (обновлено вчера после этой проблемы на IE 10, ранее он работал с IE 10 в течение нескольких месяцев)
После траления в WWW, по-видимому некоторые ppl испытывают эту проблему. В качестве решения на Stackoverflow было предложено использовать MSHTML.XMLHTTP60
. Итак, я попытался,
Dim IE as MSHTML2.XMLHTTP60
Dim HTMLDoc as MSHTML.HTMLDocument
Dim HTMLBod as
Set IE = new MSHTML2.XMLHTTP60
IE.open "Get", sURL, False
IE.send
Set HTMLDoc = new MSHTML.HTMLDocument
HTMLDoc.body.innerHtml = IE.responseText
???? How do I proceed further to "search" for a XLS file and gets its "href" link?
Я пытался смотреть на данные (с помощью Watch Window) внутри HTMLDoc
(с использованием MSHTML) и HTMLDoc
(используя InternetExplorer) данные не кажутся одинаковыми. Поэтому моя предыдущая процедура «поиск mime-типа & href и загрузка» не будет работать.
Я буду очень признателен, если кто-то может пролить свет на него. Я ищу решение, которое будет либо помочь мне исправить непоследовательное поведение с InternetExplorer
или раствором с помощью MSHTML2
Возможно ли, что веб-сайт не закончил загрузку, когда вы попали в строку 'Set HTMLDoc = IE.document'? Обычно, когда вы пытаетесь прочитать документ, у него есть цикл, который проверяет состояние готовности IE. В качестве быстрой проверки вставьте паузу в 5 секунд, прежде чем пытаться прочитать документ и посмотреть, помогает ли это. Добавьте эту строку непосредственно перед строкой «Установить HTMLDoc ...» в 1-й версии вашего кода: 'Application.Wait Now() + TimeValue (« 0:00:05 »)' Если это работает, мы можем точно настроить вещи от там – barrowc
@barrowc Оригинальная версия кода имела 'Application.Wait Now() + TimeValue (" 0:00:05 ")'. Однако моя проблема с 'InternetExplorer' не всегда воспроизводима, иногда она терпит неудачу сразу после' IE.navigate', если она не прерывается там, она продолжается без каких-либо сбоев. Еще одна интересная вещь, которую я заметил, заключалась в том, что всякий раз, когда происходит сбой, браузер можно «увидеть» сразу после выполнения «IE.navigate» еще до того, как выполняется «IE.Visible = true'! Что не должно происходить. – user2979010
Я до сих пор борюсь с ним ... с помощью 'dim IE as InternetExplorer', после выполнения« Set IE = New InternetExplorerMedium »объект' IE' получает экземпляр, но, глядя в окно объекта, я вижу, что 'IE.document' содержит «Определенная заявка или ошибка с определением объекта». Эта ошибка появляется еще до того, как я 'IE.navigate'. После того, как я 'IE.navigate' браузер открывается с веб-страницы, но я' IE' объект ничего не имеет внутри! – user2979010