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

Вход

Регистрация

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

 

= Мир MS Excel/Использование ON ERROR - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Использование ON ERROR (Макросы/Sub)
Использование ON ERROR
Sashagor1982 Дата: Среда, 07.06.2017, 20:28 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте, подскажите, как предать управление подпрограмме в случае обработки ошибок без использования GoTo?
[vba]
Код
Sub Пробирка()
On Error GoTo error1
    y = 5 / 0
    Call Чебубели
error1: Call Чебубели
End Sub
Private Sub Чебубели()
    MsgBox "Работает"
End Sub
[/vba]
 
Ответить
СообщениеЗдравствуйте, подскажите, как предать управление подпрограмме в случае обработки ошибок без использования GoTo?
[vba]
Код
Sub Пробирка()
On Error GoTo error1
    y = 5 / 0
    Call Чебубели
error1: Call Чебубели
End Sub
Private Sub Чебубели()
    MsgBox "Работает"
End Sub
[/vba]

Автор - Sashagor1982
Дата добавления - 07.06.2017 в 20:28
AndreTM Дата: Среда, 07.06.2017, 20:40 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Если обрабатывать именно с помощью ON ERROR - то никак :)
GoTo здесь - часть синтаксиса вызова обработчика ошибок, а не "безусловный переход".

И почему у вас процедура обработки ошибки не завершается оператором Resume?

Ну или
[vba]
Код
Sub Пробирка()
    On Error GoTo errorHandler
    y = 5 / 0
    On Error GoTo 0
    MsgBox "Ошибки нет"
    Exit Sub
errorHandler:
    MsgBox "Ошибка " & err.description
End Sub
[/vba]

Вообще, в хелпе по On Error нормально показано, как можно использовать обработчик.

[offtop]Да, спешка не доводит до добра - учту замечания :)[/offtop]


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Четверг, 08.06.2017, 03:22
 
Ответить
СообщениеЕсли обрабатывать именно с помощью ON ERROR - то никак :)
GoTo здесь - часть синтаксиса вызова обработчика ошибок, а не "безусловный переход".

И почему у вас процедура обработки ошибки не завершается оператором Resume?

Ну или
[vba]
Код
Sub Пробирка()
    On Error GoTo errorHandler
    y = 5 / 0
    On Error GoTo 0
    MsgBox "Ошибки нет"
    Exit Sub
errorHandler:
    MsgBox "Ошибка " & err.description
End Sub
[/vba]

Вообще, в хелпе по On Error нормально показано, как можно использовать обработчик.

[offtop]Да, спешка не доводит до добра - учту замечания :)[/offtop]

Автор - AndreTM
Дата добавления - 07.06.2017 в 20:40
RAN Дата: Среда, 07.06.2017, 20:47 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
не завершается вызовом RESUME

Андрей, ты с GO SUB не попутал?
Виноват, сам попутал.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Среда, 07.06.2017, 22:54
 
Ответить
Сообщение
не завершается вызовом RESUME

Андрей, ты с GO SUB не попутал?
Виноват, сам попутал.

Автор - RAN
Дата добавления - 07.06.2017 в 20:47
Udik Дата: Среда, 07.06.2017, 20:49 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
и перед error1 нужен выход из подпрограммы. Иначе обработчик всегда будет срабатывать. Чёт не увидел сравзу :p


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Среда, 07.06.2017, 20:52
 
Ответить
Сообщениеи перед error1 нужен выход из подпрограммы. Иначе обработчик всегда будет срабатывать. Чёт не увидел сравзу :p

Автор - Udik
Дата добавления - 07.06.2017 в 20:49
_Boroda_ Дата: Среда, 07.06.2017, 22:06 | Сообщение № 5
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
MsgBox "Ошибки нет"
End Sub
errorHandler:
MsgBox "Ошибка " & Error(err.number)
End Sub

Андрей, ты наверное первый End Sub хотел написать Exit Sub?
предать управление подпрограмме в случае обработки ошибок без использования GoTo

