Funções de Conversão de Tipos: Cbool, CByte, CCur, CDate, CDbl, CInt, CLng, CSng, CStr, Int

Oi Pessoal!

Neste post vou falar sobre como podemos modificar o tipo de dado armazenado em uma variável usando Funções de conversão.

Existem situações em que precisamos converter um determinado tipo de dado para que o sistema consiga efetuar operações. Por exemplo, só conseguiremos efetuar cálculos com um número armazenado na forma de texto se o convertermos para Integer ou Double, que são dois subtipos do VBA que usamos para identificar dados numéricos de uma variável.

Para entender melhor sobre os tipos que temos no VBA, veja o post Declaração de Variáveis VBA (comandos Dim e Option Explicit).

A Função Cbool

 

Esta Função converte uma variável ou expressão para o tipo Boolean (Verdadeiro ou Falso). O argumento desta Função não pode ser texto, caso contrário, ocorrerá erro em tempo de execução.

Exemplo de código:

Sub Função_Cbool()

x = 10 > 36

y = 3

MsgBox CBool(x) & Chr(13) & CBool(y)

End Sub

 

Neste exemplo, a primeira Função da mensagem, CBool(x), retorna Falso como resultado, pois a variável x representa uma expressão errada, já que 10 não é maior que 36.

A segunda Função da mensagem, Cbool(y), sempre resultará em Verdadeiro para qualquer valor diferente de zero.

A Função CByte

Esta Função converte uma variável ou expressão para o tipo Byte. O valor a ser convertido deve estar entre 0 e 255 e não pode ser um texto, para não termo erro em tempo de execução.

Exemplo de código:

Sub Função_CByte()

MsgBox CByte(5 + 20) & Chr(13) & CByte(50)

End Sub

 

A expressão 5+20 é calculada e o resultado, 44, é convertido para o tipo Byte.

Após executarmos o código abaixo, o Excel mostrará uma mensagem de erro em tempo de execução, pois o valor para conversão não está entre 0 e 255.

Exemplo de código:

 

Sub Função_CByte_Erro()

MsgBox CByte(200+70)

End Sub

 

A Função CCur

Esta Função converte uma variável ou uma expressão para o tipo Currency, não podendo o seu argumento ser um texto, para não termos erro em tempo de execução.

Exemplo de código:

 

Sub Função_CCur()

MsgBox CCur(324.4333322 + 12.2234443) & Chr(13) & CCur(543.455666)

End Sub

A Função CDate

Esta Função converte uma variável ou expressão para o tipo Date, mas para não termos erro em tempo de execução, seu argumento deve estar em um formato aceitável para datas.

Exemplo de código:

 

Sub Função_CDate()

MsgBox CDate(“13/05/2008”) & chr(13) & CDate(“13-05-2008”)

End Sub

 

A Função CDbl

 

Esta Função converte uma variável ou expressão para o tipo Double (usado para números grandes com casas decimais).

Seu argumento deve ser um texto para não termos erro em tempo de execução.

Exemplo de código:

 

Sub Função_CDate()

MsgBox CDbl(“3.551232E-32”)

End Sub

 

A Função CInt

Esta Função converte uma variável ou expressão para o tipo Integer, não podendo o seu argumento ser um texto, para não gerar erro em tempo de execução.

Exemplo de código:

 

Sub Função_CInt()

MsgBox CInt(100.45) & Chr(13) & CInt(23.35 + 43.455)

End Sub

A Função CLng

Esta Função converte uma variável ou expressão para o tipo Long, não podendo o seu argumento ser um texto ou estar fora da faixa admitida pelo tipo Long, para não gerar erro em tempo de execução.

 

Exemplo de código:

 

Sub Função_CLng()

MsgBox CLng(“342227865”)

End Sub

 

A Função CSng

 

Esta Função converte uma variável ou expressão para o tipo Single, não podendo o seu argumento ser um texto ou estar fora da faixa admitida pelo tipo Single, para não gerar erro em tempo de execução.

