VBA em declarações de erro - 3 principais maneiras de lidar com erros

Excel VBA na declaração de erro

A declaração VBA On Error é um tipo de mecanismo de tratamento de erros que é usado para guiar o código para fazer o que se ele encontrar qualquer tipo de erro, geralmente quando um código encontra um erro a execução para, mas com esta declaração no código a execução do o código continua como tem um conjunto de instruções para fazer quando encontra um erro.

Antecipar o erro no código torna você um profissional na codificação VBA. Você não pode tornar o código 100% eficiente. Mesmo se você estiver confiante sobre seu código de uma forma ou de outra, pode ocorrer um erro.

É uma tarefa quase impossível identificar e lidar com todo tipo de erro, mas temos diferentes maneiras de lidar com um erro no VBA. Ao escrever o código, você pode não antecipar o tipo de erro que o código pode surgir, mas se ocorrer algum erro, você gastará mais tempo depurando do que escrevendo o próprio código.

O que é um erro?

Um erro nada mais é do que uma linha de código que não pode ser executada por causa da funcionalidade ou do código errado. Portanto, tente antecipar o erro e resolvê-lo.

Por exemplo, se você tentar excluir a planilha que não está lá, obviamente não podemos executar essa linha de código.

Um erro é de três tipos, um é o erro compilado devido a variáveis ​​não declaradas. O segundo é um erro de entrada de dados devido a entradas erradas pelo codificador, e o terceiro é um erro de tempo de execução devido ao VBA não reconhecer a linha de código. Para tentar acessar ou trabalhar em uma planilha ou pasta de trabalho, que não está lá.

Mas temos uma instrução em VBA para lidar com todos esses tipos de erros, ou seja, a instrução “On Error”.

Tipos de declarações de erro

O ponto principal para lidar com erros no VBA é a declaração “On Error”. Por exemplo, Em caso de erro, “retomar a próxima linha”, “ir para ou pular para outra linha”, etc.…

A declaração On Error tem três tipos de declarações.

  1. GoTo 0 significa que sempre que ocorrer um erro de tempo de execução, o Excel ou VBA deve exibir a caixa de mensagem de erro informando o tipo de erro encontrado. Assim que o VBA executa o código, ele desabilita todos os manipuladores de erros naquele bloco específico do código.
  2. Resume Next significa que sempre que o erro ocorrer, esta instrução instrui o excel a ignorar esse erro e passar para (continuar em seguida) a próxima linha de código sem exibir nenhuma mensagem de erro. Não significa que corrigirá o erro; em vez disso, ele apenas ignora o erro.
  3. GoTo (rótulo) significa que sempre que o VBA encontrar um erro, vá para o rótulo atribuído. Isso faz com que o código pule para a linha específica fornecida pelo codificador.

3 principais maneiras de lidar com erros em VBA

# 1 - Em caso de erro, continuar próximo

Suponha que você esteja dividindo o valor de 20 por 0 e tenha declarado a variável para atribuir o resultado da divisão a ela.

Código:

Sub OnError_Example1 () Dim i As Integer i = 20/0 End Sub

Se você executar este código, ele gerará o erro abaixo.

Portanto, você não pode dividir qualquer número por valor zero. O número do erro de tempo de execução é 11, ou seja, divisão por zero.

Agora vou adicionar mais uma linha ao código.

Código:

Sub OnError_Example1 () Dim i As Integer, j As Integer i = 20/0 j = 20/2 End Sub

Agora vou adicionar a instrução On error resume a próxima no topo.

Código:

Sub OnError_Example1 () Dim i As Integer, j As Integer On Error Resume Next i = 20/0 j = 20/2 End Sub

Agora, se eu executar este código, ele não me dará nenhuma mensagem de erro; em vez disso, ele executará a próxima linha de código, ou seja, j = 20/2.

# 2 - Em erro GoTo Label

Eu declarei três variáveis.

Código:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer

Para todas essas três variáveis, atribuirei um cálculo de divisão.

Código:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5

O resultado de todos esses três cálculos será mostrado na caixa de mensagem.

Código:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5 MsgBox "O valor de i é" & i & vbNewLine & "O valor de j é "& j & _ vbNewLine &" O valor de k é "& k & vbNewLine End Sub

Agora tentarei executar este código, pois o cálculo de “I” não é adequado. Obteremos o erro de tempo de execução 11.

Agora adicionarei a declaração “On Error Resume Next”.

Código:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error Resume Next i = 20/0 j = 20/2 k = 10/5 MsgBox "O valor de i é" & i & vbNewLine & "O o valor de j é "& j & _ vbNewLine &" O valor de k é "& k & vbNewLine End Sub

Se eu executar isso, ele ignorará o cálculo “I” e executará os dois cálculos restantes, e o resultado é o seguinte.

Agora, em vez de "On Error Resume Next", adicionarei "On Error GoTo KCalculation".

Código:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error GoTo KCalculation: i = 20/0 j = 20/2 KCalculation: k = 10/5 MsgBox "O valor de i is" & i & vbNewLine & "O valor de j é" & j & _ vbNewLine & "O valor de k é" & k & vbNewLine End Sub
Nota: Aqui, “KCalculation” é o nome do rótulo que eu dei; você pode dar seu próprio nome de etiqueta sem nenhum espaço.

Agora, se eu executar esta linha de código, ela não pulará para a próxima linha. Em vez disso, ele irá pular para o nome do rótulo que eu inseri, ou seja, “KCalcualtion”. Aqui ele irá ignorar o erro dado por “I,” e também, não executará o cálculo de “j”, mas imediatamente salta para “KCalcualtion.”

# 3 - Número do erro de impressão em VBA

No final do código, também podemos imprimir o número do erro em uma caixa de mensagem separada. A linha de código a seguir fará esse trabalho.

Código:

Err.Number

Agora irei executar este código, a primeira caixa de mensagem mostrará os resultados do cálculo.

Clique em OK. Ele mostrará mais uma caixa de mensagem para mostrar o número do erro.

Vamos 11; como resultado, ou seja, divisão por zero.

Também podemos obter a descrição do erro em vez do número. Só precisamos mudar o código. Abaixo está o código.

Código:

Err.Description

Ele mostrará uma descrição como esta.

Coisas para lembrar

  • Depois de inserir “On Error Resume Next” no final do código, não se esqueça de adicionar a declaração “On Error GoTo 0.”
  • O nome do rótulo deve ser o mesmo em ambos os lugares.
  • Os nomes dos rótulos não precisam ser definidos com antecedência.
  • No final, sempre veja qual foi o erro ocorrido através da caixa de mensagem separada.

Artigos interessantes...