Apostilas de VBA para download

Olá Pessoal!

Estou passando por aqui só para avisar que disponibilizei na barra lateral do blog três apostilas de VBA para download.

Criei essas apostilas quando trabalhava na diretoria de Controladoria da Oi, para dar aula de VBA para algumas pessoas da minha equipe.

Usando os ensinamentos dessas apostilas, vocês conseguirão otimizar bastante o Excel, criando planilhas bem interessantes!

Espero que esse material seja de grande utilidade, principalmente para aqueles que estão iniciando no mundo do VBA!!!!

 

Abs, Dr. Excel

Gráfico Waterfall (em cascata) na Análise de Resultados – Horizontal e Vertical

Oi Pessoal!

Estou escrevendo esse post para mostrar como podemos utilizar o gráfico waterfall na análise Horizontal e Vertical das demonstrações financeiras, que são relatórios contábeis que apoiam a tomada de decisão nas empresas. Os demonstrativos mais importantes são: Demonstração de Resultados (DRE), Balanço Patrimonial e Fluxo de Caixa.

Nos exemplos abaixo, usarei apenas linhas da DRE.

Obs: vocês podem baixar o arquivo de suporte ao post, com os gráficos abaixo, no link Downloads ao lado – Gráfico Waterfall (em cascata).

Vamos lá…

Gráfico Waterfall (em cascata)

Podemos dizer que é um gráfico de colunas empilhadas, onde as séries do gráfico são compostas por uma base “invisível” e uma parcela visível que mostra a evolução / variação, por exemplo, de um item da demonstração financeira.

Análise Horizontal

A análise horizontal é utilizada na verificação da evolução no tempo dos itens das demonstrações financeiras, buscando determinar tendências e avaliar o atingimento de metas planejadas. Com esta análise podemos comparar os resultados contábeis obtidos durante o decorrer do ano com o orçamento projetado para o respectivo período.

Como exemplo, criei o waterfall abaixo para mostrar o impacto das variações de cada uma das linhas da DRE na comparação do resultado orçado com o resultado real de um período qualquer.

A partir deste gráfico conseguimos avaliar como as linhas da DRE impactaram o resultado apurado, ou seja, quais Ganhos e Perdas influenciaram no atingimento ou não da meta estabelecida (resultado orçado – primeira coluna).

Considerar as variações de receita e despesas na comparação orçado versus real como Perdas e Ganhos, significa que um aumento de receita, ou Ganho de Resultado, será representado no gráfico por uma área azul aumentando o patamar da sequência das colunas, e que uma queda da receita aparecerá como uma área vermelha diminuindo esse mesmo patamar. Para as despesas, o conceito válido é o inverso, ou seja, um aumento representa uma Perda de Resultado e uma queda de despesa (economia) um Ganho de Resultado.

Atenção: os valores de receita e despesas deste gráfico correspondem as variações do orçado vs real de cada uma das linhas. Ou seja, se orçamos R$ 100 milhões de receita e apuramos como real R$ 135 milhões, tivemos um Ganho de Resultado de +R$ 35 milhões, que aparecerá no gráfico como uma área azul no valor de R$ 35 Milhões.

Análise Vertical

Quanto à análise vertical, usamos para ter ideia da representatividade de um item da demonstração financeira em relação a outro que estabelecemos como parâmetro. Por exemplo, podemos verificar qual é o percentual gasto com despesa de pessoal em relação ao valor total de despesas de um determinado período.

A aplicabilidade dessa análise pode ser melhor visualizada no waterfall abaixo que criei como exemplo.

Este gráfico mostra a representatividade de cada uma das despesas em relação a receita usada como parâmetro, ou seja, partindo de 100% da receita, conseguimos avaliar quanto cada uma das “nossas despesas” consumiu até obtermos o resultado apurado, que nada mais é que a receita diminuída das despesas.

Além de ser útil para verificarmos se os patamares de despesas apurados (realizados) estão de acordo com o que planejamos, esse tipo de análise é muito interessante, por exemplo, para compararmos os gastos de produtos e áreas similares ou mesmo para efetuarmos benchmark com a concorrência, buscando mensurar a nossa eficiência operacional.

