Decidindo tipos de dados
As variáveis podem ser dos mais diversos tipos, como você deve ter percebido nas várias videoaulas do Alessandro Trovato que deve ter assistido. Deve saber que uma variável não declarada é do tipo variant e também que é uma boa prática usar o Option Explicit no começo do módulo para forçar que as variáveis sejam declaradas antes do uso.
Talvez já ocorreu de precisar modificar o tipo da variável,
porque a anterior não suportou algum valor e deu um erro. Assim fica tentador
sempre usar o double em detrimento do
single e long ao invés de integer,
mas dependendo da quantidade de variáveis utilizadas e do ambiente, o
desempenho pode ficar comprometido.
O objetivo deste artigo é ajudar a escolher o tipo mais adequado
às necessidades. Suponha que você precise de uma variável Linha para indicar o número da linha onde o processamento está no
momento. Se você tem certeza absoluta de que não haverá muitas linhas, pode
usar o tipo integer. Entretanto, se
você acha que a quantidade de linhas pode crescer tanto a ponto de ultrapassar
32.767 linhas, é melhor usar o tipo long,
que permitirá até a última linha existe no Excel, que atualmente é 1.048.576. É possível também usar o tipo byte, que aceita valores de 0 a 255. Assim, a escolha depende da
necessidade.
Da mesma forma, dependendo da precisão desejada devemos escolher entre os tipos double e single. Suponha que precise colocar o número Pi no código. É possível defini-lo como constante, ou seja, atribui um valor e ele não poderá ser modificado em nenhuma parte do processo. Veja o código abaixo:
Const Pi As Double = 3.14159265358979
Note que não importa quantas casas decimais você
acrescentar, o Excel limita em 14. Pode atribuir 3.141592653589793238462643383279
ou ainda mais casas, ao sair da linha onde está o valor o editor VBA apaga as
casas que não serão consideradas. Perceba também que na declaração da constante
a atribuição do valor vem logo em seguida, o que não é possível fazer em variáveis. Sempre
que houver um valor que não deve ser modificado, declare como constante.
Coloque o comando abaixo em uma sub-rotina e execute:
Debug.Print Pi
Ele exibirá na área Verificação imediata o valor de Pi, que
será 3,14159265358979. Agora altere a linha da declaração de double para single e executar o Debug.Print
novamente. O resultado apresentado será 3,141593, ou seja, menos casas
decimais. Portanto, a decisão aqui vai depender da quantidade de casas decimais
que devem ser consideradas no cálculo. Se houver necessidade de precisão, use double, caso contrário use single.
Até agora vimos somente os tipos de dados numéricos. O tipo de dados string é de tamanho variável por padrão, mas é possível definir com tamanho fixo. Veja o exemplo abaixo:
Dim SiglaEstado As String * 2
A variável SiglaEstado
foi definida com tamanho fixo de 2 bytes. Isso significa que se estiver vazio o
valor será " " (dois espaços),
portanto é preciso tomar atenção para não comparar a variável com "" (nenhum
espaço, conteúdo vazio), a não ser que utilize o comando Trim,
que remove os espaços extras à esquerda e à direita. Também significa que essa
variável não aceitará nenhum valor com mais de dois bytes. Se for atribuído
"XYZ", o valor armazenado será "XY", tudo após o limite
será descartado.
String de tamanho
fixo é útil quando precisa trabalhar com blocos de texto de tamanho definido e
imutável. Também é útil quando for preciso trabalhar com arquivos de
tamanho fixo, onde cada campo deve ocupar um espaço alocado no registro. Não é
recomendável usar se o bloco de texto for de tamanho variável, porque tudo que
não for utilizado será preenchido com espaços. Imagine uma variável NomeCidade com tamanho fixo de 40 e
gravando a informação na planilha: a quantidade de espaço desperdiçada será
gigantesca. Neste caso será preciso utilizar o Trim antes de atribuir o valor nas células para evitar gravar tanto
espaço em branco, como mostrado abaixo:
Cells(Linha, Coluna).Value = Trim(NomeCidade)
Desta forma "São Paulo" irá ocupar apenas 8 bytes
na célula e não 40, incluindo 32 espaços em branco à toa. Mas se for para gravar um
registro em arquivo de tamanho fixo, deve-se gravar os 40 bytes para ocupar
devidamente o espaço alocado. Vou tratar de arquivos em um artigo futuro.
O tipo boolean
aceita apenas valores Falso ou Verdadeiro. O ideal é utilizar somente
quando há dois valores possíveis que aceitem resposta como "Não" e "Sim" ou "Falso" e "Verdadeiro", como, por
exemplo, em uma lista de presença de alunos. Fora isso não é recomendável usar
esse tipo de dado, pois irá complicar o entendimento do código. Por exemplo, sexo aceita os valores "masculino" e "feminino", mas usar uma variável boolean neste caso deixa o código confuso.
Há um tipo especial de dado chamado type. Com esse tipo é possível compor uma estrutura de dados de
tipos distintos, como por exemplo, uma placa de carro. Veja a definição abaixo:
Type TipoPlaca
Letras As String * 3
Numeros As Integer
End Type
Dim Placa As TipoPlaca
Veja que o bloco Type...
End Type contém a definição e o Dim
é necessário para declarar o objeto. Esse código pode ser declarado fora da
área de sub-rotinas, sendo visível para todas as rotinas do módulo. É um tipo
de objeto com propriedades (que são as variáveis declaradas) e por isso a notação segue o mesmo estilo:
Placa.Letras = "AAA"
Placa.Numeros = 1
Debug.Print Placa.Letras & String(4 -
Len(CStr(Placa.Numeros)), "0") & Placa.Numeros
Observe que para exibir os números precisamos primeiro
converter a variável para string para
depois obter o comprimento (caso contrário será sempre 2, que é o comprimento
de um tipo integer) e por fim
acrescentar os zeros à esquerda.
O objeto type
funciona como uma classe sem métodos e funções. Classe é um objeto com
propriedades e procedimentos que será abordado em um artigo futuro por causa de sua
complexidade. Entender o formato type
ajudará a entender a classe no futuro, por isso pratique se puder. Tente
agrupar dados sempre que tiverem alguma relação entre si. Por exemplo, agrupe
os dados do cliente em uma estrutura de dados type: nome, número de cadastro, documento, telefone, endereço etc. É possível colocar qualquer tipo de dado dentro de um objeto type, isso inclui objetos do Excel, arrays, collections, classes e mesmo outros objetos type. Arrays e collections também serão em outro artigo.
Há outro tipo especial chamado enum, de enumeração. Ele é muito útil quando há uma quantidade
definida de opções para associar a uma variável. Por exemplo, estado civil pode
ser solteiro, casado, divorciado, viúvo, separado e companheiro. Veja a
estrutura abaixo:
Enum enumEstadoCivil
Solteiro = 1
Casado = 2
Divorciado = 3
Viuvo = 4
Separado = 5
Companheiro = 6
End Enum
Dim EstadoCivil As enumEstadoCivil
Da mesma forma que o type, é preciso usar o Dim para declarar uma variável para
aceitar esse valor. Na hora que estiver escrevendo o código e for atribuir um
valor a essa variável acontece algo muito bacana:
O InteliSense do editor de VBA exibe os valores possíveis, o que é uma
grande ajuda para deixar o código mais dinâmico e fácil de fazer manutenção.
Note que ele colocou os valores em ordem alfabética, o que não é um problema. O
valor que será associado à variável é o número correspondente ao estado civil
declarado no enum. Os valores
atribuídos devem ser numéricos inteiros, pois o enum só aceita valores do tipo long,
não é possível associar letras ou strings. Se não for digitado nenhum valor, o
Excel começa a partir do zero e vai incrementando de um em um. Mas é melhor
definir os valores porque deixa documentado no código para futuras consultas.
Você pode ter reparado que o símbolo à esquerda dos valores
é idêntico ao de uns valores vistos no Excel, como xlTop, xlToLeft, xlToRight e xlBottom, que acompanham o método Range.End. Todos os valores que iniciam com xl são enumerações nativas do Excel. Você pode criar um prefixo
próprio para as suas enumerações se quiser, mas não é necessário.
Certamente você adquiriu conhecimentos novos com este artigo. Imagine uma estrutura de dados type com várias propriedades, algumas podendo ser enumerações ou strings de tamanho fixo, datas e números de diversos tipos. Pegue um projeto antigo pronto, faça uma cópia para editar e mãos à obra, pratique para aprender!
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.
Nenhum comentário