{"id":47,"date":"2023-11-18T02:08:34","date_gmt":"2023-11-18T02:08:34","guid":{"rendered":"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/"},"modified":"2023-12-06T11:51:35","modified_gmt":"2023-12-06T11:51:35","slug":"manipulacao-de-erros","status":"publish","type":"page","link":"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/","title":{"rendered":"Tipos de erros vba: depura\u00e7\u00e3o e solu\u00e7\u00e3o"},"content":{"rendered":"<div class=\"excel-before-content-2\" id=\"excel-2597325796\"><script type=\"text\/javascript\">\r\n\tatOptions = {\r\n\t\t'key' : 'c1158f160081d6540a8409e6925dab94',\r\n\t\t'format' : 'iframe',\r\n\t\t'height' : 250,\r\n\t\t'width' : 300,\r\n\t\t'params' : {}\r\n\t};\r\n<\/script>\r\n<script type=\"text\/javascript\" src=\"\/\/www.highperformanceformat.com\/c1158f160081d6540a8409e6925dab94\/invoke.js\"><\/script><\/div><div class=\"excel-before-content\" id=\"excel-2711296736\"><script type=\"text\/javascript\">\r\n\tatOptions = {\r\n\t\t'key' : 'c1158f160081d6540a8409e6925dab94',\r\n\t\t'format' : 'iframe',\r\n\t\t'height' : 250,\r\n\t\t'width' : 300,\r\n\t\t'params' : {}\r\n\t};\r\n<\/script>\r\n<script type=\"text\/javascript\" src=\"\/\/www.highperformanceformat.com\/c1158f160081d6540a8409e6925dab94\/invoke.js\"><\/script><\/div> <p>Como qualquer outra linguagem de programa\u00e7\u00e3o, o VBA n\u00e3o tem sorte quando se trata de erros e voc\u00ea tem que lidar com eles de qualquer maneira. Eles podem vir de diferentes fontes, como codifica\u00e7\u00e3o incorreta, opera\u00e7\u00f5es imposs\u00edveis (como dividir por zero) ou erros inesperados.<\/p><p> A melhor maneira de lidar com isso \u00e9 ter um bom entendimento de todos os resultados poss\u00edveis que voc\u00ea pode alcan\u00e7ar com o c\u00f3digo. Veja o exemplo abaixo onde temos um c\u00f3digo VBA que calcula a raiz quadrada do n\u00famero usando o valor que voc\u00ea tem na c\u00e9lula selecionada.<\/p><pre class=\"wp-block-code\"> <code class=\"language-visual-basic\" lang=\"visual-basic\">Sub Square_Root() ActiveCell. <strong>Value<\/strong> = ActiveCell. <strong>Value<\/strong> ^ (1 \/ 2) <strong>End<\/strong> Sub<\/code><\/pre><p> Mas se a c\u00e9lula ativa tiver um valor diferente de um n\u00famero, voc\u00ea receber\u00e1 um erro de tempo de execu\u00e7\u00e3o, como abaixo. <\/p><div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-58225\" src=\"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/01-erreur-dexecution.png\" sizes=\"auto, \" srcset=\"\" alt=\"erro de tempo de execu\u00e7\u00e3o\" width=\"531\" height=\"361\"><\/figure><\/div><h2 class=\"wp-block-heading\"> Par\u00e2metros de erro em VBA (captura de erros)<\/h2><p> Na op\u00e7\u00e3o VBA, voc\u00ea pode definir a configura\u00e7\u00e3o para lidar com erros antes de come\u00e7ar a escrever c\u00f3digos. Para abrir as configura\u00e7\u00f5es do VBA, v\u00e1 para Ferramentas \u27a4 Op\u00e7\u00f5es \u27a4 Geral \u27a4 Captura de erros. Aqui voc\u00ea tem tr\u00eas op\u00e7\u00f5es que pode usar. <\/p><div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-58226\" src=\"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/02-parametres-derreur-dans-vba.png\" sizes=\"auto, \" srcset=\"\" alt=\"\" width=\"532\" height=\"336\"><\/figure><\/div><ul><li> <strong>Parar em todos os erros<\/strong> : se voc\u00ea tiver habilitado esta op\u00e7\u00e3o, o VBA interromper\u00e1 o c\u00f3digo para todos os tipos de erros, mesmo se voc\u00ea tiver usado todos os tipos de t\u00e9cnicas de tratamento de erros.<\/li><li> <strong>M\u00f3dulo de Classe de Adultera\u00e7\u00e3o<\/strong> : Com esta op\u00e7\u00e3o, o VBA ir\u00e1 parar todos os seus c\u00f3digos que n\u00e3o s\u00e3o tratados por nenhuma t\u00e9cnica. E se voc\u00ea usar objetos como Userforms, ele tamb\u00e9m ir\u00e1 quebrar esses objetos e destacar a linha exata onde est\u00e1 o erro.<\/li><li> <strong>Interromper erros n\u00e3o tratados<\/strong> : esta \u00e9 a configura\u00e7\u00e3o padr\u00e3o que ajuda voc\u00ea a saber sobre todos os erros para os quais voc\u00ea n\u00e3o est\u00e1 usando nenhuma t\u00e9cnica de tratamento de erros e interrompe o c\u00f3digo para todos os erros n\u00e3o tratados. (Mas, se voc\u00ea usar objetos como Userforms, isso n\u00e3o destacar\u00e1 a linha que est\u00e1 causando o erro no objeto, mas apenas destacar\u00e1 a linha que faz refer\u00eancia a esse objeto).<\/li><\/ul><h2 class=\"wp-block-heading\"> Tipos de erros VBA<\/h2><p> Para entender os erros do VBA, voc\u00ea pode dividi-los em quatro categorias, e abaixo est\u00e1 a explica\u00e7\u00e3o desses tipos de erros.<\/p><h3 class=\"wp-block-heading\"> 1. Erros de sintaxe<\/h3><p> Ao escrever o c\u00f3digo VBA, voc\u00ea deve seguir uma sintaxe espec\u00edfica e, ao ignor\u00e1-lo ou n\u00e3o escrev\u00ea-lo como deveria, poder\u00e1 enfrentar um erro de sintaxe (tamb\u00e9m conhecido como erro de linguagem). \u00c9 como erros de digita\u00e7\u00e3o que voc\u00ea comete ao escrever seus c\u00f3digos.<\/p><p> Bem, o VBA ajuda voc\u00ea relatando esses erros exibindo uma mensagem de erro. Voc\u00ea s\u00f3 precisa ter certeza de que \u201cVerifica\u00e7\u00e3o autom\u00e1tica de sintaxe\u201d est\u00e1 habilitado em seu editor VB.<\/p><p> V\u00e1 para Ferramenta \u27a4 Op\u00e7\u00f5es e certifique-se de marcar a caixa \u201cVerifica\u00e7\u00e3o autom\u00e1tica de sintaxe\u201d. Com isso, sempre que voc\u00ea cometer um erro de SINTAXE, o VBA exibir\u00e1 uma mensagem de erro. <\/p><div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-58227\" src=\"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/03-erreur-de-syntaxe.png\" sizes=\"auto, \" srcset=\"\" alt=\"\" width=\"533\" height=\"336\"><\/figure><\/div><p> Mas se a &#8220;Verifica\u00e7\u00e3o autom\u00e1tica de sintaxe&#8221; estiver desabilitada, o VBA ainda destacar\u00e1 a linha de c\u00f3digo com o erro, mas n\u00e3o exibir\u00e1 a mensagem de erro.<\/p><h3 class=\"wp-block-heading\"> 2. Erros de compila\u00e7\u00e3o<\/h3><p> Isso acontece quando voc\u00ea escreve c\u00f3digo para executar uma atividade, mas essa atividade \u00e9 inv\u00e1lida ou n\u00e3o pode ser executada pelo VBA. O melhor exemplo \u00e9 onde voc\u00ea tem algum c\u00f3digo usando a instru\u00e7\u00e3o IF, mas esqueceu de adicionar END IF no final da instru\u00e7\u00e3o e agora, ao executar este VBA, voc\u00ea mostra uma mensagem de erro de compila\u00e7\u00e3o. <\/p><div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-58228\" src=\"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/04-erreur-de-compilation.png\" sizes=\"auto, \" srcset=\"\" alt=\"\" width=\"500\" height=\"251\"><\/figure><\/div><p> Al\u00e9m disso, existem outros exemplos de erros de compila\u00e7\u00e3o:<\/p><ul><li> Usando For sem Next ( <a href=\"https:\/\/exceladvisor.org\/pt\/para-o-circuito\/\">For Next<\/a> ).<\/li><li> Selecione sem selecionar o final ( <a href=\"https:\/\/exceladvisor.org\/pt\/selecione-o-caso\/\">Select case<\/a> ).<\/li><li> N\u00e3o declare uma vari\u00e1vel quando voc\u00ea tiver habilitado a \u201c <a href=\"https:\/\/exceladvisor.org\/pt\/opcao-explicita-2\/\">Op\u00e7\u00e3o Expl\u00edcita<\/a> \u201d.<\/li><li> Chamando uma sub\/fun\u00e7\u00e3o que n\u00e3o existe.<\/li><\/ul><h3 class=\"wp-block-heading\"> 3. Erros de tempo de execu\u00e7\u00e3o<\/h3><p> Um erro de tempo de execu\u00e7\u00e3o ocorre quando o c\u00f3digo \u00e9 executado. Lembre-se do exemplo que compartilhei com voc\u00ea acima, quando o c\u00f3digo calculou a raiz quadrada de um n\u00famero. <\/p><div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-58229\" src=\"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/05-erreur-dexecution-lors-de-lexecution-du-code.png\" sizes=\"auto, \" srcset=\"\" alt=\"\" width=\"547\" height=\"372\"><\/figure><\/div><p> Quando ocorre um erro de tempo de execu\u00e7\u00e3o durante a execu\u00e7\u00e3o do c\u00f3digo, ele interrompe o c\u00f3digo e mostra a caixa de di\u00e1logo de erro e esta caixa de erro fala sobre a natureza do erro que voc\u00ea possui. Suponha que voc\u00ea escreveu um c\u00f3digo que <a href=\"https:\/\/exceladvisor.org\/pt\/arquivo-aberto\/\">abre uma pasta de trabalho<\/a> no local especificado, mas essa pasta de trabalho agora foi movida ou exclu\u00edda por algu\u00e9m. <\/p><div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-58178\" src=\"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/6-vba-affiche-une-erreur-dexecution.png\" sizes=\"auto, \" srcset=\"\" alt=\"\" width=\"452\" height=\"149\"><\/figure><\/div><p> Portanto, quando voc\u00ea executar o c\u00f3digo, o VBA mostrar\u00e1 um erro de tempo de execu\u00e7\u00e3o porque n\u00e3o consegue encontrar este arquivo neste local. A mensagem que voc\u00ea recebe em um erro de tempo de execu\u00e7\u00e3o descreve o motivo, o que ajuda a entender o motivo do erro. <\/p><div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-58179\" src=\"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/7-erreur-dexecution-1004.png\" sizes=\"auto, \" srcset=\"\" alt=\"\" width=\"381\" height=\"215\"><\/figure><\/div><p> E quando ocorre um erro de tempo de execu\u00e7\u00e3o, ele interrompe a execu\u00e7\u00e3o do c\u00f3digo. Se voc\u00ea clicar no bot\u00e3o \u201cDepurar\u201d, ele mostra a linha de c\u00f3digo que cont\u00e9m esse erro, destacando-a em amarelo. Ou voc\u00ea pode clicar no bot\u00e3o \u201cFinalizar\u201d para interromper a execu\u00e7\u00e3o do c\u00f3digo e fechar a mensagem de erro.<\/p><h3 class=\"wp-block-heading\"> 4. Erro l\u00f3gico<\/h3><p> Isto n\u00e3o \u00e9 um erro, mas um erro ao escrever o c\u00f3digo. \u00c0s vezes, esses tipos de erros podem causar problemas para localiz\u00e1-los e corrigi-los.<\/p><p> Suponha que voc\u00ea esteja escrevendo algum c\u00f3digo e, ao declarar uma vari\u00e1vel, use o <a href=\"https:\/\/exceladvisor.org\/pt\/variaveis\/\">tipo de dados<\/a> errado ou tenha usado as etapas de c\u00e1lculo erradas. Neste caso seu c\u00f3digo funcionar\u00e1 bem e voc\u00ea n\u00e3o encontrar\u00e1 esse erro facilmente. A melhor maneira de lidar com esse tipo de problema \u00e9 executar cada linha de c\u00f3digo, uma por uma.<\/p><h2 class=\"wp-block-heading\"> Usando ferramentas de depura\u00e7\u00e3o em VBA<\/h2><p> O VBA fornece um conjunto de ferramentas para depurar seu c\u00f3digo e remover bugs de seus c\u00f3digos.<\/p><h3 class=\"wp-block-heading\"> 1. Compile o projeto VBA<\/h3><p> No Editor do Visual Basic, existe uma op\u00e7\u00e3o que voc\u00ea pode usar instantaneamente ap\u00f3s terminar seu c\u00f3digo. Essas op\u00e7\u00f5es de compila\u00e7\u00e3o analisam cada linha do seu c\u00f3digo e exibem uma caixa de mensagem se houver algum erro no seu c\u00f3digo.<\/p><p class=\"qt-tip\"> <strong>Nota:<\/strong> A op\u00e7\u00e3o Compilar VBA rastreia apenas erros de sintaxe e compila\u00e7\u00e3o, n\u00e3o erros de tempo de execu\u00e7\u00e3o, porque esses erros ocorrem apenas quando um c\u00f3digo est\u00e1 em execu\u00e7\u00e3o. Para usar Compile VBA Project, v\u00e1 para \u27a4 Debug \u27a4 Compile VBA Project. <\/p><div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-58232\" src=\"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/08-compiler-le-projet-vba.png\" sizes=\"auto, \" srcset=\"\" alt=\"\" width=\"366\" height=\"352\"><\/figure><\/div><p> Depois de executar \u201cCompile VBA Project\u201d e n\u00e3o houver erros em seu c\u00f3digo, as op\u00e7\u00f5es ficar\u00e3o esmaecidas.<\/p><h3 class=\"wp-block-heading\"> 2. Execute cada linha de c\u00f3digo, uma por uma<\/h3><p> \u00c9 assim que eu fa\u00e7o. Quando completo um c\u00f3digo, simplesmente o executo linha por linha para verificar se h\u00e1 algum erro. Isso pode levar algum tempo, mas ajuda a resolver todos os erros (sintaxe, compila\u00e7\u00e3o e execu\u00e7\u00e3o).<\/p><p> Na &#8220;Barra de ferramentas de depura\u00e7\u00e3o&#8221; h\u00e1 um bot\u00e3o &#8220;Step In&#8221; que voc\u00ea pode usar para executar o c\u00f3digo linha por linha ou simplesmente pressionar F8 para executar uma \u00fanica linha e pression\u00e1-lo novamente para executar a pr\u00f3xima linha do c\u00f3digo. <\/p><div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-58233\" src=\"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/09-executer-chaque-ligne-de-code.png\" sizes=\"auto, \" srcset=\"\" alt=\"\" width=\"338\" height=\"387\"><\/figure><\/div><h2 class=\"wp-block-heading\"> Usando a instru\u00e7\u00e3o \u201cOn ERROR\u201d para lidar com erros VBA<\/h2><p> \u00c9 importante verificar seus c\u00f3digos e encontrar poss\u00edveis erros em todos os m\u00e9todos de depura\u00e7\u00e3o dispon\u00edveis. Mas a melhor e mais eficiente maneira \u00e9 criar instru\u00e7\u00f5es de tratamento de erros que possam lidar com um erro e tornar seu c\u00f3digo perfeito quando executado. Vamos explorar essas afirma\u00e7\u00f5es. Quando ocorre um erro em um c\u00f3digo VBA, as melhores maneiras de lidar com esse erro podem ser:<\/p><ul><li> Deixe o VBA ignorar o erro e executar o c\u00f3digo<\/li><li> Deixe um conjunto especial de instru\u00e7\u00f5es ser executado quando ocorrer um erro.<\/li><\/ul><p> Em ambas as solu\u00e7\u00f5es, voc\u00ea pode usar instru\u00e7\u00f5es &#8220;On Error&#8221;. Abaixo est\u00e3o quatro declara\u00e7\u00f5es \u201cOn Error\u201d que voc\u00ea pode usar. E agora vamos examinar cada afirma\u00e7\u00e3o, uma por uma.<\/p><h3 class=\"wp-block-heading\"> 1. Se voc\u00ea cometer um erro, comece de novo<\/h3><p> Esta simples linha de c\u00f3digo permite que o VBA continue executando o c\u00f3digo apesar da ocorr\u00eancia de um erro. <strong>A ID\u00c9IA \u00e9 simples:<\/strong> v\u00e1 para a pr\u00f3xima linha de c\u00f3digo se um erro for detectado em algum lugar durante a execu\u00e7\u00e3o.<\/p><p> No c\u00f3digo abaixo, voc\u00ea tem duas linhas de c\u00f3digo:<\/p><ul><li> A primeira linha indica que o valor na c\u00e9lula A1 \u00e9 25 dividido por 0<\/li><li> E a segunda linha diz que o valor da c\u00e9lula A2 \u00e9 10 dividido por 5<\/li><\/ul><p> Agora h\u00e1 um problema com o c\u00f3digo que voc\u00ea tem online. Como voc\u00ea sabe, se dividir qualquer coisa por 0, o resultado ser\u00e1 um erro. Portanto, quando voc\u00ea executa esse c\u00f3digo, o VBA exibe uma mensagem de erro <strong>\u201cErro de tempo de execu\u00e7\u00e3o &#8217;11&#8217; Dividir por zero\u201d<\/strong> e interrompe a execu\u00e7\u00e3o.<\/p><p> Mas quando voc\u00ea adiciona &#8220;On Error Resume Next&#8221; no in\u00edcio do c\u00f3digo e executa o c\u00f3digo, o VBA simplesmente ignora a linha de c\u00f3digo onde o erro ocorre e continua com a segunda linha e adiciona esse valor na c\u00e9lula A2.<\/p><pre class=\"wp-block-code\"> <code class=\"language-visual-basic\" lang=\"visual-basic\">Sub myDivide() <strong>On<\/strong> Error Resume <strong>Next<\/strong> <strong>Range<\/strong> (\"A1\"). <strong>Value<\/strong> = 25 \/ 0 <strong>Range<\/strong> (\"A2\"). <strong>Value<\/strong> = 10 \/ 5 <strong>End<\/strong> Sub<\/code><\/pre><p> Portanto, sempre que voc\u00ea quiser que seu c\u00f3digo seja executado apesar de um erro ocorrer em qualquer lugar, basta usar a instru\u00e7\u00e3o \u201cOn Error Resume Next\u201d em seu c\u00f3digo.<\/p><p> <strong>Mas aqui est\u00e1 mais uma coisa que voc\u00ea deve observar:<\/strong> ele ignorar\u00e1 apenas os erros que ocorrerem posteriormente.<\/p><p> Digamos que ocorreu um erro na linha 5 e voc\u00ea adicionou &#8220;On Error Resume Next&#8221; na linha 8, isso n\u00e3o ignoraria esse erro. Portanto, a melhor forma \u00e9 adicion\u00e1-lo como a primeira linha de c\u00f3digo do procedimento.<\/p><h3 class=\"wp-block-heading\"> 2. Em caso de erro GoTo 0<\/h3><p> Este \u00e9 o comportamento padr\u00e3o do VBA: quando ocorre um erro, ele interrompe a execu\u00e7\u00e3o do c\u00f3digo.<\/p><p> Bem, usar \u201cOn Error GoTo 0\u2033 n\u00e3o faz diferen\u00e7a no seu c\u00f3digo. O VBA simplesmente interromper\u00e1 o c\u00f3digo e exibir\u00e1 uma mensagem com uma descri\u00e7\u00e3o do erro. Ent\u00e3o, por que eu deveria me preocupar em us\u00e1-lo? Pergunta inteligente. Vamos usar o exemplo que voc\u00ea usou acima em &#8221; <strong>On Error Resume Next<\/strong> &#8220;.<\/p><p> Neste c\u00f3digo, sempre que ocorre um erro, o VBA pega a pr\u00f3xima linha de c\u00f3digo e a executa e voc\u00ea n\u00e3o ver\u00e1 nenhuma mensagem de erro. Mas digamos que voc\u00ea tenha mais linhas em seu c\u00f3digo e n\u00e3o queira exceder essas linhas se houver um erro no c\u00f3digo.<\/p><p> Portanto, se voc\u00ea inserir <strong>&#8220;On Error GoTo 0&#8221;<\/strong> ap\u00f3s a segunda linha de c\u00f3digo, ele restaurar\u00e1 o manipulador de erros padr\u00e3o do VBA, que exibe mensagens de erro sempre que ocorre um erro.<\/p><h3 class=\"wp-block-heading\"> 3. Em caso de erro GoTo [Label]<\/h3><p> Pense em um lugar em um pr\u00e9dio onde voc\u00ea possa ir em caso de emerg\u00eancia. Da mesma forma, usando &#8220;On Error GoTo [Label]&#8221;, voc\u00ea pode simplesmente criar um bloco de c\u00f3digo separado em seu c\u00f3digo principal para lidar com um erro.<\/p><p> Na verdade, \u201cOn Error GoTo [Label]\u201d \u00e9 uma maneira muito melhor e mais conveniente de lidar com erros. No c\u00f3digo abaixo voc\u00ea tem &#8220;On Error GoTo Oh!&#8221; Erro\u201d agora nesta declara\u00e7\u00e3o de linha, a palavra \u201cOh!\u201d Erro\u201d \u00e9 o r\u00f3tulo.<\/p><p> Se voc\u00ea olhar no final do c\u00f3digo onde voc\u00ea tem um in\u00edcio espec\u00edfico com o nome do r\u00f3tulo e depois um c\u00f3digo para uma caixa de mensagem com uma mensagem no c\u00f3digo.<\/p><p> Agora o que acontece se ocorrer um erro, o VBA ir\u00e1 pular para o r\u00f3tulo \u201cOh! Erro\u201d e executar\u00e1 o bloco de c\u00f3digo que voc\u00ea possui ap\u00f3s esse r\u00f3tulo.<\/p><p> <strong>Mas h\u00e1 uma coisa que voc\u00ea precisa cuidar:<\/strong> se nenhum erro ocorrer, o r\u00f3tulo que voc\u00ea tem no seu c\u00f3digo ser\u00e1 executado. H\u00e1 duas coisas que voc\u00ea precisa fazer:<\/p><ul><li> Primeiro, certifique-se de adicionar sua tag de erro no final do c\u00f3digo.<\/li><li> Segundo, adicione um \u201cExit Sub\u201d antes do r\u00f3tulo de erro.<\/li><\/ul><p> Com isso, voc\u00ea ser\u00e1 beneficiado em ambas as situa\u00e7\u00f5es. Digamos que se ocorrer um erro e o VBA mudar para o r\u00f3tulo que voc\u00ea especificou, haver\u00e1 apenas c\u00f3digo do pr\u00f3prio r\u00f3tulo para o c\u00f3digo. E se n\u00e3o ocorrer um erro, a instru\u00e7\u00e3o &#8220;Exit Sub&#8221; que voc\u00ea tem antes do r\u00f3tulo sair\u00e1 do procedimento sem executar o r\u00f3tulo de erro.<\/p><h3 class=\"wp-block-heading\"> 4. Em caso de erro GoTo -1<\/h3><p> Antes de entrarmos nisso, deixe-me compartilhar algo com voc\u00ea. Quando ocorre um erro em um c\u00f3digo, o VBA armazena esse log de erros em sua mem\u00f3ria e s\u00f3 o limpa quando a rotina \u00e9 conclu\u00edda.<\/p><p> <strong>\u00d3 VBA! Viva no presente<\/strong><\/p><p> Para tratar o segundo erro no c\u00f3digo VBA, voc\u00ea deve limpar o primeiro erro da mem\u00f3ria do VBA. No c\u00f3digo abaixo, voc\u00ea tem duas instru\u00e7\u00f5es &#8220;On Error GoTo [Label]&#8221; que tratam de erros de dois blocos de c\u00f3digo diferentes.<\/p><p> Mas se voc\u00ea executar esse c\u00f3digo, quando ocorrer o segundo erro, o VBA n\u00e3o ir\u00e1 pular para o r\u00f3tulo que voc\u00ea definiu e, em vez disso, mostrar\u00e1 a mensagem de erro &#8220;Tipo incompat\u00edvel&#8221;.<\/p><pre class=\"wp-block-code\"> <code class=\"language-visual-basic\" lang=\"visual-basic\">Sub Square_Root() <strong>On<\/strong> Error GoTo myError1 <strong>Range<\/strong> (\"A1\"). <strong>Value<\/strong> = <strong>Range<\/strong> (\"A1\"). <strong>Value<\/strong> ^ (1 \/ 2) myError1: MsgBox \"There's some problem with the value you have in the cell A1.\" <strong>On<\/strong> Error GoTo myError2 <strong>Range<\/strong> (\"A2\"). <strong>Value<\/strong> = <strong>Range<\/strong> (\"A2\"). <strong>Value<\/strong> ^ (1 \/ 2) myError2: MsgBox \"There's some problem with the value you have in the cell A2.\" <strong>End<\/strong> Sub<\/code><\/pre><p> Para resolver esse problema, voc\u00ea pode usar \u201cOn Error GoTo -1\u201d que permite ao VBA remover o erro atual de seu armazenamento.<\/p><pre class=\"wp-block-code\"> <code class=\"language-visual-basic\" lang=\"visual-basic\">Sub Square_Root() On Error GoTo myError1 Range(\"A1\").Value = Range(\"A1\").Value ^ (1 \/ 2) myError1: MsgBox \"There's some problem with the value you have in the cell A1.\" On Error GoTo -1 On Error GoTo myError2 Range(\"A2\").Value = Range(\"A2\").Value ^ (1 \/ 2) myError2: MsgBox \"There's some problem with the value you have in the cell A2.\" End Sub<\/code><\/pre><p> Agora, quando voc\u00ea executa este c\u00f3digo, &#8220;On Error GoTo -1&#8221; remove o erro da mem\u00f3ria e o VBA trata o erro na segunda instru\u00e7\u00e3o conforme desejado.<\/p><h2 class=\"wp-block-heading\"> O que mais preciso saber para lidar com erros no VBA?<\/h2><p> Al\u00e9m de usar t\u00e9cnicas de tratamento de erros, existem algumas outras coisas que voc\u00ea pode usar para lidar melhor com os erros.<\/p><h3 class=\"wp-block-heading\"> Erro de objeto<\/h3><p> Quando ocorreu um erro durante a execu\u00e7\u00e3o do c\u00f3digo, voc\u00ea pode usar o objeto Err para obter detalhes sobre o erro. Existem algumas propriedades e m\u00e9todos que voc\u00ea pode usar com o objeto Err. Vamos aprend\u00ea-los um por um.<\/p><h4 class=\"wp-block-heading\"> <strong>Propriedades<\/strong><\/h4><p> Aqui est\u00e3o as propriedades que voc\u00ea pode usar com o objeto Err:<\/p><ul><li> <strong>Err.Number<\/strong> : Quando ocorre um erro, um n\u00famero \u00e9 armazenado no objeto Err. No c\u00f3digo abaixo, quando isso ocorre, a caixa de mensagem exibe o n\u00famero do erro.<\/li><li> <strong>Err.Description<\/strong> : Esta propriedade exibe a descri\u00e7\u00e3o do erro que pode ajud\u00e1-lo a entender o motivo do erro.<\/li><li> <strong>Err.Source:<\/strong> Esta propriedade informa em qual projeto ocorreu o erro.<\/li><li> <strong>Err.HelpContext:<\/strong> esta propriedade retorna o ID do contexto de ajuda para o erro no arquivo de ajuda.<\/li><li> <strong>Err.HelpContext:<\/strong> Este \u00e9 um valor de string para o local do arquivo de ajuda.<\/li><\/ul><p> Normalmente, quando voc\u00ea lida com erros usando t\u00e9cnicas de tratamento de erros, voc\u00ea n\u00e3o usa muito o objeto Err em seus c\u00f3digos. Mas abaixo est\u00e1 um exemplo simples de us\u00e1-lo.<\/p><pre class=\"wp-block-code\"> <code class=\"language-visual-basic\" lang=\"visual-basic\"><strong>Sub<\/strong> Square_Root() <strong>On<\/strong> <strong>Error<\/strong> <strong>GoTo<\/strong> myError1    Range(\"A1\").Value = Sqr(Range(\"A1\").Value) <strong>Exit<\/strong> <strong>Sub<\/strong> myError1:    MsgBox \"There's some problem with the value you have in the cell A1.\" &amp; vbCrLf &amp; _                \"Error Number: \" &amp; Err.Number  &amp; vbCrLf &amp; _                \"Error Description: \" &amp; Err.Description <strong>End<\/strong> <strong>Sub<\/strong><\/code><\/pre><p> Ao executar o c\u00f3digo acima, e se ocorrer um erro, ser\u00e1 exibida uma caixa de mensagem com o n\u00famero e a descri\u00e7\u00e3o do erro.<\/p><h4 class=\"wp-block-heading\"> <strong>M\u00e9todos<\/strong><\/h4><p> Com Err Object voc\u00ea tamb\u00e9m pode usar dois m\u00e9todos.<\/p><ul><li> <strong>Err.Clear:<\/strong> Este m\u00e9todo limpa o n\u00famero do erro e a descri\u00e7\u00e3o do erro da mem\u00f3ria VBA (isso \u00e9 diferente de \u201cOn Error GoTo -1\u201d porque n\u00e3o redefine completamente o erro).<\/li><li> <strong>Err.Raise:<\/strong> Com este m\u00e9todo, voc\u00ea pode <a href=\"https:\/\/docs.microsoft.com\/en-us\/office\/vba\/language\/reference\/user-interface-help\/raise-method\" target=\"_blank\" rel=\"noreferrer noopener\">gerar intencionalmente um erro de tempo de execu\u00e7\u00e3o<\/a> em seu c\u00f3digo, e aqui est\u00e1 a sintaxe a seguir:<\/li><\/ul><p> <strong>Err<\/strong> .Raise [n\u00famero], [fonte], [descri\u00e7\u00e3o], [arquivo de ajuda], [contexto de ajuda]<\/p><h2 class=\"wp-block-heading\"> Dicas r\u00e1pidas sobre tratamento de erros<\/h2><p> Aqui est\u00e3o algumas dicas r\u00e1pidas que voc\u00ea pode usar para lidar melhor com erros de VBA.<\/p><ul><li> Use &#8220;On Error Resume Next&#8221; somente quando voc\u00ea tiver certeza de que um erro est\u00e1 ocorrendo e for aceit\u00e1vel pular a linha de c\u00f3digo com um erro e ser seguro passar para a pr\u00f3xima linha.<\/li><li> A melhor maneira de lidar com erros de tempo de execu\u00e7\u00e3o \u00e9 usar &#8220;Error Handler&#8221; com &#8220;On Error GoTo [Label]&#8221;. Isso garante que sempre que o erro ocorrer, voc\u00ea ser\u00e1 notificado, mas n\u00e3o exibir\u00e1 aquela mensagem de erro desagrad\u00e1vel.<\/li><li> Cada vez que voc\u00ea usar o manipulador de erros, certifique-se de usar &#8220;Exit Sub&#8221; primeiro.<\/li><\/ul><div class=\"gb-container gb-container-4db6181c gb-container-mt\"> <a class=\"gb-button gb-button-c5897111 gb-button-text gb-button-mt-button\" href=\"https:\/\/exceladvisor.org\/pt\/vba\/\">O que \u00e9 VBA<\/a><h2 class=\"gb-headline gb-headline-665e5f6b gb-headline-text gb-headline-mt-heading\"> Tutoriais relacionados <\/h2><div class=\"gb-grid-wrapper gb-grid-wrapper-a20baf7c gb-grid-wrapper-mt-grid\"><div class=\"gb-grid-column gb-grid-column-65ddf67e\"><\/div><div class=\"gb-grid-column gb-grid-column-50067b57\"><div class=\"gb-container gb-container-50067b57\"><ul><li> <a href=\"https:\/\/exceladvisor.org\/pt\/erro-de-estouro-6\/\">Erro de estouro de VBA (Erro 6)<\/a><\/li><li> <a href=\"https:\/\/exceladvisor.org\/pt\/erro-de-execucao-1004\/\">Erro de tempo de execu\u00e7\u00e3o do VBA (Erro 1004)<\/a><\/li><li> <a href=\"https:\/\/exceladvisor.org\/pt\/erro-de-indice-fora-do-intervalo-9\/\">Erro de execu\u00e7\u00e3o do \u00edndice VBA fora do intervalo (Erro 9)<\/a><\/li><li> <a href=\"https:\/\/exceladvisor.org\/pt\/erro-de-incompatibilidade-tipo-13\/\">Erro de incompatibilidade de tipo VBA (Erro 13)<\/a><\/li><li> <a href=\"https:\/\/exceladvisor.org\/pt\/erro-de-falta-de-memoria-7\/\">Erro de falta de mem\u00f3ria do VBA (Erro 7)<\/a><\/li><\/ul><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"ub_ctt_via":"","footnotes":""},"class_list":["post-47","page","type-page","status-publish","hentry"],"featured_image_src":null,"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Tipos de erro VBA: depura\u00e7\u00e3o e solu\u00e7\u00e3o 2023 - Excel Advisor<\/title>\n<meta name=\"description\" content=\"Como qualquer outra linguagem de programa\u00e7\u00e3o, o VBA n\u00e3o tem sorte quando se trata de erros e voc\u00ea tem que lidar com eles de qualquer maneira...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tipos de erro VBA: depura\u00e7\u00e3o e solu\u00e7\u00e3o 2023 - Excel Advisor\" \/>\n<meta property=\"og:description\" content=\"Como qualquer outra linguagem de programa\u00e7\u00e3o, o VBA n\u00e3o tem sorte quando se trata de erros e voc\u00ea tem que lidar com eles de qualquer maneira...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/\" \/>\n<meta property=\"og:site_name\" content=\"Excel Advisor\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-06T11:51:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/01-erreur-dexecution.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data1\" content=\"15 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/\",\"url\":\"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/\",\"name\":\"Tipos de erro VBA: depura\u00e7\u00e3o e solu\u00e7\u00e3o 2023 - Excel Advisor\",\"isPartOf\":{\"@id\":\"https:\/\/exceladvisor.org\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/01-erreur-dexecution.png\",\"datePublished\":\"2023-11-18T02:08:34+00:00\",\"dateModified\":\"2023-12-06T11:51:35+00:00\",\"description\":\"Como qualquer outra linguagem de programa\u00e7\u00e3o, o VBA n\u00e3o tem sorte quando se trata de erros e voc\u00ea tem que lidar com eles de qualquer maneira...\",\"breadcrumb\":{\"@id\":\"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/#primaryimage\",\"url\":\"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/01-erreur-dexecution.png\",\"contentUrl\":\"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/01-erreur-dexecution.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Lar\",\"item\":\"https:\/\/exceladvisor.org\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tipos de erros vba: depura\u00e7\u00e3o e solu\u00e7\u00e3o\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/exceladvisor.org\/pt\/#website\",\"url\":\"https:\/\/exceladvisor.org\/pt\/\",\"name\":\"Excel Advisor\",\"description\":\"O seu guia definitivo para dominar os dados!\",\"publisher\":{\"@id\":\"https:\/\/exceladvisor.org\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/exceladvisor.org\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/exceladvisor.org\/pt\/#organization\",\"name\":\"Excel Advisor\",\"url\":\"https:\/\/exceladvisor.org\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/exceladvisor.org\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/exceladvisor.org\/pt\/wp-content\/uploads\/2023\/12\/exceladvisor.org_.png\",\"contentUrl\":\"https:\/\/exceladvisor.org\/pt\/wp-content\/uploads\/2023\/12\/exceladvisor.org_.png\",\"width\":105,\"height\":36,\"caption\":\"Excel Advisor\"},\"image\":{\"@id\":\"https:\/\/exceladvisor.org\/pt\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tipos de erro VBA: depura\u00e7\u00e3o e solu\u00e7\u00e3o 2023 - Excel Advisor","description":"Como qualquer outra linguagem de programa\u00e7\u00e3o, o VBA n\u00e3o tem sorte quando se trata de erros e voc\u00ea tem que lidar com eles de qualquer maneira...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/","og_locale":"pt_PT","og_type":"article","og_title":"Tipos de erro VBA: depura\u00e7\u00e3o e solu\u00e7\u00e3o 2023 - Excel Advisor","og_description":"Como qualquer outra linguagem de programa\u00e7\u00e3o, o VBA n\u00e3o tem sorte quando se trata de erros e voc\u00ea tem que lidar com eles de qualquer maneira...","og_url":"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/","og_site_name":"Excel Advisor","article_modified_time":"2023-12-06T11:51:35+00:00","og_image":[{"url":"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/01-erreur-dexecution.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Tempo estimado de leitura":"15 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/","url":"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/","name":"Tipos de erro VBA: depura\u00e7\u00e3o e solu\u00e7\u00e3o 2023 - Excel Advisor","isPartOf":{"@id":"https:\/\/exceladvisor.org\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/#primaryimage"},"image":{"@id":"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/#primaryimage"},"thumbnailUrl":"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/01-erreur-dexecution.png","datePublished":"2023-11-18T02:08:34+00:00","dateModified":"2023-12-06T11:51:35+00:00","description":"Como qualquer outra linguagem de programa\u00e7\u00e3o, o VBA n\u00e3o tem sorte quando se trata de erros e voc\u00ea tem que lidar com eles de qualquer maneira...","breadcrumb":{"@id":"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/#primaryimage","url":"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/01-erreur-dexecution.png","contentUrl":"https:\/\/exceladvisor.org\/wp-content\/uploads\/2023\/08\/01-erreur-dexecution.png"},{"@type":"BreadcrumbList","@id":"https:\/\/exceladvisor.org\/pt\/manipulacao-de-erros\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Lar","item":"https:\/\/exceladvisor.org\/pt\/"},{"@type":"ListItem","position":2,"name":"Tipos de erros vba: depura\u00e7\u00e3o e solu\u00e7\u00e3o"}]},{"@type":"WebSite","@id":"https:\/\/exceladvisor.org\/pt\/#website","url":"https:\/\/exceladvisor.org\/pt\/","name":"Excel Advisor","description":"O seu guia definitivo para dominar os dados!","publisher":{"@id":"https:\/\/exceladvisor.org\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/exceladvisor.org\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/exceladvisor.org\/pt\/#organization","name":"Excel Advisor","url":"https:\/\/exceladvisor.org\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/exceladvisor.org\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/exceladvisor.org\/pt\/wp-content\/uploads\/2023\/12\/exceladvisor.org_.png","contentUrl":"https:\/\/exceladvisor.org\/pt\/wp-content\/uploads\/2023\/12\/exceladvisor.org_.png","width":105,"height":36,"caption":"Excel Advisor"},"image":{"@id":"https:\/\/exceladvisor.org\/pt\/#\/schema\/logo\/image\/"}}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"_links":{"self":[{"href":"https:\/\/exceladvisor.org\/pt\/wp-json\/wp\/v2\/pages\/47","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/exceladvisor.org\/pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/exceladvisor.org\/pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/exceladvisor.org\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/exceladvisor.org\/pt\/wp-json\/wp\/v2\/comments?post=47"}],"version-history":[{"count":1,"href":"https:\/\/exceladvisor.org\/pt\/wp-json\/wp\/v2\/pages\/47\/revisions"}],"predecessor-version":[{"id":1487,"href":"https:\/\/exceladvisor.org\/pt\/wp-json\/wp\/v2\/pages\/47\/revisions\/1487"}],"wp:attachment":[{"href":"https:\/\/exceladvisor.org\/pt\/wp-json\/wp\/v2\/media?parent=47"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}