Exemplo de código:

 

Sub Função_CSng()

MsgBox CSng(“5.234454667”)

End Sub

 

A Função CStr

A Função CStr converte uma variável ou expressão para o tipo String.

Exemplo de código:

 

Sub Função_CStr()

MsgBox CStr(2300) & ” hectares de terra”

End Sub

 

A Função Int

 

A Função Int retorna somente a parte inteira de um determinado número.

Exemplo de código:

 

Sub Função_Int()

MsgBox Int(-9.43) & Chr(13) & Int(3.27)

End Sub

Abs, Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.

Funções Array, IsArray, VarType, IsDate, IsEmpty, IsNull, IsNumeric

Oi Pessoal!

Neste post vou citar algumas funções do VBA que servem para verificarmos o tipo de dado armazenado em uma variável.

Existem diversas Funções para determinar o tipo de valor contido em uma variável. Essas Funções servem, por exemplo, para validarmos o preenchimento de um formulário, verificando se o usuário digitou texto em um campo de valor numérico.

Um Array é um conjunto ou tipo especial de variável que pode armazenar diversos valores em uma única variável. Cada um de seus elementos é acessado através de um índice que inicia em zero, com a seguinte sintax: NomeArray (índice).

Importante: como o índice de um Array começa em zero, para declarar um Array de 30 elementos chamado Teste, usaremos a seguinte sintaxe: Dim Teste (29).

Exemplo de código:

 

Sub Array_Declaração()

Dim Meses(5)

Meses(0) = “janeiro”

Meses(1) = “fevereiro”

Meses(2) = “março”

Meses(3) = “abril”

Meses(4) = “maio”

Meses(5) = “junho”

For i = 0 To 5

Mensagem = Mensagem & “Mês ” & i + 1 & “: ” & Meses(i) & Chr(13)

Next

MsgBox Mensagem

End Sub

 

 

A Função IsArray

Utilizamos a Função IsArray para verificar se uma variável é do tipo Array, ou seja, se está armazenando elementos de um conjunto. A sintaxe desta Função é IsArray(NomedaVariável) e resulta em Verdadeiro nos casos positivos, ou Falso nos casos negativos.

Acrescentando o comando MsgBox IsArray(Meses) ao exemplo de código anterior, o Excel mostrará a mensagem Verdadeiro como resultado.

 

 

A Função VarType

Utilizamos a Função VarType para verificar o tipo de dado armazenado em uma variável. Com a sintaxe VarType(NomeDaVariável), ela retorna um número inteiro que indica o tipo de dado armazenado, conforme relação abaixo.

0 – Vazio (não inicializado)

1 – Nulo (dados não válidos)

2 – Inteiro

3 – Inteiro longo

4 – Número de precisão simples

5 – Número de precisão dupla

6 – Monetário

7 – Data

8 – Texto

9 – Objeto de automação

10 – Erro

11 – Boleano (Verdadeiro ou Falso)

12 – Variant (somente utilizado com Arrays de variantes)

13 – Objeto para acesso a dados

17 – Byte

8192 – Array

Exemplo de código:

 

Sub Função_Var_Type()

Dim x, y, z

Dim a, b

Dim c(20)

Dim Mensagem As String

x = 10

y = 1324678976

a = “Valor de texto”

b = Date

Mensagem = “Tipo da variável x: ” & VarType(x) & Chr(13)

Mensagem = Mensagem & “Tipo da variável y: ” & VarType(y) & Chr(13)

Mensagem = Mensagem & “Tipo da variável z: ” & VarType(z) & Chr(13)

Mensagem = Mensagem & “Tipo da variável a: ” & VarType(a) & Chr(13)

Mensagem = Mensagem & “Tipo da variável b: ” & VarType(b) & Chr(13)

Mensagem = Mensagem & “Tipo da variável c: ” & VarType(c) & Chr(13)

