Tipos de Dados

Esta página detalha os tipos de dados usados no VBA.

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
Não confunda 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

 

Sobre Felipe Gualberto

Microsoft Most Valuable Professional (MVP) de Excel.
Esta entrada foi publicada em Tutoriais e marcada com a tag , , , , , , , , , , , , , , , , , . Adicione o link permanente aos seus favoritos.