Страницы: 1
RSS
Проверка загрузки веб страницы полностью и без ошибок.
 
Возникла такая проблема, что иногда когда сервер на работе перегружен сеть начинает тормозить и вылезает ошибка.
Раньше делал через On Error GoTo и UserForm.Hide
?
Можно ли не закрывать форму с браузером и возобновить работу при восстановлении нормальной работы сервера.


Пример кода:

Private Sub UserForm_Activate()
Dim otl As String
Dim tep As String
Dim spe As String
Dim hwnd As Long
hwnd = FindWindow(vbNullString, Me.Caption)
m = ("http://www.cbr.ru")  
WebBrowser1.Navigate (m)
End Sub


Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Do While UserForm1.WebBrowser1.busy Or (UserForm1.WebBrowser1.ReadyState <> 4): DoEvents: Loop
Set maPageHtml = Me.WebBrowser1.Document
Set Htable = maPageHtml.getElementsByTagName("table")  
mn = 19

On Error GoTo 20
otl = Htable(mn).Cells(5).innerText
tep = Htable(mn).Cells(10).innerText
spe = Htable(mn).Cells(15).innerText

UserForm1.Caption = "Курс валют : " + otl + " Доллар США - " + tep + " Евро - " + spe
Exit Sub

20
m = ("http://www.cbr.ru")  
WebBrowser1.Navigate (m)
End Sub
Изменено: Stalevar - 11.05.2013 02:12:22
 
В данном примере при отключении сетевого кабеля ошибка не выскакивает, но и данные вроде не обновляются (когда кабель втыкаю в комп)
Уважаемые знатоки выручайте.
 
Stalevar, добрый день,
посмотрел файл - вам форма очень нужна? элемент webbrowser обязателен? те же самые действия и без форм выполняет вызов из vba internet explorer.
Так же все данные с сайта цб можно легко получить через xml.
Во вложении файл для экспорта курсов с сайта цб РФ, Беларусии, Казахстана.
На листе for_stalevar, два макроса первый - через xml, второй через IE. (с комментариями)
имхо через xml быстрее.
Если нужно обойти косяк можно ставить цикл :
Код
Dim proverka as boolean
proverka = false
do while proverka=false

'//тут наш код

if r_value>0 then proverka = true 'если есть курс, то присваиваем True - что приводит к выходу из цикла

loop

 
Здравствуйте "egonomist"
Рад снова читать вас  :)  спасибо что ответили.
Да форма нужна, в первом посте всеволишь пример, на работе другая форма.
Эта форма по вверх всех окон и данные обновляются сами как в обычном браузере.
Работает нормально пока сервер не перегружен.При перегрузе сервера срабатывает:

On Error GoTo 1
Exit Sub
1
MsgBox "Нет данных"
End Sub

И форма закрывается (приходится ее пере запускать)
А хотелось бы чтоб всё само  :) (форма не закрывалась и продолжала работать и обновлять данные )

А с помощью .xml можно получать данные только с определенных сайтов или всех ?
Код который вы дали испытаю и отпишусь.
 
Может тогда при ошибке возвращать в начало
Код
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Do While UserForm1.WebBrowser1.busy Or (UserForm1.WebBrowser1.ReadyState <> 4): DoEvents: Loop

begin:

Set maPageHtml = Me.WebBrowser1.Document
Set Htable = maPageHtml.getElementsByTagName("table")
mn = 19

On Error GoTo begin

otl = Htable(mn).Cells(5).innerText
tep = Htable(mn).Cells(10).innerText
spe = Htable(mn).Cells(15).innerText

UserForm1.Caption = "Курс валют : " + otl + " Доллар США - " + tep + " Евро - " + spe

End Sub


С помощью xml можно вытянуть данные со многих сайтов, где есть таблицы . Я в основном только им и пользуюсь. есть проблемы полученя данных с сайтов .asp .
Изменено: egonomist - 14.05.2013 14:34:11 (думал внутри кода можно делать форматирование текста, оказывается нет.)
 
Сейчас при запуске формы с отключенным сетевым кабелем ошибка вот в этом месте-

otl = Htable(mn).Cells(5).innerText

runtime error 91 object variable or with block variable not set

как бы избавиться.
 
А Вы проверяйте не Nothing ли Htable или maPageHtml:
Код
If maPageHtml is nothing then
   msgbox "Не удалось создать подключение к Web",vbCritical
   Exit sub
end if
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
немножко не так - ошибку надо не только отловить, но и перезапустить обработчик:
Код
begin:

Set maPageHtml = Me.WebBrowser1.Document
Set Htable = maPageHtml.getElementsByTagName("table")
mn = 19

On Error GoTo er

otl = Htable(mn).Cells(5).innerText
tep = Htable(mn).Cells(10).innerText
spe = Htable(mn).Cells(15).innerText

UserForm1.Caption = "Курс валют : " + otl + " Доллар США - " + tep + " Евро - " + spe
exit sub
er: resume begin
End Sub
Живи и дай жить..
 
Не могу проверить на работе т.к. в отпуске, но с если запускаю данный пример без соединения с интернетом то зависает.
 
естественно - а мы разве не этого добивались?
Живи и дай жить..
 
А когда соединение возобновляется данные все равно не обновляются.
При закрытии формы, весь Excel закрывается.
Изменено: Stalevar - 16.05.2013 14:22:21
 
вот так вроде работает:
Живи и дай жить..
 
Спасибо Слэн
Да ,похоже работает.
Немного подправил чтоб во время ожидания (пока нет сети) можно было работать с книгой.
Спасибо. :)
 
да, ontime хорошо, а то за деталями я и о главном забыл :)
Живи и дай жить..
Страницы: 1
Наверх