MsgBox Mensagem

End Sub

Obs: reparem no exemplo acima que utilizamos a Função Date como valor da variável b. Usamos essa Função quando queremos que o Excel nos informe a data do sistema.

 

A Função IsDate

Esta Função verifica se determinada variável ou expressão é uma data válida, retornado Verdadeiro em caso positivo, ou Falso em caso negativo. É usada, por exemplo, para validar a digitação de um campo de data em um formulário.

A sintaxe é a seguinte: IsDate(NomeDaVariável) ou IsDate(expressão).

Exemplo de código:

 

Sub Função_IsDate()

Dim x

x = Date

If IsDate(x) Then

MsgBox “A variável é uma data válida!”

Else

MsgBox “A variável não é uma data válida!”

End If

End Sub

 

A Função IsEmpty

Esta Função verifica se uma variável ou expressão possui valor, retornando Verdadeiro em caso positivo ou Falso em caso negativo. Ela nos permite, por exemplo, verificar se um campo de preenchimento obrigatório em um formulário está em branco. A sintaxe é a seguinte: IsEmpty(NomeDaVariável) ou IsEmpty(expressão).

Exemplo de código:

 

Sub Função_IsEmpty()

Dim a, b, c

a = 5

b = 7

If IsEmpty(x) Then

MsgBox “A variável x não está em uso!”

End If

End Sub

 

A Função IsNull

Esta Função verifica se o valor de uma variável ou expressão é Null, retornando Verdadeiro em caso positivo ou Falso em caso negativo. A sintaxe é a seguinte: IsNull(NomeDaVariável) ou IsNull(expressão).

Importante: uma variável com valor Null, apesar de não ter nenhum valor definido, continua existindo na memória e é diferente de uma variável com valor zero ou de uma variável de texto de tamanho zero.

Sub Função_IsNull()

Dim x

x = Null

If IsNull(x) Then

MsgBox “A variável x é Nula!”

End If

End Sub

 

A Função IsNumeric

 

Esta Função verifica se o valor de uma variável ou expressão é numérico ou se pode ser convertido em numérico.

Retornando Verdadeiro em caso positivo ou Falso em caso negativo, tem a seguinte sintaxe: IsNumeric(NomeDaVariável) ou IsNumeric(expressão).

Exemplo de código:

 

Sub Função_IsNumeric()

Dim x, y, z

x = 345

y = “Excel 2007”

z = Date

Mensagem = “O valor de x: ” & x & ” é numérico? ” & IsNumeric(x) & Chr(13)

Mensagem = Mensagem & “O valor de y: ” & y & ” é numérico? ” & IsNumeric(y) & Chr(13)

Mensagem = Mensagem & “O valor de z: ” & z & ” é numérico? ” & IsNumeric(z)

MsgBox Mensagem

End Sub

Abs, Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.

Estrutura Do … Loop (While, Until e Wend) – VBA

Oi pessoal!

Conforme prometido no post anterior, vamos falar da estrutura Do…Loop!

Utilizamos essa estrutura para repetir um trecho de código enquanto uma determinada condição for verdadeira, ou até que uma determinada condição torne-se verdadeira. Podemos usar dois operadores condicionais diferentes, que podem aparecer no início ou no final do trecho de código, são eles: While e Until. Com isso, temos quatro formas distintas de escrever o código, conforme veremos nos exemplos a seguir.

Essa estrutura nos permite, por exemplo, criar um código determinando que o VBA percorra as células de uma coluna, preenchendo uma fórmula em todas as células até encontrar a primeira célula vazia (“”) ou até encontrar um determinado valor.

Nos exemplos a seguir, observe que o código dentro da estrutura será executado enquanto a condição (Contador <= x) for verdadeira. Quando a condição for falsa, o primeiro comando após o laço será executado (MsgBox “Soma = ” & Soma).

