Подтвердить что ты не робот

Excel VBA Управление локальной локальной сетью IE

Итак, я использую код Excel VBA, чтобы щелкнуть по кнопке на нашем веб-сайте, поверьте мне, я знаю, что это не лучшее из того, что нужно делать, но это наименее нежелательный вариант, доступный мне в это время.

Итак, этот выбор в стороне, вот моя проблема, я могу использовать этот код, успешно загружать imdb.com, google и т.д. Но когда я загружаю наш локальный сайт, я теряю контроль над объектом ie, я не могу проверить readyState, я не могу выйти. Вот ошибка, которую я получаю. Ошибка времени выполнения '-2147023179 (800706b5)':

Ошибка автоматизации Интерфейс неизвестен

Каждый раз так часто я получаю это сообщение: Ошибка времени выполнения '-2147417848 (80010108)':

Ошибка автоматизации Вызванный объект отключился от своих клиентов.

Нажатие "Отладка" указывает на ie.readyState, я также попытался прокомментировать это, а затем он указывает на ie.Quit

Sub dothestuff()
    Dim ie As InternetExplorer
    Set ie = New InternetExplorer
    ie.Visible = True

    ie.Navigate "http://www.google.com/"
    anerror = webload(ie)

    ie.Quit
    Set ie = Nothing
End Sub

Function webload(ie)
    Do Until ie.ReadyState = READYSTATE_COMPLETE
        DoEvents
    Loop
End Function
4b9b3361

Ответ 1

Вот быстрое и простое решение этой проблемы:

Вместо:

set IE = createobject("internetexplorer.application")

Использование:

Set IE = New InternetExplorerMedium

Не нужно настраивать настройки IE

Ответ 2

Вот что происходит. Когда ваш браузер внутренне "перескакивает" в другую зону безопасности - от локального адреса до адреса inTRAnet или по адресу inTERnet - IE закрывает/удаляет текущий процесс IE и открывает еще один с более надежной защитой. Старые и новые процессы IE - это дочерние процессы IE для родительской задачи IE, поэтому вы не видите, что это происходит, наблюдая за браузером или наблюдая за процессом в диспетчере задач. Если вы используете Process Explorer (бесплатно от Microsoft), вы можете заметить, что это происходит.

Что вам нужно сделать в этом типе среды, это использовать вышеприведенное решение Anup Upadhyay. Его фрагмент кода рассматривает все задачи IE (родительский и дочерний не имеет значения) и находит новый процесс IE, указывающий на веб-адрес, который был дан исходный процесс. Пока у вас нет нескольких браузеров, открытых на один и тот же адрес, он надежно найдет новый процесс и продолжит работу, как вы ожидали.

Примечание. Возможно, вам также понадобится объект InternetExplorerMedium, а не объект InternetExplorer. Это также лучше "удерживать" сессию.

Здесь моя версия, которая почти такая же, как Anup's.

Ссылки для MS Office VBA:

  • Microsoft Internet Controls

  • Microsoft Shell Controls and Automation

п

Dim IE As InternetExplorerMedium ' This object (the "medium" variety as opposed to "InternetExplorer") is necessary in our security climate
Dim targetURL As String
Dim webContent As String
Dim sh
Dim eachIE

targetURL = "[your URL here]"
Set IE = New InternetExplorerMedium
IE.Visible = False ' Set to true to watch what happening
IE.Navigate targetURL

While IE.Busy
  DoEvents
  Wend

Do
  Set sh = New Shell32.Shell
  For Each eachIE In sh.Windows
    If InStr(1, eachIE.LocationURL, targetURL) Then
      Set IE = eachIE
      'IE.Visible = False  'This is here because in some environments, the new process defaults to Visible.  
      Exit Do
      End If
    Next eachIE
  Loop
Set eachIE = Nothing
Set sh = Nothing

While IE.Busy  ' The new process may still be busy even after you find it
  DoEvents
  Wend

Ответ 3