Abs, Dr. Excel

Comando Run – rodando uma macro a partir de outra

Oi Pessoal!

Vocês devem ter reparado que não atualizo o blog desde maio! Peço desculpas, mas estou fazendo uma pós-graduação no Coppead-UFRJ, que termina na próxima terça-feira, 16/08.

Bom, aproveitando que recebi alguns e-mails perguntando como rodar uma macro a partir de outra, resolvi retomar as atualizações do blog escrevendo esse post simples sobre o comando Run.

Este comando é realmente bem simples e muito útil!

Vamos supor que temos duas macros: “Principal” e “Secundária” e pretendemos que o VBA execute a segunda macro a partir da primeira. Para isso, basta utilizarmos a estrutura abaixo.

Sub Principal ( )

Run “Secundária”

End Sub

Abs Dr. Excel

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 de Data e Hora no VBA (Date, Time, Day, Month, Now, MonthName, Hour, DateDiff, DateAdd, Year, WeekDay, WeekDayName)

A Função Date

Retorna a data corrente do sistema, sem precisar de parâmetro.

Exemplo de código:

Sub Função_Date()

MsgBox Date()

End Sub

 A Função Time

 Retorna a hora corrente do sistema, sem precisar de parâmetro.

Exemplo de código:

Sub Função_Time()

MsgBox Time()

End Sub

 A Função Day

Retorna um número entre 1 e 31, indicando o dia do mês de um parâmetro informado.

Exemplo de código:

Sub Função_Day()

MsgBox Day(Date)

End Sub

 A Função Month

 Retorna um número entre 1 e 12, indicando o mês do ano de um parâmetro informado.

Exemplo de código:

Sub Função_Month()

MsgBox Month(Date)

End Sub

A Função Now

Retorna a hora e a data corrente do sistema, sem precisar de parâmetro.

Exemplo de código:

Sub Função_Now()

MsgBox Now()

End Sub

A Função MonthName

Esta Função recebe como parâmetro um número indicativo de um mês, retornando o nome correspondente por extenso ou de forma abreviada. A sintaxe é a seguinte: MonthName(número_do_mês) ou MonthName(número_do_mês, true) para nome abreviado.

Exemplo de código:

Sub Função_MonthName()

MsgBox MonthName(Month(Date))

End Sub

Ou ainda, com abreviação:

Sub Função_MonthName_abreviação()

MsgBox MonthName(Month(Date), True)

End Sub

Função Hour

Recebe uma hora como parâmetro e retorna um número entre 0 e 23, que indica a hora exata.

Exemplo de código:

Sub Função_Hour()

MsgBox Hour(Time)

End Sub

A Função DateDiff

Esta Função retorna o número de intervalos (em dias, trimestres, semestres, anos etc.) entre duas datas informadas. A sintaxe é a seguinte: DateDiff(intervalo, data1, data2).

Os valores para parâmetros de intervalo são os seguintes:

Parâmetro

Descrição

yyyy anos
q trimestres
m meses
y dias do ano (o mesmo que dias)
d dias
w semanas
ww semanas do ano (o mesmo que semanas)
h horas
n minutos
s segundos

Exemplo de código:

 Sub Função_DateDiff()

MsgBox DateDiff(“h”, “01/01/2008”, “13/05/2008”)

End Sub

 Ao ser executado, o código acima retornará uma caixa de mensagem com o valor 3192.

A Função DateAdd

 Os valores para parâmetros de intervalo são os seguintes:

Parâmetro

Descrição

yyyy anos
q trimestres
m meses
y dias do ano (o mesmo que dias)
d dias
w semanas
ww semanas do ano (o mesmo que semanas)
h horas
n minutos
s segundos

 Esta Função retorna uma data futura, com base em uma data informada. A sintaxe é a seguinte:

DateAdd(intervalo, número_de_intervalos, data), onde o intervalo é o tipo do período a ser acrescentado e o número_de_intervalos a quantidade.

