Как завершить выполнение процедуры (метода объекта) из вложенной в неё процедуры (метода) - VB

Узнай цену своей работы

Формулировка задачи:

Приветствую Уважаемый All!
Пишу в 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5
Похожие ответы