Manipuladores de erro para Excel Macros

manipuladores de erro

permitem especificar o que acontece quando um erro é encontrado durante o seu código de macro Excel é executado. manipuladores de erro são linhas semelhantes ao seguinte:

On Error GoTo MyError

Sem manipuladores de erro, qualquer erro que ocorre em seu código irá pedir Excel para ativar uma mensagem de erro menos do que útil, que normalmente não irá transmitir claramente o que aconteceu. No entanto, com a ajuda de manipuladores de erro, você pode optar por ignorar o erro ou sair do código graciosamente com sua própria mensagem para o usuário.

Existem três tipos de declarações de erro em:

  • On Error GoTo SomeLabel: O código pula para o rótulo especificado.

  • On Error Resume Next: O erro é ignorado e o código será retomada.

  • Em GoTo erro 0: VBA repõe a um comportamento de verificação de erros normal.

On Error GoTo SomeLabel

Às vezes, um erro no seu código significa que você precisa para sair normalmente o processo e dar a seus usuários uma mensagem clara. Nessas situações, você pode usar o On Error instrução GoTo para dizer Excel para saltar para uma determinada linha de código.

Por exemplo, na seguinte pequeno pedaço de código, você dizer Excel para dividir o valor na célula A1 pelo valor na célula A2 e, em seguida, coloque a resposta na célula A3. Fácil. O que poderia dar errado?

Sub Macro1 () Range ( "A3"). Value = Range ( "A1"). Value / Range ( "A2"). ValueEnd Sub

Como se constata, dois grandes coisas podem dar errado. Se a célula A2 contém 0, você obtém uma divisão por 0 erro. Se a célula A2 contém um valor não numérico, você recebe um erro de incompatibilidade de tipo.

Para evitar uma mensagem de erro desagradável, você pode dizer Excel que On Error, você quer a execução de código para saltar para o rótulo chamado myExit.

No código a seguir, o rótulo myExit é seguido de uma mensagem para o usuário que dá conselhos amigáveis ​​em vez de uma mensagem de erro desagradável. Além disso, observe a linha Exit Sub antes do rótulo myExit, o que garante que o código simplesmente saída se nenhum erro for encontrado:

Sub Macro1 () On Error GoTo MyExitRange ( "A3") Value = Range ( "A1") Valor / Range ( "A2") ValueExit SubMyExit:... MsgBox "Por favor uso válido números não zeros" End Sub

On Error Resume Next

Às vezes, você quer Excel para ignorar um erro e simplesmente retomar a execução do código. Nessas situações, você pode usar o On Error Resume Next.

Por exemplo, o seguinte trecho de código é utilizado para excluir um arquivo chamado GhostFile.exe do diretório C: Temp. Depois que o arquivo é excluído, uma caixa de mensagem agradável informa ao usuário que o arquivo está desaparecido:

Sub Macro1 () Kill "C: Temp GhostFile.exe" MsgBox "O arquivo foi excluído." End Sub

O código funciona muito bem se há de fato um arquivo a ser excluído. Mas se por algum motivo o arquivo chamado GhostFile.exe não existe na unidade C: Temp, um erro é lançado.

Neste caso, você não se importa se o arquivo não está lá porque você estava indo para excluí-lo de qualquer maneira. Então você pode simplesmente ignorar o erro e seguir em frente com o código.

Ao utilizar o On Error Resume Next, o código é executado o seu curso ou não o arquivo de alvo existir:

Sub Macro1 () On Error Resume NextKill "C: Temp GhostFile.exe" MsgBox "O arquivo foi excluído." End Sub

Em GoTo erro 0

Ao usar certas declarações de erro, pode ser necessário redefinir o comportamento de verificação de erros de VBA. Para entender o que isso significa, dê uma olhada no próximo exemplo.

Aqui, você primeiro quer apagar um arquivo chamado GhostFile.exe do diretório C: Temp. Para evitar erros que possam decorrem do fato de que o arquivo alvo não existe, você usa o On Error Resume Next. Depois disso, você tenta fazer alguma matemática suspeito dividindo 100 / Mike:

Sub Macro1 () On Error Resume NextKill "C: Temp GhostFile.exe" Range ( "A3") Value = 100 / "Mike" End Sub.

A execução deste pedaço de código deve gerar um erro devido à matemática difusa, mas isso não acontece. Por quê? Porque a última instrução que você deu para o código era On Error Resume Next. Qualquer erro encontrado após essa linha é efetivamente ignorado.

Para resolver esse problema, você pode usar o On Error GoTo 0 instrução para retomar o comportamento de verificação de erros normal:

Sub Macro1 () On Error Resume NextKill "C: Temp GhostFile.exe" On Error GoTo 0range ( "A3") Value = 100 / "Mike" End Sub.

Este código irá ignorar os erros até o On Error GoTo 0 instrução. Após essa declaração, o código de volta para a verificação de erros normal e dispara o erro esperado decorrente da matemática difusa.

menu