2017-01-09 2 views
1

Я использую старый документ Excel с VBA, который отлично работает с IE 11 в Windows 7, однако в IE 11 в Windows 10 он не работает. IE 11 запускает URL-адрес, но это все. Каждый раз, когда я пытаюсь получить доступ к событию, методу или свойству, он останавливается. Нет кода ошибки, без сбоев, просто останавливается.VBA InternetExplorer.Application Object Hang

Я подтвердил, что мои ссылки на Microsoft Internet Controls и Microsoft HTML Object Library включены (они не были, но они сейчас).

Dim ie As Object 

If ie Is Nothing Then 
    Set ie = CreateObject("InternetExplorer.Application") 
    ie.Visible = True 
End If 

url = "www.myurl.com" 

ie.Navigate url 

While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend 

код ниже проверки никогда не выполняет, я поставил код MsgBox до и после тестирования. Только MsgBox перед циклом работает, если я не пытаюсь использовать MsgBox ie.Document.Title, но я могу сделать MsgBox ie.ReadyState или MsgBox "Loading webpage" просто отлично.

Снова код отлично работает без проблем в Windows 7 с IE 11, но не работает в Windows 10 с IE 11. Протестировано на нескольких машинах W7 и W10 с одинаковыми результатами.

+2

Когда вы открываете IE 11 вручную в Windows 10, у вас есть окна сообщений, которые автоматически появляются? например «Сделайте это своим браузером по умолчанию» и т. Д. – Jordan

+1

В цикле вы имеете в виду 'While ie.ReadyState <> 4 или ie.Busy: DoEvents: Wend'? Это нормально, что попытка получить 'ie.Document.Title' до того, как этот цикл не будет работать, поскольку документ еще не полностью загружен, и получение его названия не удастся. Как это «останавливается»? Вы имеете в виду, что он застрял в петле? Попробуйте выполнить код с помощью F8. Проверьте значение ie.ReadyState. –

+0

Попробуйте цикл 'Do: Debug.Print TypeName (то есть): DoEvents: Loop While ie.ReadyState <> 4 Или ie.Busy' и покажите результат. – omegastripes

ответ

0

После того как я попробовал много разных вариантов, я наконец смог заставить его работать. По рекомендации OmegaStripes я начал возиться с режимами совместимости. Как и многие другие, самое простое решение оказалось правильным. После добавления моего сайта интрасети к настройкам просмотра совместимости он отлично работал с нулевыми изменениями кода в VBA.

  1. Launch IE 11
  2. Нажмите Инструменты
  3. Нажмите Совместимость Настройки просмотра
  4. Введите URL в текстовую область и нажмите Добавить
  5. Проверить интранет-сайты Показать в режиме совместимости
  6. Нажмите Закрыть

После этого я вышел из IE 11, перезагрузил свой Excel электронную таблицу с помощью VBA, который был ранее не функционирует. Выполнен код VBA, и он работал так же, как в Windows 7 с IE 11.

Надеюсь, это поможет кому-то другому и сэкономит им много головной боли.

Особая благодарность OmegaStripes за то, что она прошла через это со мной и помогла мне увидеть реальную проблему, а не думать об этом.