Exemplo de código:

 Sub Função_DateAdd()

MsgBox DateAdd(“m”, “1000”, “13/05/2008”)

End Sub

 Ao ser executado, o código acima retornará uma caixa de mensagem com o seguinte resultado:

 13/9/2091

A Função Year

Retorna o ano de uma determinada data informada como parâmetro.

Exemplo de código:

 Sub Função_Year()

MsgBox Year(Date)

End Sub

 A Função WeekDay

 Retorna o dia da semana de uma determinada data informada como parâmetro. A sintaxe é a seguinte: WeekDay(data), onde Domingo será considerado o primeiro dia, ou WeekDay(data, prim_dia_semana), onde é indicado o dia da semana a ser considerado como o primeiro.

Exemplo de código:

Sub Função_WeekDay()

MsgBox WeekDay(“13/05/2008”)

End Sub

 Ao ser executado, o código acima retornará uma caixa de mensagem com o valor 3 como resultado.

 Ou ainda, com parâmetro de alteração do primeiro dia padrão (Domingo):

 Sub Função_WeekDay()

MsgBox WeekDay(“13/05/2008”,2)

End Sub

 Ao ser executado, o código acima retornará uma caixa de mensagem com o valor 2 como resultado.

 A Função WeekDayName

Retorna o nome da semana relacionado a um número informado como parâmetro, podendo ser abreviado, caso o segundo parâmetro da Função seja True.

Exemplo de código:

 Sub Função_WeekDayName()

MsgBox WeekDayName(“5”,True)

End Sub

Ao ser executado, o código acima retornará uma caixa de mensagem com o texto qui.

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 Matemáticas no VBA (Abs, Atn, Cos, Exp, Log, Rnd, Sng, Sin, Sqr e Tan)

Oi Pessoal!

Estava procurando uma Função de VBA no Google e por acaso achei uma tabela com as Funções abaixo. Para quem interessar…

Abs(n) – Retorna o valor absoluto (sem sinal) do número n.

Atn(n) – Retorna o valor do arco, cuja tangente é o número n,

que deve ser informado em radianos.

Cos(n) – Retorna o cosseno do número n, que deve ser informado em radianos.

Exp(n) – Retorna o número e (logaritmo neperiano e=2,7183) elevado ao número n.

Log(n) – Retorna o logaritmo natural do número n.

Rnd(n) – Retorna um número aleatório entre 0 e 1.

Sgn(n) – Retorna -1 para números negativos e 1 para números positivos.

Sin(n) – Retorna o seno do número n, que deve ser informado em radianos.

Sqr(n) – Retorna a raiz quadrada do número n.

Tan(n) – Retorna a tangente do número n, que deve ser informado em radianos.

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 para tratamento de Texto no VBA (Asc, Chr, Len, LCase, UCase, Left, Right e Mid)

Oi Pessoal!

Dando continuidade ao aprendizado de VBA, neste post falarei de algumas Funções usadas para tratamento de texto.

 

A Função Asc

 

Esta Função retorna o valor numérico do código ASCII da primeira letra de uma String.

Obs: ASCII é uma sigla para “American Standard Code for Information Interchange” (Código Padrão Norte-americado para Intercâmbio de Informações). Esse código foi criado visando a padronização dos códigos para caracteres alfa-numéricos (letras, sinais, números e acentos).
O ASCII é um código numérico que representa os caracteres, usando uma escala decimal de 0 a 127, que são convertidos pelo computador para binários.

Exemplo de código:

Sub Função_Asc()

MsgBox Asc(“Curso de VBA”)

End Sub

 

Ao ser executado, o código acima mostrará uma caixa de mensagem com o valor 67 como resultado.

A Função Chr

Esta Função retorna o caractere ASCII associado ao número informado como parâmetro.

Exemplo de código:

 

Sub Função_Chr()

MsgBox Chr(65)

End Sub

 

Ao ser executado, o código acima mostrará uma caixa de mensagem com a letra A como resultado.

