Ir para o conteúdo
  • Cursos
  • Sobre
  • Conteúdo
  • Eventos
  • Contato
Menu
  • Cursos
  • Sobre
  • Conteúdo
  • Eventos
  • Contato
pedir orçamento
BLOG

VBA – Artigo 011 – Evitando erros

Evitando erros

Quando a planilha será utilizada apenas pelo desenvolvedor que está
codificando, a parte de tratamento de erros não é tão prioritária, pois o
próprio usuário será quem codificou e saberá como agir na eventualidade de
algum erro não tratado. Porém, quando se trata de planilhas que serão
utilizadas por outras pessoas, o tratamento de erros passa a ser algo
essencial. Em caso de planilhas profissionais, que serão comercializadas, isso
é mandatório.

Tratar erros adequadamente é uma tarefa árdua (talvez até ingrata) em
qualquer linguagem de programação e requer muitos testes para que tudo
funcione adequadamente. No VBA não é diferente. Felizmente, há meios de
descobrirmos onde os erros aparecem.

Há dois tipos de erros que ocorrem: entrada de dados inválida e codificação
inadequada. A primeira é mais fácil de tratar, com uma codificação que valida
se o dado recebido pode ser utilizado ou não. Sem validação a possibilidade de
erros aumenta muito. Já a segunda pode ser um pouco mais complicada de
encontrar, pois pode ser um erro na lógica. Felizmente temos como encontrar os
erros. Vejamos o exemplo abaixo:


    Idade = InputBox(“Qual a sua idade?”)


Sem uma validação adequada, o usuário pode inserir qualquer valor que não
seja uma idade. Pode inserir letras ou quaisquer outros caracteres que não
sejam números. Também pode inserir números negativos ou absurdamente grandes.
A maneira mais comum de validar um valor é utilizando uma estrutura de
verificação simples.


    Dim Idade As Variant
    
ObterIdade:
    Idade = InputBox(“Qual a sua idade?”)


    If IsNumeric(Idade) Then
        If CDbl(Idade) = CInt(Idade) Then
            If Idade <= 0 Or Idade >
120 Then

                GoTo ObterIdade
            End If
        Else
            GoTo ObterIdade
        End If
    Else
        GoTo ObterIdade
    End If


Em primeiro lugar, a variável Idade foi declarada como Variant, não
como Integer. Isso porque se for digitado algum dado que não seja um
número inteiro irá dar uma mensagem de erro do Excel e é justamente isso que
estamos evitando que aconteça com a validação de erro.

Perceba que há várias estruturas de verificação encadeadas. Se a resposta for
o desejado, irá para a próxima validação, caso contrário o código irá pedir
novamente uma entrada. Podemos colocar um MsgBox dizendo que a entrada
era inválida em cada uma das estruturas de verificação antes de retornar à
solicitação de entrada, mas não coloquei para manter o código mais enxuto para
fins didáticos.

Note também que o comando GoTo está sendo utilizado, enviando para um
rótulo chamado ObterIdade. Os rótulos são pontos de referência no
código, para onde o desenvolvedor pode fazer desvios. O GoTo é um
comando que muita gente não recomenda porque deixa o código cheio de desvios e
difícil de entender. No exemplo acima dá para entender bem porque é um exemplo
bem simples.

Há a alternativa de usar uma estrutura de repetição com verificação ao final
do processo. Veja como ficaria o mesmo exemplo abaixo:


    Dim Idade As Variant
    Dim ValorValido As Boolean
    ValorValido = False
    
    Do
        Idade = InputBox(“Qual a sua idade?”)
        
        If IsNumeric(Idade) Then
            If CDbl(Idade) = CInt(Idade)
Then

                If Idade > 0 Or
Idade <= 120 Then


ValorValido = True

                End If
            End If
        End If
    Loop Until ValorValido = True


Neste código colocamos a solicitação de entrada e as validações dentro de uma
estrutura de repetição Do… Loop Until. Se não conhece ou não entende
o que faz sugiro que leia meu
décimo artigo, que trata de estruturas de repetição. Com a validação ao final da estrutura
de repetição é garantido que o processamento irá passar pelo menos uma vez
para requerer o valor.