Importante: o código dentro da estrutura deve ser capaz de alterar a condição de verdadeira para falsa. Caso contrário, sendo a condição sempre verdadeira, os comandos dentro da estrutura serão executados infinitamente ou até o programa travar!

Agora, vamos aos exemplos das quatro formas de escrever o código dessa estrutura! Reparem que em todas obtemos o mesmo resultado.

 

Exemplo de código com While no início do trecho de código:

Sub Do_Loop_While_no_início()

Dim x, Contador, Soma

x = 10

Contador = 1

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores que zero.

Do While Contador < x

Soma = Soma + Contador

Contador = Contador + 1

Loop

MsgBox “Soma = ” & Soma

End Sub

Exemplo de código com While no final do trecho de código:

Sub Do_Loop_While_no_final()

Dim x, Contador, Soma

x = 10

Contador = 1

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores que zero.

Do

Soma = Soma + Contador

Contador = Contador + 1

Loop While Contador < x

MsgBox “Soma = ” & Soma

End Sub

Nos exemplos a seguir, observe que o código dentro da estrutura será executado enquanto a condição (Contador > x) for falsa. Quando a condição for verdadeira, o primeiro comando após o laço será executado (MsgBox “Soma = ” & Soma).

Importante: o código dentro da estrutura deve ser capaz de alterar a condição de falsa para verdadeira. Caso contrário, sendo a condição sempre verdadeira, os comandos dentro da estrutura serão executados infinitamente ou até o programa travar!

Exemplo de código com Until no início do trecho de código:

Sub Do_Loop_Until_no_início()

Dim x, Contador, Soma

x = 10

Contador = 1

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores que zero.

Do Until Contador >= x

Soma = Soma + Contador

Contador = Contador + 1

Loop

MsgBox “Soma = ” & Soma

End Sub

 

Exemplo de código com Until no final do trecho de código:

Sub Do_Loop_Until_no_final()

Dim x, Contador, Soma

x = 10

Contador = 1

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores que zero.

Do

Soma = Soma + Contador

Contador = Contador + 1

Loop Until Contador >= x

MsgBox “Soma = ” & Soma

End Sub

Essa é uma das estruturas que mais uso no desenvolvimento de relatórios de acompanhamento de resultados em Controladoria e Finanças. Mas na prática, acabo usando o laço While … Wend, que é equivalente ao primeiro exemplo acima!

Tentem, por exemplo, executar o código abaixo. Com certeza vocês visualizarão um caixa de mensagem com a soma dos dez primeiros números maiores que zero, que é igual a 45!

 

 

Sub While_Wend()

Dim x, Contador, Soma

x = 10

Contador = 1

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores que zero.

While Contador < x

Soma = Soma + Contador

Contador = Contador + 1

Wend

MsgBox “Soma = ” & Soma

End Sub

Abs Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.

As Estruturas Select Case e For … Next … Step – VBA

Oi Pessoal!

Dando continuidade ao aprendizado de VBA, vou falar de mais duas estruturas: Select Case e For…Next.

Vamos começar pela Select Case…

Aqui, quando um dos testes lógicos for verdadeiro, os comandos relacionados serão executados e os demais testes nem serão avaliados, seguindo a execução do código para o primeiro comando após o End Select (última linha de código desta estrutura).

Importante: quem leu o post anterior vai concluir que para realização de uma série de testes, esta estrutura é mais eficiente e de leitura mais simples que a estrutura If…Then, que avalia todos os testes da série.

Exemplo de código:

 

Sub Estrutura_Select_Case()

‘ Declaração de variáveis.

Dim x

x = 6

‘Teste lógico.

Select Case x

Case 1

MsgBox “O valor de x é 1!”

Case 2

MsgBox “O valor de x é 2!”

Case 3

MsgBox “O valor de x é 3!”

Case 4

MsgBox “O valor de x é 4!”

Case 5

MsgBox “O valor de x é 5!”

Case Else

