2015-04-07 4 views
0

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

Sub Runall() 
Call A 
Call B 
Call C 
Call D 
End sub 

Теперь, если есть ошибка в подпункте А я не хочу, чтобы запустить B, C, D и то же самое для B. Где должен я кладу обработчик ошибок? Я практически очень смущен, как вопрос использования выражения EXIT. Пожалуйста посоветуй.

+0

Возможная Дубликат [это] (http://stackoverflow.com/questions/14940697/первенствует-VBA-глобальная обработка ошибок). Можете ли вы проверить принятый ответ и посмотреть, работает ли он на вас? – Ioannis

ответ

1

Попробуйте

Sub Runall() 
    Call A 
    On Error GoTo Errhandler 
    Call B 
    On Error GoTo Errhandler 
    Call C 
    On Error GoTo Errhandler 
    Call D 
    On Error GoTo Errhandler 

' Exit the macro so that the error handler is not executed. 
Exit Sub 
    Errhandler: 
    ' If an error occurs, display a message and end the macro. 
    MsgBox "An error has occurred. The macro will end." 
End sub 
+0

Где я могу поместить обработчик ошибок. Извините, но я создаю некоторые новые листы, которые мне нужно удалить в случае каких-либо ошибок. Спасибо. – Jain

1

Вот как я бы это сделать.
Включить на On Error GoTo Handler: в вызывающем суб.

После этих сабвуферов вызвать ошибку On Error в will take over (becuase если к югу отсутствует обработчик ошибок, он будет пытаться использовать обработчик ошибок вызывающего суб) и с его GoTo это будет пропускать все, пока она видит Handler.

Следует помнить, что до Handler вам необходимо указать Exit Sub или VBA в Handler, независимо от того, есть ли у вас ошибка или нет.

Вот "failling" Пример:

Sub RunAll() 
    On Error GoTo Handler 
    Call A 
    Call B 
    Exit Sub 
Handler: 
     Debug.Print "testing" 
End Sub 

Sub A() 
    Dim fail As Integer 

    fail = 1/1 
End Sub 

В

Sub B() 
    Dim fail As Integer 

    fail = 1/0 
End Sub 
Смежные вопросы