Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Прерывание запроса к сайту, если он недоступен - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Прерывание запроса к сайту, если он недоступен (Макросы/Sub)
Прерывание запроса к сайту, если он недоступен
Revengencer Дата: Понедельник, 24.07.2017, 10:10 | Сообщение № 1
Группа: Проверенные
Ранг: Новичок
Сообщений: 27
Репутация: 13 ±
Замечаний: 0% ±

Excel 2013
Добрый день.
Имеется функция, которая обращается к определенному сайту (возвращает курсы валют Нацбанка Беларуси). С недавних пор сайт иногда начал падать, как следствие, Эксель при запуске макросов подвисает и не отвисает.
Проблема в том, что в коде используется синхронный запрос. Проблему решит переделка его в асинхронный. Но я не понимаю, как это сделать)
В общем, прошу помочь сделать как-нибудь так, чтобы запрос не выполнялся или прерывался, когда сайт недоступен (асинхронный запрос или другой способ).
Код - в приложенном текстовом файле.
К сообщению приложен файл: 2510987.txt(4Kb)


Сообщение отредактировал Revengencer - Понедельник, 24.07.2017, 10:26
 
Ответить
СообщениеДобрый день.
Имеется функция, которая обращается к определенному сайту (возвращает курсы валют Нацбанка Беларуси). С недавних пор сайт иногда начал падать, как следствие, Эксель при запуске макросов подвисает и не отвисает.
Проблема в том, что в коде используется синхронный запрос. Проблему решит переделка его в асинхронный. Но я не понимаю, как это сделать)
В общем, прошу помочь сделать как-нибудь так, чтобы запрос не выполнялся или прерывался, когда сайт недоступен (асинхронный запрос или другой способ).
Код - в приложенном текстовом файле.

Автор - Revengencer
Дата добавления - 24.07.2017 в 10:10
_Boroda_ Дата: Понедельник, 24.07.2017, 10:27 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11512
Репутация: 4736 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЭто не подойдет?
http://excelvba.ru/code/GetURLstatus
http://hiprog.com/index.p....emid=35
http://excelvba.ru/code/Ping

Автор - _Boroda_
Дата добавления - 24.07.2017 в 10:27
Revengencer Дата: Понедельник, 24.07.2017, 11:04 | Сообщение № 3
Группа: Проверенные
Ранг: Новичок
Сообщений: 27
Репутация: 13 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, спасибо, первая ссылка вроде помогла. Добавил две строчки:

[vba]
Код
oHttp.Open "GET", sRequest, False
oHttp.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
oHttp.send
If Val(oHttp.Status) <> 200 Then Exit Function
sReqRes = oHttp.responseText
[/vba]

Проверю, когда этот сайт будет снова лежать.
Хотя, мне кажется, это не сработает с лежачим сайтом, надо будет пробовать с пингом.


Сообщение отредактировал Revengencer - Понедельник, 24.07.2017, 11:15
 
Ответить
Сообщение_Boroda_, спасибо, первая ссылка вроде помогла. Добавил две строчки:

[vba]
Код
oHttp.Open "GET", sRequest, False
oHttp.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
oHttp.send
If Val(oHttp.Status) <> 200 Then Exit Function
sReqRes = oHttp.responseText
[/vba]

Проверю, когда этот сайт будет снова лежать.
Хотя, мне кажется, это не сработает с лежачим сайтом, надо будет пробовать с пингом.

Автор - Revengencer
Дата добавления - 24.07.2017 в 11:04
Revengencer Дата: Понедельник, 24.07.2017, 13:59 | Сообщение № 4
Группа: Проверенные
Ранг: Новичок
Сообщений: 27
Репутация: 13 ±
Замечаний: 0% ±

Excel 2013
В общем, да. В случае с лежачим сайтом вариант с пингованием срабатывает нормально (а предыдущий вариант - нет).

Добавил в начале функции:
[vba]
Код

    Dim oPingResult As Variant
    For Each oPingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _
        ("SELECT * FROM Win32_PingStatus WHERE Address = 'nbrb.by'")
        If IsObject(oPingResult) Then
            If oPingResult.StatusCode = 0 Then
                Exit Function
            End If
        End If
    Next
[/vba]

Правда, и работать функция стала медленно... Может, здесь тоже можно что-то сделать?


Сообщение отредактировал Revengencer - Понедельник, 24.07.2017, 14:02
 
Ответить
СообщениеВ общем, да. В случае с лежачим сайтом вариант с пингованием срабатывает нормально (а предыдущий вариант - нет).

Добавил в начале функции:
[vba]
Код

    Dim oPingResult As Variant
    For Each oPingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _
        ("SELECT * FROM Win32_PingStatus WHERE Address = 'nbrb.by'")
        If IsObject(oPingResult) Then
            If oPingResult.StatusCode = 0 Then
                Exit Function
            End If
        End If
    Next
[/vba]

Правда, и работать функция стала медленно... Может, здесь тоже можно что-то сделать?

Автор - Revengencer
Дата добавления - 24.07.2017 в 13:59
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Прерывание запроса к сайту, если он недоступен (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!