VBA em erro, retomar próximo ou ir para 0

Este tutorial explicará o VBA On Error Resume Next e a instrução Goto.

Mesmo quando seu código está perfeitamente construído, o usuário pode não fazer o que você esperava. Por esse motivo, você precisa inserir manipuladores de erro em seu código sempre que houver um motivo para a ocorrência de um erro.

On Error Resume Next

A instrução On Error Resume Next informa ao VBA para pular quaisquer linhas de código que contenham erros e prosseguir para a próxima linha. O VBA irá ignorar a linha ou linhas com um erro e moverá para a próxima linha de código.

Isso é útil quando a linha de código que pode ser ignorada não é crítica para a execução bem-sucedida da macro, mas pode ser muito perigosa se usada incorretamente, pois pode fornecer resultados não intencionais.

Por exemplo, no procedimento abaixo:

123456 Sub HideAllSheets ()Dim ws como planilhaPara cada ws em ActiveWorkbook.Sheetsws.Visible = FalsePróximo wsEnd Sub

Se executarmos este código, obteremos um erro, pois não podemos ocultar todas as planilhas em uma pasta de trabalho - pelo menos uma pasta de trabalho deve permanecer visível.

No entanto, se alterarmos o procedimento conforme mostrado abaixo, o código continuará após o erro e deixará a última planilha da pasta de trabalho visível.

1234567 Sub HideAllSheets ()On Error Resume NextDim ws como planilhaPara cada ws em ActiveWorkbook.Sheetsws.Visible = FalsePróximo wsEnd Sub

No erro GoTo 0

Se não tivermos um manipulador de erros em nosso código, No erro, vá para 0 é a configuração padrão do Excel. Isso basicamente significa que quando ocorre um erro com No erro GoTo 0, O VBA interromperá a execução do código e exibirá sua caixa de mensagem de erro padrão, por exemplo:

Se colocamos uma armadilha de erro como On Error Resume Next em nosso código, mas se quisermos redefinir o erro para o padrão, podemos inserir um No erro, vá para 0 linha em nosso código.

12345678910 Sub ErrorGoTo0 ()On Error Resume NextDim ws como planilhaPara cada ws em ActiveWorkbook.Sheetsws.Visible = FalsePróximo wsNo erro GoTo 0'Execute mais código aqui, por exemplo:ActiveSheet.Name = "Planilha1"End Sub

Agora, se houvesse algum erro em nosso código após o No erro, vá para 0 linha, a mensagem de erro padrão do Excel ocorreria. Neste exemplo, já temos uma folha chamada Sheet1 no ActiveWorkbook como o código acima do No erro, vá para 0 oculta a planilha, mas não a exclui. A mensagem de erro padrão do Excel indicando que o nome da planilha já foi usado seria exibida.

Em caso de erro, vá para Linha

Também podemos forçar nosso código a passar para uma linha diferente de código usando o No erro, vá para Linha que diz ao VBA para ir para uma linha de código específica se ocorrer um erro.

123456789101112 Sub ErrorGoToLine ()On Error Resume NextDim ws como planilhaPara cada ws em ActiveWorkbook.Sheetsws.Visible = FalsePróximo wsOn Error GoTo errhandlerActiveSheet.Name = "Planilha1"Sair do Suberrhandler:MsgBox ("Já existe uma planilha chamada planilha1!", VbCritical)End Sub

No exemplo acima, quando o código encontra a planilha “Plan1”, ele se move para a linha de código abaixo do rótulo do manipulador de erros - neste caso, ele chama uma caixa de mensagem personalizada informando aos usuários que a planilha já existe. O rótulo do manipulador de erros deve ter dois pontos após ele para mostrar ao VBA que é um rótulo.

1 errhandler:

O código irá então pular para a linha abaixo do rótulo e retornar a caixa de mensagem personalizada.

Isso é útil quando você não deseja que o usuário clique em Depurar para acessar seu código, pois a mensagem padrão do Excel sempre oferece a opção de Depurar o código.

Nós também precisamos de um Sair do Sub no procedimento. Se houver NÃO uma planilha chamada Plan1, então essa linha de código seria executada e renomearia a planilha ativa para Plan1. Em seguida, queremos que o código termine - não queremos que ele prossiga para o manipulador de erros e mostre a caixa de mensagem. A linha Exit Sub sai do procedimento e interrompe o código.

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave