Uma das vantagens do VBA ser uma linguagem interpretada é que podemos executar procedimentos individuais sem ter que compilar toda a aplicação. Vamos explorar exatamente como fazemos isso.
Procedimentos Públicos
Rotinas públicas sem argumentos
Em um módulo padrão, você pode colocar o cursor dentro de uma Rotina Pública que não possui argumentos, pressionar [F5], e essa rotina será executada imediatamente.
Se você quiser percorrer a rotina, você pode definir um ponto de interrupção em uma das linhas antes de pressionar [F5] ou simplesmente pressionar [F8] ("Passar em") e começar imediatamente a percorrer o código da rotina.
Funções públicas sem argumentos
Isso também funciona com funções públicas em módulos de código padrão. A chave é que a função não pode aceitar nenhum argumento, nem mesmo opcionais.
Procedimentos públicos com argumentos
O que acontece se você tentar executar um procedimento público que receba um ou mais argumentos (mesmo os opcionais)? O comando "Executar> Executar Macro" executa:
Procedimentos privados
Procedimentos privados sem argumentos
Eu não posso levar o crédito por descobrir este. Agradecimentos especiais vão para Terry Chapman por repassar o fato de que você pode pressionar F5 para depurar Privado procedimentos em vigor, não apenas procedimentos públicos.
Como Terry, eu costumava alterar temporariamente meus procedimentos Privados para Públicos enquanto os depurava. Acontece que eu nunca tive que fazer isso.
Procedimentos privados Com Argumentos
Uma vez que Terry me fez questionar minhas suposições, decidi ver o quanto eu poderia me safar. Muito mais do que eu esperava, acontece!
Acredite ou não, você pode depurar procedimentos privados que aceitam argumentos sem transformando-os temporariamente em procedimentos públicos. Para fazer isso, você só precisa chamar o nome do procedimento totalmente qualificado da janela imediata. Por "nome totalmente qualificado", quero dizer o nome no formato de
{ModuleName}.{ProcedureName}
. Confira este exemplo:
Mas não acredite na minha palavra. Vá experimentar!