Как завершить выполнение процедуры (метода объекта) из вложенной в неё процедуры (метода) - VB
Формулировка задачи:
Приветствую Уважаемый All!
Пишу в VBA пользовательский класс, и вот такой вопрос возник.
У класса есть такие методы:
т.е. вызов метода A объекта, приводит к вызову метода D "хрен-знает-какой" вложенности - A->B->C->D.
Дальше, в методе D, я определяю, что данные некорректны, и дальнейшее выполнение не имеет смысла.
И теперь вопрос:
Или, например, по какому-то условию в D, процесс перешёл в метод KillMe (где я обнулю всё что нужно и "скажу" пользователю, всё что о нём думаю), и уже "назад не вернулся"?
Пишу в VBA пользовательский класс, и вот такой вопрос возник.
У класса есть такие методы:
т.е. вызов метода A объекта, приводит к вызову метода D "хрен-знает-какой" вложенности - A->B->C->D.
Дальше, в методе D, я определяю, что данные некорректны, и дальнейшее выполнение не имеет смысла.
И теперь вопрос:
можно ли как-то, в методе D, "погасить" весь процесс (всю "цепочку" вызова A->B->C->D), БЕЗ ВОЗВРАТА в те процедуры-методы, из которых он вызван?
Или, например, по какому-то условию в D, процесс перешёл в метод KillMe (где я обнулю всё что нужно и "скажу" пользователю, всё что о нём думаю), и уже "назад не вернулся"?
Решение задачи: «Как завершить выполнение процедуры (метода объекта) из вложенной в неё процедуры (метода)»
textual
Листинг программы
Option Compare Database Option Explicit Const vbMyDataError = vbObjectError + 1 Sub D() On Error GoTo Err_ Err.Raise vbMyDataError Exit_: Exit Sub Err_: Select Case Err.Number Case vbMyDataError: Debug.Print "D", Err.Number Err.Raise vbMyDataError Case Else MsgBox Err.Description, vbCritical Resume Exit_ End Select End Sub Sub C() On Error GoTo Err_ Call D Exit_: Exit Sub Err_: Select Case Err.Number Case vbMyDataError: Debug.Print "C", Err.Number Err.Raise vbMyDataError Case Else MsgBox Err.Description, vbCritical Resume Exit_ End Select End Sub Sub B() On Error GoTo Err_ Call C Exit_: Exit Sub Err_: Select Case Err.Number Case vbMyDataError: Debug.Print "B", Err.Number Err.Raise vbMyDataError Case Else MsgBox Err.Description, vbCritical Resume Exit_ End Select End Sub Sub A() On Error GoTo Err_ Call B Exit_: Exit Sub Err_: Select Case Err.Number Case vbMyDataError: Debug.Print "A", Err.Number MsgBox "!" Case Else MsgBox Err.Description, vbCritical Resume Exit_ End Select End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д