2014-01-10 4 views
1

У меня возникает этот раздражительный синдром 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

+0

Возможно ли, что веб-сайт не закончил загрузку, когда вы попали в строку 'Set HTMLDoc = IE.document'? Обычно, когда вы пытаетесь прочитать документ, у него есть цикл, который проверяет состояние готовности IE. В качестве быстрой проверки вставьте паузу в 5 секунд, прежде чем пытаться прочитать документ и посмотреть, помогает ли это. Добавьте эту строку непосредственно перед строкой «Установить HTMLDoc ...» в 1-й версии вашего кода: 'Application.Wait Now() + TimeValue (« 0:00:05 »)' Если это работает, мы можем точно настроить вещи от там – barrowc

+0

@barrowc Оригинальная версия кода имела 'Application.Wait Now() + TimeValue (" 0:00:05 ")'. Однако моя проблема с 'InternetExplorer' не всегда воспроизводима, иногда она терпит неудачу сразу после' IE.navigate', если она не прерывается там, она продолжается без каких-либо сбоев. Еще одна интересная вещь, которую я заметил, заключалась в том, что всякий раз, когда происходит сбой, браузер можно «увидеть» сразу после выполнения «IE.navigate» еще до того, как выполняется «IE.Visible = true'! Что не должно происходить. – user2979010

+0

Я до сих пор борюсь с ним ... с помощью 'dim IE as InternetExplorer', после выполнения« Set IE = New InternetExplorerMedium »объект' IE' получает экземпляр, но, глядя в окно объекта, я вижу, что 'IE.document' содержит «Определенная заявка или ошибка с определением объекта». Эта ошибка появляется еще до того, как я 'IE.navigate'. После того, как я 'IE.navigate' браузер открывается с веб-страницы, но я' IE' объект ничего не имеет внутри! – user2979010

ответ

1

Ну ... после борьбы с ним в течение более 48 часов и траления в Интернете и не найдя ничего, что бы решить мою dim IE as InternetExplorer тип объекта, я, наконец, скрестил пальцы, решил проблему сбой IE.Navigate(url).

Эта ошибка, похоже, происходит из-за некоторых «неправильных» настроек в браузере IE, возможно, вы изменили настройку самостоятельно, или некоторые надстройки или некоторые другие действия могли бы изменить эти параметры. Всемогущий «СБРОС» на помощь! В диалоговом окне «Свойства обозревателя IE» есть кнопка «СБРОС», это сбрасывает IE до стандартных настроек, и все проблемы исчезли после того, как я это сделал!

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