MsgBox “x não é um número inteiro menor que 5!”

End Select

End Sub

Falando agora da For…Next

Utilizamos essa estrutura para repetir um trecho de código por um determinado número de vezes.

Geralmente usamos uma variável, que de acordo com a lógica estabelecida no código, servirá de contador, variando de um valor inicial definido até um valor final.

Podemos, por exemplo, pedir ao VBA que percorra as células de uma determinada coluna no Excel para informar a posição (número da linha) ou o valor do último registro desta coluna.

Exemplo de código:

 

Sub For_Next()

Dim x, Soma

x = 10

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores do que zero.

For i = 1 To x

Soma = Soma + i

Next

MsgBox “Soma = ” & Soma

End Sub

 

Quando executarmos o código acima, o Excel exibirá uma Caixa de Mensagem com o resultado Soma = 55

A estrutura For…Next…Step

 

Agora, acrescentaremos o comando Step à estrutura para informar ao VBA quais números dentro do intervalo deverão ser considerados na operação. No exemplo abaixo, com Step 2, o VBA somará 2 ao último valor encontrado da variável i, até que a mesma alcance seu valor máximo.

 

Sub For_Next_Step()

Dim x, Soma

x = 10

Soma = 0

‘ Efetua a soma dos primeiros números ímpares menores do que dez.

For i = 1 To x Step 2

Soma = Soma + i

Next

MsgBox “Soma = ” & Soma

End Sub

Quando executarmos o código acima, o Excel exibirá uma Caixa de Mensagem com o resultado Soma = 25

No próximo post sobre VBA, pretendo falar da estrutura Do…Loop, que usamos para repetir um trecho de código enquanto uma determinada condição for verdadeira, ou até que uma determinada condição torne-se verdadeira!

Abs, Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.

Estrutura If … Then (ElseIf, Else, End If) e Operadores Comparativos no VBA

O Pessoal!

Neste post vou falar da estrutura If…Then, que usamos para testar condições lógicas. Com certeza, essa é a parte do VBA que mais usei até hoje para automatizar minhas tarefas em Controladoria e Finanças!

Com esta estrutura podemos efetuar comparações entre os valores de duas ou mais variáveis, determinando no código que o VBA execute Funções ou comandos a partir do resultado de um teste lógico.

Podemos, por exemplo, determinar que o VBA formate o fundo de uma célula com vermelho, caso o valor preenchido nesta célula seja menor que zero.

 

A tabela abaixo contém operadores comparativos que podemos usar nessa estrutura.

 

Exemplo de código:

 

Sub Estrutura_If_Then()

‘ Declaração de variáveis.

Dim x As Integer

Dim y As Integer

x = 5

y = 3

‘ Teste lógico.

If x > y Then

‘ Comandos a serem executados quando x for maior que y.

MsgBox “x é maior que y.”

Else

‘ Comandos a serem executados quando x for menor ou igual a y.

MsgBox “x é menor que y.”

End If

End Sub

 

A estrutura acima é formada por um único teste lógico: x > y. Se esta condição for atendida, o VBA mostrará a mensagem “x é maior que y”. Caso contrário, mostrará a mensagem “x é menor que y”, independentemente do valor de x.

Neste exemplo, sendo x igual a y, teremos um problema, pois ambas mensagens não corresponderão ao resultado correto. Aqui, o ideal seria trabalharmos com três hipóteses: x > y, x < y ou x = y. No entanto, precisaríamos incluir mais uma condição à estrutura…

E o que é interessante e que justifica a utilização desta estrutura na criação de planilhas inteligentes, com validações, cálculos, formatações etc. complexos, é que podemos efetuar quantos testes forem necessários. Para isso, basta incluirmos testes adicionais utilizando ElseIf na estrutura.

 

Concluindo, quando trabalhamos com testes lógicos, utilizamos If (no primeiro teste), ElseIf (nos testes intermediários) e Else, por último, para cobrir todas as possibilidades de resultados diferentes dos esperados nos testes efetuados.

