Получение данных веб-запроса без прерывания

Николас разработал веб-запрос для регулярного получения внешних данных. Проблема в том, что он часто получает сообщение об ошибке «Невозможно открыть веб-страницу …» при выполнении веб-запроса. Это сообщение появляется, когда происходит некоторое прерывание интернет-соединения между Николасом и веб-сервером, и ему нужно нажать OK в сообщении об ошибке, чтобы Excel продолжил работу.

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

К сожалению, нет способа указать Excel, чтобы делай что хочешь. Когда появляется сообщение «Невозможно открыть веб-страницу …», подавить это сообщение практически невозможно. Единственное решение – попытаться создать макрос, который устраняет проблему. Например, вы можете разработать макрос, который создает экземпляр Internet Explorer (в котором нет проблем) для проверки ошибки при достижении веб-страницы. Следующий макрос реализует этот подход.

Option Explicit’Declare Sleep APIPrivate Объявление Sub Sleep Lib «kernel32» (ByVal nMilliseconds As Long) Функция GetData (strStartURL As String) As String Dim Attempt As Long Dim Connected As Boolean Dim ieDocNew As MSHTML.HTMLDocument GetData = «N/A» Attempt = 0retry: Attempt = Attempt + 1 ‘Создать ссылки на объекты браузера и открыть окно IE Dim ieNew As New InternetExplorer’ Загрузить страницу с ieNew .Visible = True ‘показать window .navigate strStartURL ‘открыть страницу Пока нет .readyState = READYSTATE_COMPLETE Sleep 500’ подождите 1/2 секунды перед повторной попыткой Wend End With ‘Страница должна быть открыта в IE, время для анализа’ Создать ссылки на объектную модель документа Установить ieDocNew = ieNew. Document If ieDocNew.Scripts.Length = 13 _ And ieNew.LocationName = «Советы Microsoft Excel» _ Then Connected = True GetData = «Данные успешно захвачены» ‘Здесь вы что-то делаете с данными End If’ Очистите объекты IE Установить ieDocNew = Ничего ieNew. Quit Set ieNew = Nothing DoEvents If Attempt

Обратите внимание, что этот макрос требует некоторой конфигурации в интерфейсе VBA для правильной работы. В частности, вам нужно выбрать «Ссылки» в меню «Инструменты» и убедиться, что проект включает ссылки на библиотеку объектов Microsoft HTML и элементы управления Microsoft Internet.

Макрос использует IE для подключения к URL-адресу, переданному в функцию (в strStartURL), а затем возьмите содержимое, которое там находится. Если соединение успешно, то для параметра Connected установлено значение True, и вы можете анализировать и использовать данные на сайте.. Функция, как написано, возвращает «Данные успешно захвачены» вызывающей подпрограмме, но вы также можете легко передать обратно некоторое значение, полученное с удаленного сайта. Затем это значение можно было бы поместить, но вызывающую процедуру, в рабочий лист.

Также обратите внимание, что функция выполняет некоторый элементарный синтаксический анализ на захватываемой странице и считает соединение успешным только в том случае, если он находит ожидаемую формулировку в заголовке страницы по URL-адресу.

Чтобы понять, как работает макрос, используйте несколько макросов, например следующие:

Sub TEST_GetData1 () MsgBox GetData («http://excel.tips.net») End Sub Sub TEST_GetData2 () MsgBox GetData («http://excel.tipsxx.net») End Sub Sub TEST_GetData3 () MsgBox GetData («http://excel.tips.net/junk») End Sub

Первый должен работать; на вторых двух должно отображаться сообщение «Н/Д».

Источник: frestage.ru

Бытовой вопрос