Отмена дочерней подпрограммы с помощью обработки ошибок из родительской подпрограммы - PullRequest
0 голосов
/ 16 мая 2019

Справочная информация:

Я пытаюсь спланировать, как автоматизировать задачу, и ожидаю использовать несколько частных подпрограмм или функций из другой подпрограммы.Я буду использовать язык parent-child, чтобы попытаться сохранить правильность.

Родительская подпрограмма - это та, которая вызывает каждого из потомков.

Дочерние подпрограммы (children) будут вызываться по порядкучтобы выполнить их код.

Я пытаюсь определить, могу ли я иметь обработку ошибок в родительском элементе, чтобы выйти из sub для дочернего элемента и перейти к следующему дочернему элементу.

Несмотря на пример кода, я будуИспользование - это очень простой пример простого добавления 1 к i, запланированный код будет более сложным, когда resume next будет недостаточно (не то, что игнорирование ошибки является «хорошей» практикой).


Проблема:

Мне не повезло в поиске, если существует существующий on error для выхода из текущего потомка и перехода к следующему, где у меня есть только моя строка on errorв родительском.


Вопрос:

Есть ли способ выйти из подпрограммы текущего дочернего элемента на основе оператора обработки ошибок в родительской подпрограмме?Или я должен просто придерживаться обработки ошибок у каждого ребенка?


Код вопроса:

Дать грубый пример того, о чем я думаю;это не рабочий код.

Option Explicit
Public i As Long

Sub fdsa()
    on error ' exit called subroutine
    a
    s
    d
    f
    MsgBox i
End Sub

Private Sub a()
    i = i + 1
End Sub

Private Sub s()
    i = i + 1
End Sub

Private Sub d()
    i = i + 1 / 0
End Sub

Private Sub f()
    i = i + 1
End Sub

Окно сообщения выдаст «3» после завершения родительского элемента.

1 Ответ

1 голос
/ 16 мая 2019

Если у дочерних подпрограмм нет обработчика ошибок, то любые ошибки будут переданы обратно родителю, после чего вы можете продолжить со следующей.Все, что вам нужно - это возобновить сообщение об ошибке здесь:

Sub fdsa()
    on error resume next
    a
    s
    d
    f
    MsgBox i
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...