Para melhor entender o significado do Else, podemos dizer que sempre que os testes lógicos da estrutura não forem atendidos, o VBA executará os comandos após o Else.

Podemos exemplificar, alterando o código anterior da seguinte forma:

Sub Estrutura_If_Then()

‘ Declaração de variáveis.

Dim x As Integer

Dim y As Integer

x = 5

y = 3

‘ Teste lógico.

If x > y Then

‘ Comandos a serem executados quando x for maior que y.

MsgBox “x é maior que y.”

ElseIf x < y Then

‘ Comandos a serem executados quando x for menor que y.

MsgBox “x é menor que y.”

Else

‘ Comandos a serem executados quando x assumir qualquer outro valor.

MsgBox “x não é maior nem menor que y.”

End If

End Sub

Como sabemos que x só pode assumir três valores distintos em relação a y, poderíamos substituir o Else por ElseIf x = y Then.

Importante: para que o VBA entenda essa estrutura, ela deve conter obrigatoriamente If (teste lógico) Then e End If. Os intermediários ElseIf e Else podem ser usados de acordo com suas necessidades de testes lógicos, mas não são obrigatórios!

Abs, Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.

Operadores Aritméticos com Variáveis, MsgBox e Chr – VBA

Oi Pessoal!

Dando continuidade ao post Declaração de Variáveis VBA (comandos Dim e Option Explicit), vou falar sobre os operadores aritméticos que são usados em cálculos e comparações entre variáveis no VBA.

A tabela abaixo contém os principais operadores.

Como exemplo de utilização desses operadores, considere o pequeno trecho de código a seguir, onde declaramos as variáveis x, y e z, atribuímos valores a essas variáveis e em seguida efetuamos algumas operações.

Obs: as linhas que iniciam com apóstrofe são usadas como comentários, sendo desconsideradas pelo VBA na execução do código. Sugiro a inclusão de lembretes e comentários para facilitar o entendimento das linhas de código. É importante mantermos organização e padronização nas Macros que criamos para facilitar o entendimento e a manutenção.

 

Exemplo de uso de operadores aritméticos:

 

‘ Exemplo de utilização de variáveis e operadores aritméticos
‘ Declaração de variáveis.

Dim x, y, z As Integer
x = 10
y = 25
z = x*y

‘ Nesse exemplo a variável z conterá o valor 250

 

Exemplo de código:

 

Sub Operadores_Aritméticos()

‘ Declaração de variáveis.

Dim x As Integer

Dim y As Integer

Dim soma, subtração, divisão, multiplicação, intdivisão, exponenciação, módulol As Double

x = 30

y = 4

‘ Efetuando cálculos com os Operadores Aritméticos.

soma = x + y

subtração = x – y

divisão = x / y

multiplicação = x * y

intdivisão = x \ y

exponenciação = x ^ y

módulo = x Mod y

‘ Mensagens para exibição dos resultados.

MsgBox “Os números são: ” & x & ” e ” & y & Chr(13)

MsgBox “Soma: ” & soma & Chr(13) & “Subtração: ” & subtração & Chr(13)

MsgBox “Divisão: ” & divisão & Chr(13) & “Multiplicação: ” & multiplicação & Chr(13)

MsgBox “Divisão inteira: ” & intdivisão & Chr(13) & “Exponenciação: ” & exponenciação & Chr(13)

MsgBox “Resto da divisão: ” & módulo

MsgBox “FIM”

End Sub

 

Ao executar a Sub acima, você visualizará as seguintes caixas de mensagens disparadas pelo Excel (nesta sequência).

 

Para finalizar, vamos falar das funções MsgBox e Chr(número)

Conforme o exemplo anterior, usamos a Função MsgBox para exibir mensagens em uma janela Pop-Up. Para unir as diversas partes da mensagem usamos o operador de concatenação &.

