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.