VALIDANDO FORMULÁRIOS DO VBA

Muitas vezes, desejamos controlar o que o usuário digita em um formulário do VBA, para evitar que erros aconteçam mais adiante ou para assegurar que a informação armazenada pelo sistema é confiável.

Vejamos o formulário a seguir:



Podemos criar três regras para este formulário:

1. O campo “Cliente” deve estar sempre preenchido;
2. O campo “Data” deve estar preenchido com uma data válida;
3. O campo “Unidades Compradas” deve estar preenchido com valores numéricos.

A primeira forma de validar isso, seria no momento em que o usuário clicar no botão OK, antes de qualquer instrução para que esses dados sejam gravados em uma planilha ou em um banco de dados.

EVENTO CLICK



No entanto, essa solução não impede que a pessoa digite valores incorretos: ela só fica sabendo que errou e só faz a correção no final.

EVENTO BEFOREUPDATE

Outra solução é fazer a validação assim que o usuário sair do campo. Para isso, usamos o evento BeforeUpdate de cada objeto.



Este evento acontece toda vez que o usuário deixa o campo e o seu valor é alterado. Veja que esta validação não impede, por exemplo, que os usuários passem pelo campo e deixem-nos vazios. A mensagem de preenchimento obrigatório para o campo Cliente só será exibida se o campo for preenchido e, depois, o usuário voltar ao campo e apagá-lo. Assim, é melhor manter aquela validação que havíamos escrito para o botão OK.

EVENTO EXIT

Uma solução é substituir o evento BeforeUpdate pelo evento Exit, que ocorre quando o usuário sair do campo. Nesse caso, não é preciso que o valor do campo tenha sido atualizado para que o evento aconteça.



Isto, é claro, não impede o usuário de clicar diretamente no botão OK sem passar por todos campos. Mais uma vez é preciso manter a validação feita no botão OK.

EVENTO KEYPRESS

Uma outra forma de fazer a validação é impedir que o usuário digite caracteres inválidos. Podemos bloquear o campo txtData para que só aceite números e a barra “/” e o campo txtUnidadesCompradas para que aceite apenas números. Isto se faz com o evento KeyPress, que é acionado assim que uma tecla é pressionada.

O evento KeyPress informa qual o código ASCII da tecla que foi pressionada. Lembre-se de que, para cada caractere que digitamos, existe um código ASCII correspondente. Comparando esse código (dado por KeyAscii) com o código ASCII dos números e da barra (“/”), podemos descobrir que tipo de caractere foi digitado e executar as instruções necessárias.

Para que não tenhamos que saber de cor o código ASCII de cada tecla, utilizamos a função Asc, do VBA, que retorna o código ASCII. Por exemplo, em vez de utilizarmos o valor 47, que é o código ASCII da barra (“/”), escrevemos Asc(“/”) em lugar do número. Em vez de escrevermos 57, que é o código ASCII do número 9, utilizamos a função Asc: Asc(9).



Isto impede que o usuário digite valores indesejados, mas não impede que:

1. ele deixe um campo em branco e passe direto para o campo seguinte;
2. ele crie valores inválidos para a data, usando combinações equivocadas de números e barras, como “25//8/58699”.

Por isso, é interessante manter aquela validação no botão OK, de qualquer modo. Na verdade, o que fazemos é combinar as formas de validação que vimos aqui: no momento da digitação (KeyPress), na saída do campo (Exit ou BeforeUpdate) e na finalização do preenchimento (evento Click no botão OK).

É importante considerar todas as possibilidades de erro e nos assegurarmos de que todas elas são cobertas pelas validações que utilizamos, impedindo que o programa cause erros em tempo de execução, erros lógicos causados por dados inseridos de modo incorreto e que informações indevidas sejam armazenadas, comprometendo a confiabilidade do seu sistema.

Júlio -- 15/12/2011


Al. Santos, 1293 - 9° andar  |  Jd. Paulista - São Paulo-SP  |  11 3284-7388


Copyright © 2017 by CompuClass Informática


-