Obs: usamos o Chr(13) para simular o comando <ENTER>, que efetua a quebra de linhas no código.

 

A Função Len

 

Esta Função determina o tamanho da String (quantidade de caracteres) informada como parâmetro, considerando inclusive os espaços em branco.

Exemplo de código:

Sub Função_Len()

MsgBox Len(“Curso de VBA”)

End Sub

Ao ser executado, o código acima retornará uma caixa de mensagem com o valor 12, que corresponde ao número de caracteres do texto entre parênteses: Curso de VBA.

 

Obs: conforme falei acima, repare que cada “espaço” conta como um caractere!

 

A Função LCase

Esta Função converte as letras de uma String para minúsculas.

Exemplo de código:

Sub Função_LCase()

MsgBox LCase(“Curso de VBA”)

End Sub

Ao ser executado, o código acima mostrará uma caixa de mensagem com o seguinte resultado: curso de vba

Função UCase

 

Esta Função converte as letras de uma String para maiúsculas.

Exemplo de código:

Sub Função_UCase()

MsgBox UCase(“Curso de VBA”)

End Sub

Ao ser executado, o código acima mostrará uma caixa de mensagem com o seguinte resultado: CURSO DE VBA

A Função Left

 

Esta Função retorna todos os caracteres de uma String, iniciando pela esquerda e considerando os espaços em branco, até uma determinada posição. A sintaxe é a seguinte: Left(String, n), onde n determina a posição do último caractere que deve aparecer no resultado.

Exemplo de código:

Sub Função_Left()

MsgBox Left(“Curso de VBA”, 5)

End Sub

Ao ser executado, o código acima mostrará uma caixa de mensagem com o seguinte resultado: Curso

A Função Right

 

Esta Função retorna todos os caracteres de uma String, iniciando pela direita e considerando os espaços em branco, até uma determinada posição. A sintaxe é a seguinte: Right(String, n), onde n determina a posição do último caractere que deve aparecer no resultado.

Exemplo de código:

Sub Função_Right()

MsgBox Right(“Curso de VBA”, 3)

End Sub

 

Ao ser executado, o código acima mostrará uma caixa de mensagem com o seguinte resultado: VBA

A Função Mid

 

Esta Função retorna todos os caracteres de uma String, iniciando e terminando em posições informadas. A sintaxe é a seguinte: Mid(String, m, n), onde m determina a posição do primeiro caractere que deve aparecer no resultado e n a posição do último.

Exemplo de código:

Sub Função_Mid()

MsgBox Mid(“Curso de VBA”,6, 3)

End Sub

 

Ao ser executado, o código acima mostrará uma caixa de mensagem com o seguinte resultado: de

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.

Melhorando a performance e a aparência do seu trabalho! (Application.ScreenUpdating e Application.Calculation)

Oi Pessoal!

Sempre que verifico o status dos acessos diários do blog, dou uma olhada nos termos pelos quais os usuários acharam o blog.

Hoje vi uma busca bem interessante: “executar macro em Excel sem exibir processos no fundo”.

Bom, não sei quem efetuou essa busca, mas resolvi escrever esse post, pois lembro que fiquei bastante empolgado quando descobri a linha de código capaz de realizar essa ação, que realmente fez a diferença na velocidade e aparência do meu trabalho em Controladoria e Finanças!

Vamos lá…

Para executar uma Macro sem exibir os processos no fundo, ou seja, sem que o usuário veja o que o Excel está fazendo, basta incluir o comando Application.ScreenUpdating = False no início do código da Macro.

Sem dúvida, essa é uma das melhores formas de fazer com que o Excel leve menos tempo para executar uma Macro, além de dar uma “cara” mais profissional ao seu trabalho! O ganho de tempo é realmente visível…

Outra forma que uso muito para melhorar a performance das minhas Macros é desativando o cálculo do Excel com o comando Application.Calculation = xlCalculationManual. Em planilhas com muitas fórmulas o ganho é notável. Só não esqueçam de ativar o cálculo novamente no final do código com o comando Application.Calculation = xlCalculationAutomatic!

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 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.