Возникла такая проблема, что иногда когда сервер на работе перегружен сеть начинает тормозить и вылезает ошибка. Раньше делал через 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, добрый день, посмотрел файл - вам форма очень нужна? элемент 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(думал внутри кода можно делать форматирование текста, оказывается нет.)
немножко не так - ошибку надо не только отловить, но и перезапустить обработчик:
Код
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