Índice:
Vídeo: On Error GoTo, On Error Resume Next, and GoTo 0 in Excel VBA - Code Included 2025
Quando você precisa lidar com erros no Excel VBA, você pode usar a declaração OnError. No entanto, há algumas coisas que você precisa saber primeiro. Você pode usar a instrução On Error de três maneiras.
Sintaxe | O que faz |
---|---|
No erro IrTo rótulo | Depois de executar esta declaração, o VBA retoma a execução na instrução
seguindo o rótulo especificado. Você deve incluir um cólon após o rótulo para que o VBA o reconheça como um rótulo. |
On Error GoTo 0 | Depois de executar esta declaração, o VBA retoma seu comportamento normal de verificação de erro
. Use esta declaração depois de usar uma das outras instruções On Error ou quando quiser remover o tratamento de erros no seu procedimento. |
Em Error Resume Next | Depois de executar esta declaração, o VBA simplesmente ignora todos os erros
e retoma a execução com a próxima declaração. |
Retomando depois de um erro
Em alguns casos, você simplesmente quer que a rotina finalize graciosamente quando ocorre um erro. Por exemplo, você pode exibir uma mensagem descrevendo o erro e sair do procedimento. (O exemplo EnterSquareRoot5 mostrado anteriormente usa essa técnica). Em outros casos, você deseja se recuperar do erro, se possível.
Para recuperar de um erro, você deve usar uma declaração Resume. Isso limpa a condição de erro e permite que você continue a execução em algum local. Você pode usar a declaração do resumo de três maneiras.
Sintaxe | O que faz |
---|---|
Resumo | Execução retoma com a declaração que causou o erro. Use
isto se o seu código de tratamento de erros corrigir o problema e é bom continuar. |
Resumo Em seguida | Execução retoma-se com a instrução imediatamente após a declaração
que causou o erro. Isso essencialmente ignora o erro . |
Resumo rótulo | Execução retoma na etiqueta que você especifica. |
O exemplo a seguir usa uma instrução Resume após ocorrer um erro:
Sub EnterSquareRoot6 () Dim Num como Variant Dim Msg As String Dim Ans Como Inteiro TryAgain: 'Configurar o tratamento de erros Em Error GoTo BadEntry 'Solicitar um valor Num = InputBox ("Enter a value") Se Num = "" Then Exit Sub' Insira a raiz quadrada ActiveCell. Valor = Sqr (Num) Sair Sub BadEntry: Msg = Err. Número & ":" & Erro (número de erro) Msg = Msg & vbNewLine & vbNewLine Msg = Msg & "Certifique-se de que um intervalo esteja selecionado," Msg = Msg & "a folha não está protegida," Msg = Msg & "e você insere um valor não negativo. "Msg = Msg & vbNewLine & vbNewLine &" Tente novamente? "Ans = MsgBox (Msg, vbYesNo + vbCritical) Se Ans = vBYes então Resume TryAgain End Sub
Este procedimento possui outro rótulo: TryAgain.Se ocorrer um erro, a execução continua no rótulo BadEntry e o código exibe a mensagem abaixo. Se o usuário responder clicando em Sim, a instrução Resume é iniciada e a execução salta para o rótulo TryAgain. Se o usuário clicar em Não, o procedimento termina.
Observe que a mensagem de erro também inclui o número de erro, juntamente com a descrição de erro "oficial".
A declaração Resume limpa a condição de erro antes de continuar. Para ver isso, tente substituir a seguinte instrução pela declaração de segundo a último no exemplo anterior:
Se Ans = vbYes Então, GoTo TryAgain
O código não funciona corretamente se você usar GoTo em vez de Resume. Para demonstrar, insira um número negativo. Você recebe o prompt de erro. Clique em Sim para tentar novamente e, em seguida, insira outro número negativo . Este segundo erro não está preso porque a condição de erro original não foi apagada.
Gerenciamento de erros em poucas palavras
Para ajudá-lo a manter todo este negócio de tratamento de erros em linha reta, aqui está um resumo rápido e sujo. Um bloco de código de tratamento de erros tem as seguintes características:
-
Começa imediatamente após o rótulo especificado na instrução On Error.
-
Ele deve ser alcançado pela sua macro somente se ocorrer um erro. Isso significa que você deve usar uma declaração como Exit Sub ou Exit Function imediatamente antes do rótulo.
-
Pode exigir uma declaração de resumo. Se você optar por não abortar o procedimento quando ocorrer um erro, você deve executar uma declaração de resumo antes de retornar ao código principal.
Sabendo quando ignorar erros
Em alguns casos, é perfeitamente bom ignorar erros. É quando a instrução On Error Resume Next entra em jogo.
O exemplo a seguir passa por cada célula no intervalo selecionado e converte o valor em sua raiz quadrada. Este procedimento gera uma mensagem de erro se qualquer célula na seleção contiver um número ou texto negativo:
Sub SelectionSqrt () Dim cell As Range If TypeName (Seleção) <> "range" Então, Exit Sub para cada célula Na célula de seleção. Valor = Sqr (célula. Valor) Próxima célula End Sub
Neste caso, você pode simplesmente ignorar qualquer célula que contenha um valor que não pode converter em uma raiz quadrada. Você pode criar todos os tipos de verificação de erros usando as estruturas If-Then, mas você pode criar uma solução melhor (e mais simples) simplesmente ignorando os erros que ocorrem.
A seguinte rotina faz isso usando a instrução On Error Resume Next:
Sub SelectionSqrt () Dim cell As Range If TypeName (Seleção) <> "range" Então Exit Sub On Error Resume Next Para cada célula em Selection célula. Valor = Sqr (célula. Valor) Próxima célula End Sub
Em geral, você pode usar uma declaração On Error Resume Next se considerar que os erros são inofensivos ou inconsequentes para sua tarefa.
