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.
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.
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.
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.
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.
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:
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.
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.
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:
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:
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
“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.
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.
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:
ú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:
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.
é 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.
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.
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.
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.