Esta página detalha os tipos de dados usados no VBA.
- Introdução
- Tipos de Dados Numéricos
- Valor Inicial de Tipos de Dados Numéricos
- Limites de Dados Numéricos
- Usar ou Não Usar Integer?
- O Tipo de Dados Decimal
- Tipos de Dados Não numéricos
- Descobrir Tipo de Dados de um Elemento
Introdução
O VBA trabalha com vários tipos de dados, como números, datas, textos e objetos. Boas práticas de programação sugerem que além de que você declarar todas as variáveis que utiliza, também especifique seu tipo de dados num programa. Na verdade, isso não é somente considerada uma boa prática, mas quase uma obrigatoriedade.
Para melhor entendimento, podemos dizer que o VBE trabalha com dois tipos de dados: os numéricos e os não numéricos.
Tipos de Dados Numéricos
A tabela abaixo mostra os tipos de dados numéricos:
A coluna Alocação indica quanto de memória uma variável ocupa de acordo com o tipo de dado declarado. Normalmente, um programa com variáveis que alocam menos memória são compilados e executados numa velocidade maior.
O VBA mantém a precisão de, no máximo, 15 algarismos, arredondando tudo o 15o algarismo para o número mais próximo, caso necessário. Single
suporta apenas 7 algarismos de precisão.
A expressão E+28, presente ao final da coluna de intervalo permitido de Single
, por exemplo, é uma notação científica que representa 10 elevado a 28. Se você, em tempo de design no VBE, digitar 1 seguido de mais de 15 zeros, ele automaticamente converterá o número para sua notação científica.
Valor Inicial de Tipos de Dados Numéricos
O valor inicial de uma variável declarada como um dos tipos de dados numéricos é 0. A macro abaixo exibe 0 na Janela de Verificação Imediata:
Sub ValorInicial() Dim Idade As Long Debug.Print Idade End Sub
Limites de Dados Numéricos
Existem dados numéricos que conseguem armazenar apenas valores inteiros e aqueles que também suportam valores decimais. Byte
, Integer
e Long
suportam apenas inteiros, e os outros tipos suportam ambos os tipos de dados. No entanto, se você tentar atribuir um número decimal num tipo de dado que suporta apenas inteiros, você não obterá um erro: o VBA irá arredondar o número decimal para o inteiro mais próximo e armazenar este valor na variável.
Se você atribuir um valor numérico maior do que uma variável suporta, obterá um erro de execução de estouro no VBA:
O erro acima pode ser reproduzido por um código como o exemplo a seguir:
Sub Estouro() Dim NúmeroGrande As Byte NúmeroGrande = 5000 End Sub
Esse exemplo pode ser facilmente resolvido declarando-se a variável NúmeroGrande
como um Long
. Por que não declarar todos os números com um tipo de dados com limites grandes, como Double
e evitar erros de estouro?
Declarar todas variáveis com um tipo de dados que suporta um grande intervalo não é recomendável, pois dessa forma pode ser que você aloque muita memória para compilar seus programas.
Usar ou Não Usar Integer?
Existe uma particularidade para tipos de dados Integer
: Aparentemente, durante o tempo de compilação todos dados Integer
são convertidos em Long
(mas mantendo os limites de grandeza de Integer
). Logo, em termos de desempenho, é melhor usar tipos de dados Long
ao invés de Integer
porque dessa forma você evita que o compilador faça essa conversão antes de executar o código, prejudicando o desempenho do código em tempo de compilação e execução.
Além disso, se usa especificamente o Excel e quer representar o número de uma linha numa variável, é melhor declarar essa variável como Long
, pois o Excel possui 1.048.576 e o tipo de dados Integer
suporta o valor máximo de 65.535.
O Tipo de Dados Decimal
Todos os tipos de dados da tabela numérica podem ser declarados utilizando a instrução Dim
, exceto o tipo de dados Decimal
. Isso acontece porque ele não é um tipo de dados verdadeiro, mas sim o que chamamos de subtipo do tipo de dados Variant
, que será explicado adiante. Por enquanto, o que você precisa saber é que para usar variáveis do tipo Decimal
, é necessário utilizar a função do VBA CDec
para converter uma Variant
no subtipo Decimal
, como mostra o exemplo a seguir:
Sub UsarDecimal() Dim MyDecimal As Variant MyDecimal = CDec(MyDecimal) 'resto do código... End Sub
Tipos de Dados Não numéricos
A tabela abaixo mostra os tipos de dados não numéricos que o VBA suporta:
Este exemplo faz atribuição a cada um desses tipos de dados:
Sub NãoNuméricos() Dim Nome As String Dim Nascimento As Date Dim Casado As Boolean Nome = "Felipe" Nascimento = "10/05/1983" Casado = False MsgBox "Seu nome é " & Nome MsgBox "Você nasceu em " & Nascimento If Casado = True Then MsgBox "Você é casado." Else MsgBox "Você não é casado." End If End Sub
Os tipos String podem ser usados para armazenar textos de qualquer natureza, inclusive quebras de linha e informações de arquivos binários. Uma variável declarada como String
assume valor inicial vazio, representado como ""
(duas aspas sem nenhum caractere entre elas).
Tipos Boolean
(booleanos) só podem assumir os valores True (verdadeiro) ou False (falso), então são empregados em variáveis que obtém estados de sim ou não no seu programa. Variáveis declaradas como Boolean
assumem valor inicial False.
Por enquanto, não se preocupe com dados String
de tamanho variável. Os tipos de dados Variant
e objetos serão explorados a seguir.
Datas
O tipo de dados Date
aceita números decimais. 0 corresponde à 00:00:00.000 do dia 01/01/1900, e é o valor atribuído inicialmente ao declarar um variável com esse tipo. Valores maiores ou menores que isso correspondem, respectivamente, a datas correspondentes maiores ou menores, sendo que 1 corresponde a um dia, 1/60 (aproximadamente 0,016666…) a um minuto e assim por diante. O número à esquerda da vírgula corresponde aos dias e o número à direita da vírgula corresponde às horas, minutos, segundos e frações de segundos, conforme exemplo a seguir:
O motivo de eu não ter incluído Date
na seção de tipos de dados numéricos é que ele também aceita valores de texto. Por exemplo, você pode atribuir “13/jan/2014” a uma variável do tipo Date
que o VBA fará a conversão dessa data num valor numérico de data válido, nesse caso, 41287. Você pode tentar até mesmo atribuir “22/01/14 08:25:10”, e Date
aceitará esse valor.
Variant
Variant
é uma espécie de tipo de dados curinga: ele pode assumir qualquer tipo de dado. Por que não declarar todas variáveis como Variant
então? Um dos objetivos em declarar variáveis é restringir o tipo de dados que elas podem assumir.
O valor inicial de uma variável declarada como Variant
é um valor especial do VBA chamado Empty. O exemplo a seguir comprova isso:
Sub InicialVariant() Dim v As Variant Debug.Print TypeName(v) End Sub
Na seção sobre Variant na página de variáveis e constantes são mostradas algumas particularidades interessantes do tipo de dados Variant
.
Objetos
Objetos são tipos de dados muito importantes e graças a eles é possível o VBA interagir em elementos de um aplicativo.
Um objeto pode ser qualquer coisa: um parágrafo do Word, uma célula, uma planilha, um menu do Outlook, e até mesmo um objeto personalizado pelo usuário que não tem nada a ver com um aplicativo Office. Seu valor inicial é um valor especial do VBA chamado Nothing
.
Objetos possuem propriedades e métodos. Propriedades podem ser entendidas como características de um objeto, e métodos, uma ação que o mesmo promove. Por exemplo, considere o objeto carro
. Entre suas propriedades, podemos citar cor, quilometragem, chassi, marca, modelo, etc. Os métodos poderiam ser exemplificados nas ações ligar o carro, desembaçar o vidro, frear, buzinar. Se considerarmos uma propriedade como um adjetivo, certamente um método é um verbo.
Na representação de uma propriedade ou método de um objeto, você deve utilizar um sinal de ponto final. O exemplo abaixo atribui um valor à propriedade Value
de um objeto Range
e depois executa o método Select
de um objeto Range
para selecionar a célula B5:
Range("A1").Value = 25 Range("B5").Select
Uma propriedade de um objeto pode ser outro objeto: uma das propriedades do objeto Avião
se chama Piloto
, e essa propriedade é preenchida por um objeto do tipo Piloto
, que possui suas próprias propriedades e métodos. No Word, o objeto Paragraph
possui uma propriedade que chamada Style
, e esta propriedade é também um objeto.
Coleções
Existem também propriedades de objetos que se chamam coleções, que podem armazenar vários objetos de um mesmo tipo. Por exemplo: o objeto SistemaSolar
possui uma coleção chamada Planetas
. O primeiro item da coleção Planetas
é um objeto Planeta
cuja propriedade Nome
tem o valor Marte. No Excel, o objeto ActiveWorkbook
possui uma propriedade chamada Worksheets
que é uma coleção. O exemplo abaixo exibe se o modo de autofiltro do objeto Worksheet
de nome Plan1 está habilitado ou não:
MsgBox ActiveWorkbook.Worksheets("Plan1").AutoFilterMode
Worksheets
com Worksheet
. Worksheets
é uma coleção do objeto ActiveWorkbook
, e Worksheet
é um dos itens dessa coleção. Por fim, Worksheets("Plan1")
retorna um objeto Worskheet
, pois é um item da coleção Worksheets
.Descobrir Tipo de Dados de um Elemento
Utilize a função TypeName
para retornar o tipo de dados de um valor. O exemplo a seguir deve ser executado no Word:
Sub RetornarTipos() Dim BirthDate As Date 'Retorna 'String' Debug.Print TypeName("Felipe") 'Retorna 'Date' Debug.Print TypeName(BirthDate) 'Para ser usado no Word. Retorna 'Document' Debug.Print TypeName(ActiveDocument) End Sub
Deixar um comentário
Você precise estar logged in para postar um comentário.