У нас была эта проблема с использованием IE9. Это происходит из-за настроек безопасности. На вкладке "Безопасность" диалогового окна "Свойства обозревателя" (инструменты... интернет-параметры) есть параметр "Включить защищенный режим". Каждая "зона" может иметь другую настройку "включить защищенный режим". Мы сняли флажок "включить защищенный режим", и это решило нашу проблему. Я думаю, что происходит, когда при переключении в зону, находящуюся в защищенном режиме, IE запускает новый процесс обработки трафика в этой зоне (возможно, убивает старый процесс). Когда это произойдет, ваша переменная объекта IE в VBA отключается от Internet Explorer.

Ответ 4

Хорошо, только что нашел решение, решил отчаянно попытаться загрузить 127.0.0.1 вместо localhost, уверен, никаких проблем, поэтому разрешил ip-адрес локального сервера интрасети, и теперь мне хорошо идти. Я не понимаю, почему, но это решило мою проблему.

Ответ 5

Попробуйте следующее:

Set IE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")

Ответ 6

Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False
IE.Navigate "C:\abc.html"

'Мы получаем ошибку здесь, я нашел небольшое сложное альтернативное решение для этого, как показано ниже "Возьмите ссылку для Microsoft Shell Controls and Automation 'Используйте ниже код для переназначения объекта IE для проблемы с потерянным соединением

Dim sh
Dim eachIE
Do

    Set sh = New Shell32.Shell
    For Each eachIE In sh.Windows
        ' Check if this is the desired URL

' Here you can use your condition except .html
' If you want to use your URL , then put the URL below in the code for condition check.
    ' This code will reassign your IE object with the same reference for navigation and your issue will resolve.
' 
        If InStr(1, eachIE.locationurl, ".html") Then 
        Set IE = eachIE
        Exit Do
        End If
    Next eachIE
Loop

Ответ 7

Для меня работало:

  • Откройте Internet Explorer
  • Перейти к инструментам
  • Перейти к настройкам Интернета
  • Переключиться на вкладку "Безопасность"
  • Нажмите "Надежные сайты"
  • Щелкните сайты
  • Вы увидите URL-адрес сайта, выберите его
  • Нажмите "Удалить"
  • Нажмите "Закрыть", примените и нажмите "ОК"

Ps. Я протестировал эти шаги в браузере IE 8.

Ответ 8

Возможно, у вас проблемы со связыванием? Это странная ошибка для этого.

Попробуйте этот код (адаптирован из http://www.excely.com/excel-vba/ie-automation.shtml). Надеюсь, это поможет:

Option Explicit

' lasts for the life of Excel being open
Dim ie As Object

Sub dothestuff()
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = True
    ie.Navigate "http://www.google.com/"

    Do While ie.Busy
        DoEvents
    Loop

    ie.Quit
    Set ie = Nothing
End Sub

Ответ 9

У меня такая же проблема, что и на веб-сайте, который находится внутри нашей интрасети, и также включен в мои надежные сайты. Отключение защищенного режима позволяет мне проверять ReadyState, но только если я отключу для интернет-зоны в дополнение к интрасети и доверенным сайтам.

Почему включение защищенного режима для интернет-зоны вызывает ошибку автоматизации при проверке ReadyState на доверенном сайте? Есть ли способ обойти это без отключения защищенного режима для интернет-зоны?

Ответ 10

Другое решение..

Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate ("http://URLOnMyIntranet/site.html")
IE.Visible = True

Set IE = nothing
Set objShellApp = CreateObject("Shell.Application")
For Each objWindow In objShellApp.Windows
    Debug.Print objWindow.LocationName
     If LCase(objWindow.LocationName) = LCase("Your windows name, use debug to find out") Then
            Set IE = objWindow
     End If
Next

Обратите внимание, что с помощью InternetExplorerMedium (см. другие ответы) обычно все, что вам нужно, FYI, вы также можете использовать свойство Url obj.LocationURL вместо имени окна, которое было бы более точным. См. Другие ответы.