2015-03-18 2 views
0

Я использую эту функцию VBA для извлечения данных с веб-сайта. Функция работает отлично для меня. Но я не уверен, что это сработает для клиента, у которого могут быть ограничения доступа к интернету, наложенные их компанией. Как я могу быть уверен, что он будет работать на каждом компьютере? Должен ли я добавить прокси? Как мне это сделать?Является ли эта функция VBA работать на любом компьютере?

'func1 and func2 are strings used to compose the URL 

Function cmd(func1 As String, func2 As String) 
    Dim objHTTP 
    Dim aux 
    Dim url As String 

    'Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") 
    Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") 
    url = "https://www.comdinheiro.com.br/Clientes/ServerToExcel/S2E_TESTANDO001.php?func1=" & func1 & "&func2=" & func2 
    objHTTP.Open "GET", url, False 
    objHTTP.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 
    'objHTTP.SetProxy 2, "proxyserver:8080", "" 
    objHTTP.SetProxy HTTPREQUEST_PROXYSETTING_PROXY, "ProxyServerName" 
    objHTTP.Send ("") 
    aux = objHTTP.responseText 

    cmd = Trim(aux) 

End Function 
+4

К сожалению, вам, вероятно, придется протестировать его в разных условиях. – Degustaf

+0

Вы просто пытаетесь убедиться, что код работает без диалогового окна с ошибкой, даже если нет подключения к Интернету? Попробуйте использовать ловушку ошибок с помощью 'On Error Resume Next' или' On Error Goto Label', чтобы уловить ошибку и отобразить «Нет подключения к Интернету» Msgbox – Michael

+0

Существует _no_ способ гарантировать, что определенный код будет работать одинаково на всех системах , Другие препятствия могут быть версиями офисов и версиями os. Вам просто придется протестировать его и, возможно, настроить обнаружение ошибок, чтобы учитывать такие проблемы, как недоступность веб-сайта. – Matt

ответ

1

Относительно прокси. Если ваш код должен быть запущен на ПК с доступом в Интернет через прокси-сервер, где подключение пользователя к Интернету в IE начинается с диалога как

authorization dialog
или
enter image description here

, то вы можете добавить пользователя и пароль в четвертом и пятом параметров objHTTP.Open описанных в open method article:

objHTTP.Open "GET", url, False, user, password 

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

Кроме анализа VBA Err.Number ошибок как -2146697211 (800C0005) «Система не может найти указанный ресурс.», -2147024891 (80070005) «Доступ запрещен.», И т.д., и objHTTP.Status для одного из status property article поможет вы выяснить, что является причиной неисправности, и справиться с ней, если таковые имеются:

' ... previous code implementing .open method 
On Error Resume Next 
objHTTP.Send ("") 
EN = Err.Number 
On Error Goto 0 
' check if EN is not equal 0 (-2146697211, -2147024891, ..) 
ST = objHTTP.Status 
' check if ST is not equal 200 

Прежде всего, вы должны выяснить, в вашем коде, если доступ в интернет через прокси-сервер и требуется аутентификация или нет. Чтобы ваш код работал правильно, вы можете создать две функции, которые возвращают созданный объект HttpRequest: первый для доступа к прокси-серверу, второй - для авторизации прокси.

ключи реестра также могут быть полезны: HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ ProxyEnable HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ ProxyServer

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

+0

Спасибо, ребята. Я попытаюсь посмотреть, что произойдет. – Ihidan

Смежные вопросы