0197-Dica VBA: Depurando seus códigos

Escrever códigos em VBA, assim como em qualquer linguagem de programação, exige que examinemos os códigos à procura de erros.
Podemos dividir os erros em dois grandes grupos:
– Erros de compilação;
– Erros em tempo de execução.

Os erros de compilação são os mais “grosseiros” e são detectados pelo VBA no momento em que são digitados no código.
Se, por exemplo, escrevermos em um código a linha

If Then

e em seguida pressionarmos ENTER aparecerá a mensagem.

0197_01

Ao concluirmos uma linha de código ou tentarmos executar o código, o VBA testa a consistência dessas informações e, caso perceba que houve um erro, é disparada uma mensagem de alerta.

Veja um exemplo de erro de compilação detectado ao tentarmos executar o código

0197_02

Ou seja, são erros que estão relacionados à estrutura do código e à sintaxe dos comandos.

Já os erros em tempo de execução, ocorrem quando tentamos que seja executada uma ação e um ou mais requisitos não são cumpridos.

Nesse exemplo, tentamos buscar o endereço de um intervalo, para uma variável que está vazia.

0197_03

No próximo exemplo, tentamos aplicar o método Protect em um intervalo (que não aceita esse método), o que ocasiona também um erro.

0197_04

Podemos dizer então que os erros em tempo de execução são decorrentes de falha de atribuição de objetos e variáveis.

Para detectarmos e corrigirmos os erros de compilação, o VBE oferece o menu Depurar.

0197_05

Vamos analisar as opções deste menu. Iremos fugir um pouco da ordem do menu, para mantermos uma maior consistência com as informações.

Compilar VBA project. Essa ação verifica a consistência do código em busca de erros de compilação. Caso os erros sejam detectados, a parte do código é destacada e uma mensagem indica a natureza do problema.

Depuração total – Tecla de atalho F8. Também é conhecido como execução passo-a-passo, pois a cada vez que F8 é pressionada executa-se uma linha apenas de comando. A linha de comando que será executada fica destacada em amarelo e uma seta à esquerda da janela de módulo indica a linha.

0197_06

Isso permite que testemos cada uma das ações executadas pelo código, observando alterações em células e planilhas, por exemplo.

Depuração parcial- Tecla de atalho SHIFT+F8. Se diferencia da depuração total quando há chamadas para outros procedimentos. Nesses casos, o outro procedimento é executado como um só bloco, e a depuração segue para a próxima linha de comando do código atual. É útil quando temos certeza de que os códigos chamados já foram testado e sabemos que não possuem problemas.

Depuração circular- Tecla de atalho CTRL+SHIFT+F8. Assim como a Depuração parcial, executa um procedimento chamado em bloco, mas ao invés de interromper a execução no ponto imediatamente posterior da macro atual, continua a execução até o final do código.

Executar até o cursor- Tecla de atalho CTRL+F8. Executa o código até o ponto em que se encontra o cursor (Barra vertical piscante que indica a edição de texto). Desta forma, podemos avançar o código até um determinado ponto e a partir daí executá-lo pausadamente.

Definir próxima instrução- Tecla de atalho CTRL+F9. Executa o código a partir do ponto em que se encontra o cursor. Ao contrário da opção Executar até o cursor, as etapas intermediárias não são executadas. Isso permite que executemos “saltos” no código. É uma opção interessante quando sabemos que o erro ocorre no final do código e não é influenciado pelas etapas anteriores. É necessário que o código já esteja no modo de execução passo a passo (barra amarela ativa na tela).

Mostrar próxima instrução. O cursor é movido para a linha que está para ser executada.

Adicionar inspeção de variáveis. A inspeção de variáveis permite visualizar o seu conteúdo, pode ser apenas o valor no caso de uma variável simples ou o conjunto de valores das propriedades de uma variável objeto. Para adicionar um variável, basta posicionar o cursor sobre uma parte do seu nome e selecionar a opção via menu, ou atalho com o botão direito do mouse.

0197_07

Na caixa de diálogo a seguir é possível definir três opções para o tipo de inspeção de variável:
Expressão de inspeção de variáveis: a janela de inspeção será exibida quando o código estiver em modo de interrupção;
Interromper quando o valor for verdadeiro: quando a condição for atendida, o código é interrompido e a janela de inspeção é exibida em primeiro plano.
Interromper quando o valor for alterado: quando a variável for modificada, o código é interrompido e a janela de inspeção é exibida em primeiro plano.

0197_08
É aberta então uma janela através da qual é possível monitorar o conteúdo das variáveis inspecionadas à medida que o código é executado.

Observem na imagem anterior que é mostrado o nome da variável, o seu valor, o tipo de variável e o módulo e procedimento a que ser refere.

Na mesma imagem, a variável rg que representa um intervalo Range, não apresenta valor, mas é exibido um sinal de mais (+) à frente de seu nome.

Clicando nesse sinal são exibidas as diferentes propriedades desta variável e os seus respectivos valores:

0197_09

Isso torna possível inspecionar cada pequeno detalhe de uma variável objeto.

A janela Inspeção de variáveis pode ser movida para outros pontos para que não atrapalhe a visibilidade do código em execução.

Editar inspeção de variáveis- Tecla de atalho CTRL+W. Esta opção permite redefinir os parâmetros de inspeção das variáveis, caso seja necessária alguma alteração.

Inspeção de variáveis rápida- Tecla de atalho SHFT+F9. Por meio desta opção vamos “direto ao ponto”. A janela exibida é mais simples e mostra apenas as informações básicas, sem permitir definir parâmetros.

0197_10

É bastante útil, pois ao contrário da opção Adicionar inspeção, esta opção possui um atalho de teclado, agilizando o processo de inserção.

Ativar/Desativar pontos de interrupção- Tecla de atalho F9. Um ponto de interrupção marca uma posição na qual o código terá sua execução interrompida. Todos os comandos anteriores são executados e a linha é destaca em amarelo no momento anterior à sua execução, para que possamos realizar o modo de depuração (F8). O ponto de interrupção fica destacado em marrom.

0197_11

Limpar todos os pontos de interrupção- Tecla de atalho CTRL+SHFT+F9. Permite eliminar de uma só vez todos os pontos de interrupção inseridos no código.

E com isso exploramos os recursos disponíveis para depuração de códigos VBA.

Usem-nos para poder testar adequadamente seus códigos até terem a certeza de que estão preparados para serem utilizados.

Anúncios

In Excel We Trust

Marcado com: , , , ,
Publicado em Nível: Avançado
%d blogueiros gostam disto: