2017-01-11 10 views
0

У меня есть вопрос о On Error GoTo. У меня есть эта строка кодаОб ошибке goto внутри if, реагирует ли она на любую ошибку на sub?

If CheckF = 0 Then 
     On Error GoTo Error_handler 
     .PivotItems(.PivotItems(pivotcount).name).Visible = False 


    End If 

Мой вопрос заключается в том, что если у меня есть ошибка за пределами этого if это спусковой крючок On Error все равно

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

Надеюсь, я объяснил сам.

ответ

3

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

If CheckF = 0 Then 
    On Error GoTo Error_handler 
    .PivotItems(.PivotItems(pivotcount).name).Visible = False 
    On Error GoTo 0 
End If 
+0

Если я это сделаю, а триггеры 'Error_handler'' On Error Goto 0' не будут активированы правильно? – VVV

+1

'On Error GoTo 0' отключает любую обработку ошибок. VBA просто остановится на линии, где встречается ошибка (как это обычно бывает). Вы можете сделать это в 'Error_handler', но это неправильный способ сделать это. В 'Error_handler' вы должны использовать' Resume' или перейти на другую метку. Хорошей практикой является либо включить обработку ошибок для всего суб и обработать все ошибки, либо включить или отключить обработку ошибок «на том же уровне», как и в моем примере выше. –

+0

Похоже, что в документе [On Error Statement] (http://stackoverflow.com/documentation/vba/3211/error-handling#t=201701111543262206472) необходимо упомянуть об этом :-) –

0

Только в том случае, если выполнено условие if. С помощью On Error GoTo 0 вы можете отключить обработчик ошибок в конце if-предложения.

+0

вы можете немного его разработать? Я не понимаю, как это работает – VVV