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

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

Итак, этот выбор в стороне, вот моя проблема, я могу использовать этот код, успешно загружать 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 

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

Вместо:

 set IE = createobject("internetexplorer.application") 

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

 Set IE = New InternetExplorerMedium 

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

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

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

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

Вот моя версия, почти такая же, как у Anup.

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

  • Microsoft Internet Controls

  • Microsoft Shell Controls and Automation

N

 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's 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 

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

Попробуй это:

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

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

 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 

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

  1. Открытый интернет-исследователь
  2. Перейти к инструментам
  3. Перейти к настройкам Интернета
  4. Перейти на вкладку «Безопасность»
  5. Нажмите «Надежные сайты».
  6. Нажмите сайты
  7. Вы увидите URL-адрес сайта, выберите его
  8. Нажмите Удалить.
  9. Нажмите «Закрыть», примените и нажмите «ОК»

Ps. Я протестировал эти шаги в браузере IE 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 

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

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

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

 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 вместо имени windows, которое было бы более точным. См. Другие ответы.

  • Угловой 2/4/5 не работает в IE11
  • Мета-элемент IE11 Перерывы SVG
  • Пользовательский агент IE10 заставляет ASP.Net не отправлять обратно Set-Cookie (IE10 не устанавливает cookies)
  • Internet Explorer 10 - как применить оттенки серого фильтра?
  • Interesting Posts

    Как работает шаблон страtagsи?

    Невозможно указать компилятор с помощью CMake

    Сгладить массив массивов в Swift

    Динамическая модель MVC Razor, «объект» не содержит определения для «PropertyName»,

    «Npm install» устанавливает все зависимости в каталоге node_modules, вместо того, чтобы иметь вложенные

    Почему я вижу маршрутизатор, а не мой настоящий IIS?

    Как я могу исправить ошибку загрузки MySQL

    Разрешение отказа: запрещено отправлять трансляцию в android

    Использование ffmpeg для вырезания видео

    Вложенные массивы в угловых 2 реактивных формах?

    Как отключить неиспользуемые предупреждения переменных, выходящие из gcc в стороннем коде, который я не хочу редактировать?

    Сделать MSDeploy (Visual Studio) не удалять папку App_Data, но удалять все остальное

    Почему этот переключатель на корпусе типа считается запутанным?

    Есть ли способ получить доступ к счетчику итераций в цикле Java для каждого цикла?

    Как я могу ввести пароль в Java?

    Давайте будем гением компьютера.