A Função Chr(número) envia o caractere correspondente ao número digitado entre parênteses, que corresponde ao padrão ASCII (American Standard Caracter Interchange Information). Neste padrão, cada caractere possui um número associado. O número 13, por exemplo, está associado ao <ENTER>, ou seja, enviamos um <ENTER> para a caixa de mensagem, equivalente a uma troca de linha, para que os dados apareçam em linhas separadas.

Abs, Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.

Declaração de Variáveis VBA (comandos Dim e Option Explicit)

Oi Pessoal!

Neste post vou falar sobre declaração de variáveis no VBA e dar alguns exemplos de tipos de dados que podemos usar nessas variáveis.

Uma variável é um espaço na memória do computador reservado para armazenar um ou mais valores. Fazemos referência a este espaço utilizando nomes. Como o valor armazenado pode variar, a medida que o código VBA é executado, estas estruturas são chamadas de variáveis.

A declaração de variáveis não é obrigatória no VBA. Porém, é recomendável que declaremos todas as variáveis para facilitar a compreensão do código.

Para declararmos uma variável, utilizamos o comando Dim, que possui a seguinte sintaxe:

Dim nome_da_variável As tipo_da_variável

Exemplos:

Dim x

Dim nome

Dim teste

Nos exemplos anteriores, declaramos apenas o nome da variável, sem declarar o seu tipo (texto, inteiro, data etc.). Uma variável declarada sem tipo é considerada do tipo Variant. O que na prática significa que a variável pode conter qualquer tipo de valor. Então, a declaração do tipo é altamente aconselhável, pois impede, por exemplo, que um campo numérico contenha valores de texto e vice-versa.

Podemos declarar mais de uma variável com um único comando Dim, basta separar as variáveis com vírgula, conforme exemplificado abaixo:

Dim x,y,z As String

Dim nome As Double

Dim teste1, teste2 As Integer

 

O tipo determina quais dados podem ser armazenados em cada uma das variáveis, ou seja, variáveis que armazenam valores numéricos não devem aceitar caracteres de texto, variáveis que armazenam datas não devem aceitar datas inválidas e assim por diante. Toda variável no VBA é do tipo Variant, isto significa que a variável pode ser de qualquer tipo. O que define o tipo da variável é o valor armazenado no momento. Entretanto, existem Funções de conversão de tipo, conforme veremos mais adiante.

Também podemos utilizar variáveis que não foram explicitamente declaradas com o comando Dim. Com isso, a variável é criada na memória no momento da sua utilização.

Já para criar uma obrigatoriedade de declaração de variáveis, usamos o comando Option Explicit na seção de declaração do Módulo.

 

Ao escrevermos esse comando na seção de declaração do Módulo, estamos definindo que toda variável deve ser declarada nesta seção antes de ser utilizada em uma expressão. Neste caso, se tentarmos utilizar uma variável não declarada, o VBA mostrará uma mensagem de erro de compilação e suspenderá a execução dos comandos. No código abaixo, temos um exemplo simples de utilização de variáveis não declaradas explicitamente.

 

Option Explicit

Sub Teste_Declaração()

Dim a As Integer

Dim b As Integer

a = 5

b = 2

c = a + b

MsgBox “A variável c vale: ” & c

End Sub

Ao tentarmos executar este código, com Option Explicit na seção de declaração do Módulo (primeira linha escrita no Módulo), obteremos a mensagem de erro indicada na próxima figura, que mostra que tentamos utilizar a variável c que não foi declarada.

Bom, para finalizar, vou dar alguns exemplos dos tipos de dados que essas variáveis podem assumir…

O tipo Variant é formado por pequenas unidades chamadas subtipos, que identificam a maneira como os dados são armazenados em uma variável deste tipo. Assim, variáveis do subtipo Integer são armazenadas de maneira diferente das variáveis do subtipo Long. A tabela a seguir mostra alguns dos principais subtipos existentes.

Abs, Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.