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

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

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

Следующий макрос реализует этот подход.

Option Explicit 'Declare Sleep API Private Declare Sub Sleep Lib "kernel32" (ByVal nMilliseconds As Long)



Function GetData(strStartURL As String) As String     Dim Attempt As Long     Dim Connected As Boolean     Dim ieDocNew As MSHTML.HTMLDocument

GetData = "N/A"

Attempt = 0

retry:

Attempt = Attempt + 1

'Create browser object references and open an IE window     Dim ieNew As New InternetExplorer     'Load page     With ieNew         .Visible = True       'show window         .navigate strStartURL 'open page         While Not .readyState = READYSTATE_COMPLETE             Sleep 500         'wait 1/2 sec before trying again         Wend     End With

'The page should be open in IE, time for parsing     'Create document object model references     Set ieDocNew = ieNew.Document

If ieDocNew.Scripts.Length = 13 _       And ieNew.LocationName = "Microsoft Excel Tips" _       Then         Connected = True         GetData = "Data successfully captured"



'This is where you do something with the data     End If

'Clean up IE objects     Set ieDocNew = Nothing     ieNew.Quit     Set ieNew = Nothing     DoEvents     If Attempt < 10 And Not Connected Then GoTo retry End Function

Обратите внимание, что этот макрос требует некоторой настройки интерфейса 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

Первый должен работать; вторые два должны отобразить сообщение «N / A».

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (10525) применим к Microsoft Excel 2007 и 2010.