Как завершить выполнение процедуры (метода объекта) из вложенной в неё процедуры (метода) - 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