Можно такой вариант, но он ничем не лучше
[vba]
Код
Sub tt()
    On Error Resume Next
    y = 5 / 0
    If Err.Number Then
        Чебубели
    End If
    On Error GoTo 0
End Sub

Sub Чебубели()
    MsgBox "Не работает"
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
MsgBox "Ошибки нет"
End Sub
errorHandler:
MsgBox "Ошибка " & Error(err.number)
End Sub

Андрей, ты наверное первый End Sub хотел написать Exit Sub?
предать управление подпрограмме в случае обработки ошибок без использования GoTo

Можно такой вариант, но он ничем не лучше
[vba]
Код
Sub tt()
    On Error Resume Next
    y = 5 / 0
    If Err.Number Then
        Чебубели
    End If
    On Error GoTo 0
End Sub

Sub Чебубели()
    MsgBox "Не работает"
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 07.06.2017 в 22:06
Sashagor1982 Дата: Среда, 07.06.2017, 22:34 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Суть вопроса в том, что бы не использовать goto и метки, как в случае ошибки передать управление подпрограмме без goto?
 
Ответить
СообщениеСуть вопроса в том, что бы не использовать goto и метки, как в случае ошибки передать управление подпрограмме без goto?

Автор - Sashagor1982
Дата добавления - 07.06.2017 в 22:34
RAN Дата: Среда, 07.06.2017, 22:51 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub Пробирка()
    On Error Resume Next
    y = 5 / 0
    If Err Then GoSub errorHandler
    MsgBox "Ошибки нет"
    Exit Sub
errorHandler:
    MsgBox "Ошибка " & Error(Err.Number)
    Err.Clear
End Sub
[/vba]
И никаких goto. :)


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Sub Пробирка()
    On Error Resume Next
    y = 5 / 0
    If Err Then GoSub errorHandler
    MsgBox "Ошибки нет"
    Exit Sub
errorHandler:
    MsgBox "Ошибка " & Error(Err.Number)
    Err.Clear
End Sub
[/vba]
И никаких goto. :)

Автор - RAN
Дата добавления - 07.06.2017 в 22:51
_Boroda_ Дата: Среда, 07.06.2017, 23:01 | Сообщение № 8
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
как в случае ошибки передать управление подпрограмме без goto?

Я ж Вам написал в посте выше
On Error Resume Next
y = 5 / 0
If Err.Number Then
А
[vba]
Код
On Error GoTo 0
[/vba]из того кода можете и не писать.
Почитайте вот здесь про On Error
https://msdn.microsoft.com/ru-ru/library/office/gg251688.aspx


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
как в случае ошибки передать управление подпрограмме без goto?

Я ж Вам написал в посте выше
On Error Resume Next
y = 5 / 0
If Err.Number Then
А
[vba]
Код
On Error GoTo 0
[/vba]из того кода можете и не писать.
Почитайте вот здесь про On Error
https://msdn.microsoft.com/ru-ru/library/office/gg251688.aspx

Автор - _Boroda_
Дата добавления - 07.06.2017 в 23:01
AndreTM Дата: Четверг, 08.06.2017, 03:16 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Вообще, нужно просто понимать, что On Error - это перехват управления событием "возникла ошибка".
А то, что пишется после слов "on error" - это синтаксис назначения обработчика эвента. М то, что там есть слово "goto" - отнюдь не означает какого-либо "перехода куда-то и насовсем" :)

Александр дал же ссылку - если поразбираться, то все достаточно просто и понятно.


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеВообще, нужно просто понимать, что On Error - это перехват управления событием "возникла ошибка".
А то, что пишется после слов "on error" - это синтаксис назначения обработчика эвента. М то, что там есть слово "goto" - отнюдь не означает какого-либо "перехода куда-то и насовсем" :)

Александр дал же ссылку - если поразбираться, то все достаточно просто и понятно.

Автор - AndreTM
Дата добавления - 08.06.2017 в 03:16
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Использование ON ERROR (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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