Perceba que inseri uma variável ValorValido para controlar se o valor
recebido em Idade é válido e também que o processo só sairá da
estrutura de repetição quando for digitado um valor válido. Todas as
validações continuam encadeadas, mas os procedimentos em caso negativo
(Else) com os comandos GoTo não são mais necessários. Por isto
mesmo este último exemplo é o mais recomendado de acordo com os paradigmas de
programação.

Se em sua planilha os dados são inseridos através de um formulário fica mais
fácil controlar a entrada. Em meu
sétimo artigo demonstrei como efetuar o tratamento e validação de dados nos próprios
códigos dos campos do formulário. Se ainda não leu, vale a pena ler antes de
prosseguir. O botão de confirmação dos dados deve ser usado primeiramente para
validar se todos os dados exigidos foram digitados e se são válidos, para só
então prosseguir com o processamento dos dados fornecidos.

Seguindo as dicas acima temos como evitar erros por causa de entrada de dados
inválidos. Porém, erros de codificação são muito difíceis de evitar se não
conhecermos as melhores ferramentas para ajudar nos testes. Certamente você
deve conhecer que é possível depurar o código com a tecla de atalho F8, que
executa o código linha a linha, para que possamos acompanhar o processamento e
verificar se está tudo fluindo bem. Também deve saber que parar o mouse em
cima de uma variável irá exibir o valor atual dela, o que nos permite
acompanhar os valores das variáveis sempre que necessário.

Muita gente ensina a exibir MsgBox para exibir valores de variáveis
para acompanhar o processamento. Porém, há o risco de esquecer de remover e ir
para a planilha o usuário assim, obrigando-o a apertar Ok cada vez que
aparecer a janela. Há uma maneira bem melhor onde é possível colocar mensagens
para acompanhar a depuração do código durante os testes: o método
Debug.Print. Ao invés de exibir um MsgBox com uma mensagem, esta
é colocada na área de Verificação imediata da janela do Editor VBA.
Assim, esquecer de remover o Debug.Print não causará transtorno ao
usuário, pois ele não deverá estar com a janela do Editor VBA aberta. Esse
comando já foi visto em artigos anteriores e não deve ser novidade.

Há também o método Debug.Assert, que deve ser usado com uma condição.
Se essa condição for falsa, a execução do código para na linha desse comando
para que o desenvolvedor possa verificar o que está acontecendo. O exemplo
mais comum para entender o funcionamento é o seguinte:


Debug.Assert Divisor <> 0


Se a variável Divisor estiver com o valor 0, a execução para,
evitando que seja feita uma divisão por 0. Como deve ser óbvio, este é um
recurso para ser usado enquanto estiver depurando o código, ou seja, deve-se
remover todos os Debug.Assert antes de encaminhar a planilha para o
usuário.

Trabalhando com o que foi explicado neste artigo é possível evitar uma grande
quantidade de erros possíveis. Entretanto, há casos em que algum erro pode
acontecer e que seja necessário usar um outro recurso do VBA, o
On Error. Ele será tratado no próximo artigo.

Pedro Martins

 

Formado em Tecnologia em Eletrônica Digital, já trabalhou como
artefinalista, eletrotécnico, programador de CLP (para máquinas
industriais) e analista de sistemas em sistema bancário, programando em
COBOL.
Mexe com computadores e programação desde a segunda metade dos anos
1980, quando teve um MSX e aprendeu a programar em BASIC. É a favor da
disseminação do conhecimento.

 

Catálogo de aulas (NOVIDADE)
 
Criei um catálogo de aulas para ajudar você em seus estudos. Acesse clicando na imagem abaixo ou clique aqui.
 

 

 

 

 

Contato

Telefone:

+55 11 98861.4882

E-mail:

contato@alessandrotrovato.com.br

Siga-nos

Facebook Instagram Linkedin Twitter Youtube

© Copyright 2024 – Todos os direitos reservados | Alessandro Trovato

criado por: