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

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.