Você está na página 1de 18

Comandos do VBA - Excel

COPIAR DE UMA CLULA PARA OUTRA VBA


Sub copiar()
Range("b5").Select Clula que vai ser copiada
Selection.Copy
Range("a2").Select Clula que vai receber o conteudo copiado
ActiveSheet.Paste
Sheets(plan2).Select Seleciona a planilha 2
Range(a1).Select Seleciona a clula A1 da planilha 2
ActiveSheet.Paste Cola na clula A1 da planilha 2
Application.CutCopyMode = False Desseleciona a clula que foi copiada
End Sub

PULA PARA A CLULA VAZIA ABAIXO (PREENCHIMENTO DE FORMULRIO)

Private Sub CommandButton1_Click()
Range("a3").Select
Selection.EntireRow.Insert 'Insere uma linha na planilha
Range("a3") = TextBox1.Text 'Recebe o conteudo da textbox1
Range("b3") = TextBox2.Text
Range("a3").Select
End Sub
RowCount = Worksheets("Plan1").Range("A1").CurrentRegion.Rows.Count
Worksheets("Plan1").Range("A1").Offset(RowCount, 0).Value = TextBox1.Text

COMANDO PROCV NO VBA EXCEL

Sub Teste_PROCV()
[G1].FormulaLocal = "=PROCV(F1;A1:B20;2;0)"
End Sub

MsgBox Concatenando (&)

MsgBox "O maior : " & valor2, , "resultado" O ttulo da msgbox sera resultado, e a
mensagem que aparecer ser O maior : &valor2, sendo que o sinal & junta (concatena) a
mensagem com a varivel valor2 (ser mostrado o valor da varivel).

Iniciando o formulrio junto com a planilha

Abra o editor VBA, clique em EstaPasta_de_trabalho, na tela ao lado escolha workbooks e depois
escreva o cdigo:
Userform1.Open Userform1 o nome do formulrio, que pode ser outro nome
Ficar assim:

Private Sub Workbook_Open()
UserForm1.Show UserForm1 o nome do formulrio
End Sub

SELECIONAR VARIAS LINHAS

Sub Seleciona()
Set myunion = Union(Range("a1"), Range("d5"), Range("b1:b5"))
myunion.Select
End Sub

PULAR LINHA

Private Sub PularLinha_Click()
ActiveCell.Offset(1, 0).Activate Esse comando vai pulando para a linha de baixo
ActiveCell.Offset(-1, 0).Activate Esse comando vai pulando para a linha de cima
ActiveCell.Offset(0, 1).Activate Esse comando vai pulando para a clula da direita
ActiveCell.Offset(0, -1).Activate Esse comando vai pulando para a clula da esquerda
ActiveCell.Offset(1, 0).Range("b2").Select Pula uma linha para baixo a partir da clula B2
End Sub


Comandos do VBA - Excel



FORMATANDO A CLULA

Range("d4").Interior.ColorIndex = 36 36 referente a cor amarela
Range(a1).HorizontalAlignment = xlCenter Centraliza o contedo da clula
ActiveCell.BorderAround (1) Adiciona borda, o numero entre parenteses refere-se ao
tipo de borda. 1 = Borda Simples e 9 = Borda Dupla
[b2].BorderAround (9) Tambm adciona borda este mtodo
Range("a1").Borders(xlEdgeBottom).LineStyle = 9 = Esse mtodo tambm insere borda, s que
aqui estou especificando pra s colocar borda na parter inferior da clula (xlEdgeBottom) com o
comando Borders().
ActiveCell.Characters.Font.Size = 22 Altera o tamanho da Fonte
ActiveCell.Characters.Font.Name = "algerian" Altera o tipo da fonte para Algerian
[b2].Characters.Font.Name = "algerian" Esse mtodo tambm altera a fonte
ActiveCell.Characters(Start:=2, Length:=2).Font.Name = Algerian Esse mtodo muda somente
a partir da 2 letra (Start := 2) do que estiver escrito na clula selecionada e apenas 2 caracteres
(Length := 2). Por exemplo: Se digita-se marcelo na clula apenas a letra a e r ficaria no
estilo Algerian.
ActiveCell.Font.FontStyle = "itlico" Mudo o estilo da Fonte
Columns("b:b").AutoFit Adapta o tamanho da coluna ao tamanho da escrita
Rows("2:2").AutoFit Adapta o tamanho da linha ao tamanho da escrita
Range("b3").FormulaLocal = "=pri.maiuscula(b2)" converte a incial da String em maiscula, no
caso b3 recebe a string digitada em b2 com a inicial j maiscula
Rows("1:1").RowHeight = 18 Aumenta o tamanho da linha
Columns("b:b").ColumnWidth = 20 Aumenta o tamanho da coluna
Range("a2") = UCase(Range("a1")) A clula A2 recebe a string digitada em A1 (minscula) j
convertido em maisculo.

ADCIONANDO COMENTRIOS

Range("b2").AddComment ("Marcelo") Adciona o comentrio Marcelo na clula B2
ActiveCell.AddComment (Marcelo) Adciona o comentrio Marcelo na clula selecionada
ActiveCell.ClearComments Limpa o comentrio
ActiveCell.AddComment.Text Text:="Marcelo" & Chr(10) & "maisa" Adciona comentrio,
chr(10) para pular linha

COMANDO FIND (PESQUISAR)

Private Sub CommandButton1_Click()
On Error GoTo erro Comando para imprimir mensangem de erro se nada for
encontrado
If TextBox1.Text = "" Then Imprime uma mensagem se a pesquisa estiver em branco
MsgBox "Informe o valor a ser procurado", , "Pesquisar"
End If
Cells.Find(what:=TextBox1, after:=ActiveCell, lookat:=xlPart).Activate Comando para
pesquisar
Exit Sub
erro:
MsgBox "Nada encontrado", , "ERRO" Mensagem de erro(especificado acima)
quando o texto pesquisado no encontrado
End Sub

CONTADOR DE REGISTROS

Label1 = Application.WorksheetFunction.CountA(Plan1.Columns(1)) Contador para a coluna 1,
caso queira comear a contar a partir de uma determinada linha coloque por exemplo: -1 para
contar a partir da segunda linha da coluna escolhida, no exemplo aqui coluna 1 (Columns(1))
Label1 = (Application.WorksheetFunction.CountIf(Columns("a:a"), TextBox1.Text)) Nesse
exemplo contado as clulas que se repetem de acordo com o critrio adotado, aqui
TextBox1.Text ira receber algum texto e se esse texto se repetir na Coluna A ento ser
contado quantas vezes se repetiu.



Comandos do VBA - Excel
CRIANDO UM CONTADOR COM O BOTAO SPINBUTTON

Private Sub SpinButton_SpinDown() Procedimento do boto SpinButton declarado na
Parte superior (Relativo ao boto para baixo
cont = cont 1 Quando clicar na seta para baixo ir decrementar
If cont < 0 Then Se for menor zero entao fica como valor minimo 0 (zero)
cont = 0
End If
Label1.Caption = cont Label que recebe o valor do contador
End Sub

Private Sub SpinButton_SpinUp() Relativo ao boto para cima
cont = cont + 1 Quando clicar na seta para cima ir incrementar
Label1.Caption = cont Label que recebe o valor do contador
End Sub

CRIANDO UM CONTADOR COM O BOTO SCROLLBAR

Private Sub ScrollBar1_Change() Contador clicando nas setas para cima e para baixo
cont = ScrollBar1.Value
Label1.Caption = cont
End Sub

Private Sub ScrollBar1_Scroll() Contador clicando no meio da scrollbar arrastando-a
cont = ScrollBar1.Value
Label1.Caption = cont
End Sub

NAVEGANDO ENTRE AS CLULAS COM O BOTO SpinButton

Private Sub contador_SpinDown() Move uma clula para baixo
ActiveCell.Offset(1, 0).Activate

End Sub

Private Sub contador_SpinUp() Move uma clula para cima
ActiveCell.Offset(-1, 0).Activate
End Sub

NAVEGANDO ENTRE AS CLULAS COM O BOTAO ScrollBar

Public cont As Integer
Dim soma As Integer

Private Sub ScrollBar1_Change()
soma = cont
cont = ScrollBar1.Value
If cont > soma Then
ActiveCell.Offset(1, 0).Activate
Else
ActiveCell.Offset(-1, 0).Activate
End If
Label1.Caption = cont
End Sub

COLORINDO CLULAS

Sub CORES()
Range("A1").SelecT
For I = 1 To 56
ColorIndex = I
ActiveCell.Interior.ColorIndex = ColorIndex
ActiveCell.Offset(1, 0).Activate
Next
End Sub

Comandos do VBA - Excel


Sub CORES()
Range("A1").Select
For I = 1 To 10
For J = 1 To 5
ColorIndex = I
ActiveCell.Interior.ColorIndex = ColorIndex
ActiveCell.Offset(1, 0).Activate
Next
ActiveCell.Offset(0, 1).Activate
ActiveCell.Offset(-5, 0).Activate
Next
End Sub

FUNO ONTIME
Public Sub ExecutaOnTime()
MsgBox "Opa! Executou."
End Sub

Public Sub TesteOnTime() Executa determinada funo de acordo com o tempo especificado,
no exemplo abaixo ir excutar a MsgBox Opa! Executor aps 10 seg.
Call Application.OnTime(Now + TimeValue("00:00:10"), "ExecutaOnTime")
End Sub

RELGIO

Public Sub StartTimer()
Application.OnTime EarliestTime:=Time + TimeValue("00:00:01"), Procedure:="AtualizaRelogio"
End Sub

Public Sub StopTimer()
Application.OnTime EarliestTime:=Now + TimeValue("00:00:01"), Procedure:="AtualizaRelogio",
Schedule:=False
End Sub

Public Sub AtualizaRelogio()
On Error Resume Next
Worksheets(1).Range("A1").Value = Worksheets(1).Range("A1").Value + TimeValue("00:00:01")
Application.OnTime EarliestTime:=Now + TimeValue("00:00:01"), Procedure:="AtualizaRelogio"
End Sub

CONFIRMANDO DECISES COM O MsgBox

Sub teste()
Dim resultado As VbMsgBoxResult
resultado = MsgBox("deseja sair?", vbYesNo, "testando")
If resultado = vbYes Then Se clicar em Sim
MsgBox "voce clicou em ok"
Else
MsgBox "voce clicou em nao" Clicar em no
End If

End Sub




MOSTRAR MENSAGEM EM HORARIO ESPECIFICADO

Sub teste()
Application.OnTime earliesttime:=TimeValue("10:54AM"), PROCEDURE:="TESTE2" Chama
a Sub Teste2 no horario especificado: 10:54AM).
End Sub

Constante Valor Descrio
vbOK 1 OK
vbCancel 2 Cancelar
vbAbort 3 Abortar
vbRetry 4 Repetir
vbIgnore 5 Ignorar
vbYes 6 Sim
vbNo 7 No


Comandos do VBA - Excel
Sub teste2()
MsgBox "Ola Marcelo"
End Sub


CLULA PISCANDO

Exemplo 1

Sub Piscar()
Range("a1").Interior.ColorIndex = 3 Coloca a cor vermelha na clula ativa
Application.OnTime Now + TimeValue("00:00:01"), "Tempo" Excecuta o procedimento
End Sub Tempo de 1 em 1 segundo

Sub Tempo()
Range("a1").Interior.ColorIndex = xlNone Descolore a clula ativa
Application.OnTime Now + TimeValue("00:00:01"), "Piscar" Executa o procedimento
End Sub Piscar 1 em 1 segundo
Exemplo 2
Sub pisca()
Dim x As Integer
Dim pausa As Currency
Dim inicio As Date
For x = 1 To 40 'total de piscadas
pausa = 0.2 'durao da pausa entre as piscadas em segundos
inicio = Timer ' hora inicial
Do While Timer < inicio + pausa
DoEvents 'submeta a outros processos
Loop
If Range("b10").Interior.ColorIndex = 6 Then
Range("b10").Interior.ColorIndex = 3
Else
Range("b10").Interior.ColorIndex = 6
End If
Next x
End Sub

FOR DECREMENTADO

For i = 4 To 1 Step -1 'Da direita para a esquerda
Next

COMANDO FOR EACH E ARRAYS

Sub inicializa_arrays()
Dim arrays_pais(5) As String Arrays de 0 a 5 espaos
Dim contador As Integer
For contador = 0 To UBound(arrays_pais) 1 Conta o tamanho do array (Ubound)
arrays_pais(contador) = InputBox("Nome do pais: ")
Next
For Each pais In arrays_pais Percorre o array
MsgBox pais Varivel (pais) qualquer que ir receber sucessivamente os valores do array
Next
End Sub

ARRAY DINMICO

Redim x(6) Modifica o tamanho do Array x mas apaga todos os outros valores anteriores.
Redim Preserve x(6) Modifica o tamanho do Array x, mas preserva os valores anteriores.

STRING

Cstr() Converte uma expresso em String
Range("b3") = Len(Range("b2")) Este exemplo retorna na clula B3 o tamanho da String
digitada na clula B2
nome = Chr(34) & "marcelo" & Chr(34) Chr(34) imprime o Aspas dupla ( )

Comandos do VBA - Excel
Dim nome As string * 20 Define uma string fixa de 20 caracteres
COMPARA = "MARCELO" Like "MARCELO" COMPARA uma variavel qualquer e o seu valor
nesse exemplo Verdadeiro
COMPARA = "MARCELO" Like "Marcelo" Aqui o resultado seria falso
Str(nmero) Converte um valor numrico em String
Len(String) Determina o nmero de caracteres da String
String(Tamanho,String) Cria uma String igual ao tamanho especificado e que contm o
primeiro caracter da String
Lcase(String) Converte a String para minscula
Ucase(String) Converte a String para maiscula
Split(String) Divide uma String e retorna as Substrings como um array de strings
Exemplo:
Private Sub CommandButton1_Click()
Dim i As Integer
Dim vetor As Variant
vetor = Split(TextBox1.Text)
'ListBox1.Clear
For i = LBound(vetor) To UBound(vetor)
ListBox1.AddItem i & vbTab & vetor(i)
Next
End Sub
Se substituirmos o cdigo por Vetor = Split(Textbox1.text, , 2), iremos obter 2 substrings.
Podemos tambm acrescentar por exemplo a consoante s, para indicar onde a diviso ir
ocorrer, por exemplo:
Private Sub CommandButton1_Click()
Dim i As Integer
Dim vetor As Variant
vetor = Split(TextBox1.Text, s)
ListBox1.Clear
For i = LBound(vetor) To UBound(vetor)
ListBox1.AddItem i & vbTab & vetor(i)
Next
End Sub

Private Sub CommandButton1_Click()
Dim frase As String
Dim vetor As Variant
frase = "Avaliao do impacto do treinamento no trabalho do programador"
vetor = Split(frase, " do ")
MsgBox " 'do' aparece na texto ' " & frase & " ' " & UBound(vetor) & " vezes."
End Sub
No exemplo acima estaremos contando quantas vezes a preposio do aparece no texto
citado. Se quiser contar quantas vezes a substring do aparece (nesse caso no preposio,
ento iria contar o do de programador tambm) s mudar o cdigo: Split(frase, do ) por
Split(frase,do), sem os espaos entre as aspas.
StrReverse(String) Retorna uma String com os caracteres invertidos
Replace(string, StrProcura, StrSubstPor, Inicio, Contador, Compare)
String: a String a ser alterada.
StrProcura: a String(0u Caracter) a ser procurado na String.
StrSubsPor: a String (Ou caracter) usada para substituir a String(StrProcura).
Incio: Indica o incio da busca por StrProcura ( opcional).
Contador: Indica o nmero mximo de vezes que a String StrProcura ser substituda.
Compare: O modo de comparao a ser efetuada.
Exemplo:
Frase = " Geralmente , temos um problema , quando a temperatura aumenta "
NovaFrase = Replace(Frase, "," , ";" )
MsgBox novafrase

Ficar assim: Geralmente; temos um problema; quando a temperatura aumenta
Asc(A) Mostra o cdigo Ascii do caracter, no caso A igual a 65

Atualizando o ListBox

Private Sub CommandButton1_Click()
Dim tanto As Integer

Comandos do VBA - Excel
linha = Range("A100").End(xlUp).Row
tanto = 0
For i = 0 To linha
tanto = tanto + 1
ListBox1.AddItem Cells(tanto, 1).Value Mostrar na Listbox os valores inseridos at A100
Next
End Sub

TRABALHANDO COM DATAS

Month(Date) Mostra o nmero do ms atual, por exemplo: Setembro 09.
MonthName() Recebe um nmero (relativo ao ms 0 a 12) e ele te retorna o ms por extenso.
Exemplo: MontName(12) = Dezembro. Podemos fazer assim :
Sub teste()
MsgBox MonthName(Month(Date)) Aqui ele mostra por extenso o ms vigente
End Sub
Date() Mostra a data atual.
Time() Mostra a hora do sistema.
Day() Retorna um nmero relativo ao dia do ms, pode-se fazer assim tambm:
Day(Date()) Retorna o dia do ms vigente.
Month() Igual a anterior, s que retorna o ms. Exemplo: Month(Date()).
Now() Retorna a data e a hora do sistema.
DateDiff("d", DATA1, DATA2) Calcula o intervalo entre duas datas, d referente ao tipo de
pesquisa que neste caso ser em dias, Ms m e Ano a, DATA1, a data incial e
DATA2 a data final
DateAdd(Intervalo, N_de_Intervalo,Data) Determina uma data futura, com base em uma data
fornecida, o tipo de perodo a ser acrescenado (d-dias; m=ms; y-ano). Exemplo:
DateAdd(m,1000,22/04/1500) Neste exemplo queremos saber uma data futura de 1000
meses (m) aps o descobrimento (22/04/1500). Se quisermos saber em dias s trocar o m
por d ou se quisermos saber em anos trocamos por y.
Year() Retorno um numero indicativo do ano. Exemplo:
Year(Date()) Retorna o ano vigente.
WeekDay(data, 1_dia_semana) Retorna um nmero relativo ao dia da semana: 1-Domingo
...... 7-Sbado. Podemos definir o primeiro dia da semana tambm, por exemplo, caso queira
colocar segunda como o primeiro dia, aps especificar a data, depois da vigula coloque 2.
WeeDayName() Mostra por extenso a data, Exemplo:
WeekdayName(WeekDay(01/09/2010)) Este exemplo mostra Quarta-Feira.
CDATE() Converte a expresso pro formato Date
MsgBox Cdate(12-11-2010)

FUNES PARA CLCULOS MATEMTICOS

Abs(n) Retorna o valor absoluto (sem sinal), do nmero n.
Rnd(n) Retorna um nmero aleatrio entre 0 e 1.
Rnd*10 Gera um nmero aleatrio entre 0 e 10
Sqr(n) Retorna a Raiz quadrada do nmero n.
2 ^ 3 Aqui calcula-se a potncia de 2 elevado a 3.

LAO WHILE

1) Do While Condio/Teste Teste no comeo
Comando 1
Comando 2
.................
Comando n
Loop Aqui enquanto a condio for verdadeira o cdigo sera executado. O teste da
condio feito no comeo do lao

2) Do Teste no final
Comando 1
Comando 2
..............
Comando n
Loop While Teste/Condiao.

Comandos do VBA - Excel
Aqui o teste feito no final, tambm ser executado enquato a condio for
verdadeira.


3) Do Until Teste/Condio Teste no comeo
Comando 1
Comando 2
..............
Comando n
Loop Aqui enquanto a condio for falsa o cdigo sera executado. O teste da condio
feito no comeo do lao

4) Do Teste no final
Comando 1
Comando 2
..............
Comando n
Loop Until Teste/Condio
Aqui o teste feito no final, tambm ser executado enquato a condio for falsa

TEXTBOX QUE S ACEITA NMEROS

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = vbKeyReturn Or KeyAscii = vbKeyBack Then
Exit Sub
End If
If KeyAscii < vbKey0 Or KeyAscii > vbKey9 Then
KeyAscii = 0
End IF Neste exemplo, se for digitado letras, nada ser mostrado na TextBox, ficar em branco
End Sub

Exemplo 2:

Private Sub CommandButton1_Click()
If Not IsNumeric(TextBox1.Value) Then O commando Not est negando o valor numrico
MsgBox "informe um numero" Este mesmo comando poderia ser feito com datas tambm
End IF era s trocar o IsNumeric por IsDate
End Sub

FORMATANDO CASAS DECIMAIS

TextBox2.Text = Format(TextBox1.Text, "###.00") Aqui nesse exemplo a Textbox2 ir receber j
formatado pra duas casas decimais depois da vrgula, o numero que for digitado na textbox1.
TextBox2.Text = Format(TextBox1.Text, "dd/mmmm/yyyy") Formata pra tipo de data
TextBox2.Text = Format(TextBox1.Text, "##/####/####") Mesmo efeito do exemplo anterior
TextBox2.Text = FormatCurrency(TextBox1, 2) Aqui ele adiciona o R$ e pra duas casas
decimais, de acordo com o ultimo numero depois da vrgula, aqui no caso 2
TextBox2.Text = Format(TextBox1.Text, "0.00") Aqui tem o mesmo efeito do primeiro exemplo
Format(Now, "dd/mm/yyyy hh:nn:ss")

PREENCHENDO FORMULRIO 2

RowCount = Worksheets("Plan1").Range("A1").CurrentRegion.Rows.Count
Worksheets("Plan1").Range("A1").Offset(RowCount, 0).Value = TextBox1.Text Aqui ele comea a
preencher uma clula abaixo (A2) da clula indicada (A1). Se quiser inserir na coluna B
modifique o valor Zero para 1 e na coluna C para 2 e assim por diante, RowCount seria uma
variavel.

USANDO O COMANDO FOR EACH PARA LIMPAR

For Each ctl In Me.Controls
If TypeName(ctl) = "TextBox" Or TypeName(ctl) = "ComboBox" Then
ctl.Value = "" ctl uma variavel do tipo Controls
ElseIf TypeName(ctl) = "CheckBox" Then
ctl.Value = False

Comandos do VBA - Excel
End If
Next ctl
Na segunda linha esta dizendo que todas as caixas de texto (TextBox) e Caixas Combo
(ComboBox) sero zeradas. E na quarta linha esta dizendo que todas as caixas de verificao
(CheckBox) ficaro desmarcadas (False).

BOTAO PARA SAIR DO FORM

Private Sub cmdCancel_Click()
Unload Me
End Sub

OCULTAR PLANILHA

Worksheets("plan1").Visible = False Oculta a planilha Plan1

COMANDOS TEIS

IsArray() True se a expresso for verdadeira, False se no for.
IsDate() True se a Expresso do tipo Date, False se no for.
IsEmpty() True se nenhum valor for atribudo a varivel.
IsError() True se expresso conter algum erro.
IsNUll() True se a expresso apresentar valor Null (Nulo).
IsNumeric() True se a expresso for numrica.
IsObject() True se se tratar de um objeto.

CONCATENANDO O COMANDO RANGE COM O VALOR DE UMA VARIVEL

Sub teste()
Dim a As Single
a = 3 A variavel A recebe valor 3
Range("a" & a) = "marcelo" Nesse exemplo ser escrito marcelo na clula A3
End Sub

CHAMANDO AS FUNES DISPONVEIS NO EXCEL

WorksheetFunction.Sum(Range(a1:a5)) Nesse exemplo estamos somando de A1 at A5
Range(b1).FormulaLocal = =Soma(a1:a5) Esse exemplo tambm faz a soma

CRIANDO UMA VARIVEL ESTTICA

Sub acumulador()
Static total Declarando uma varivel esttica
Dim a As Integer
x = Range("a1").Value
y = Range("b1").Value
z = x - y
total = total + z Cdigo pra ir sempre somando, incrementando
Range("c1").Value = total
End Sub

UTILIZANDO O COMANDO SELECT CASE

Sub Seleo()
' Exemplo do comando Select / End Select
Dim x As Integer
x = InputBox("Informe um valor")
Select Case x
Case Is < 0 Caso x seja menor que zero entao...
MsgBox "Numero Negativo"
Case 0 To 10 Caso x seja menor/igual a 10 entao...
MsgBox "Numero positivo"
Case Is > 10 Caso x seja maior que 10 entao...
MsgBox "Numero positivo maior que 10"
End Select

Comandos do VBA - Excel
End Sub


CHAMANDO UMA SUB DENTRO DE OUTRA SUB

Sub x(a) Essa Sub possui um argumento
MsgBox a
End Sub

Sub y()
Call x("marcelo") Aqui chama-se a Sub x, adicionando a String no lugar do seu argumento
End Sub

CHAMANDO UMA FUNO DENTRO DE UMA SUB

Sub somar() O procedimento aqui chama a funo Somador e retorna 8
MsgBox Somador(3, 5)
End Sub

Function Somador(x, y) Funo (Function) que faz a soma
Somador = x + y
End Function

PASSANDO ARGUMENTOS POR REFERNCIA E POR VALOR

POR REFERNCIA (ByRef)
Sub TestePassagem1() Por Default o VBA passa por referncia
Dim y As Integer
y = 50
AdicionaNo1 y
MsgBox y Aqui o resultado 60
End Sub

Sub AdicionaNo1(ByRef x As Integer) Se retirar o ByRef tambm funcionaria
x = x + 10
End Sub
POR VALOR (ByVal)
Sub TestePassagem2()
Dim y As Integer
y = 50
AdicionaNo2 y
MsgBox y O resultado ser 50
End Sub

Sub AdicionaNo2(ByVal x As Integer) Se retirar o ByVal ele passaria por referncia
x = x + 10
End Sub

DECREMENTANDO O LAO FOR

For i=10 to 1 Step -1 Decrementa de 1 em 1
For i=10 to 1 Step -2 Decrementa de 2 em 2, e assim por diante

INSERINDO GRFICOS

Sub Macro1()
Range("A1:c5").Select
Charts.Add
ActiveChart.ChartType = xlColumnClustered Tipo de grfico mostrado
ActiveChart.SetSourceData Source:=Sheets("Plan1").Range("a1:c5"), PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Plan1"
ActiveChart.Axes(xlValue).ScaleType = xlLogarithmic Esse cdigo para as barras com
valores muito pequenos no sumirem devido existir barras com valores muito altos
End Sub


Comandos do VBA - Excel
ActiveChart.SeriesCollection(1).Select Comando para selecionar as barras do grfico, nesse
caso a barra 1 (Contando da esquerda para direita), que no exemplo so as barras azuis.

ActiveChart.SeriesCollection(1).ApplyDataLabels AutoText:=True, LegendKey:= _
False, ShowSeriesName:=False, ShowCategoryName:=False, ShowValue:=True, _
ShowPercentage:=False, ShowBubbleSize:=False Esse commando tem vrias funes, como por
exemplo, colocar legenda, o valor das barras entre outros
ActiveChart.SeriesCollection(1).ApplyDataLabels ShowValue:=True Esse comando coloca o
valor das barras selecionadas do grfico

ARMAZENAR VRIAS MENSAGENS DE UMA S VEZ NO MsgBox NO COMANDO FOR

For i = 0 To 6
mensagem = mensagem & "Dia: " & i + 1 & " " & Dias(i) & Chr(13)
Next Dessa forma armazena todas as mensagens de uma s vez, diferente do exemplo abaixo
MsgBox = mensagem

For i = 0 To 6
MsgBox "Dia: " & i + 1 & " " & Dias(i) & Chr(13)
Next Dessa forma teria que apertar enter varias vezes (7) pra ir aparecendo as mensagens

FUNO VarType

VarType(Nome da Varialve) ou VarType(Expresso) Determina o tipo de dado armazenado na
varivel. A seguir temos os cdigos de retorno da funo VarType:
0 Vazio (no inicializado)
1 Nulo (dados no vlidos)
2 Inteiro
3 Inteiro longo
4 Nmero de preciso simples
5 Nmero de preciso dupla
6 Monetrio.
7 Data
8 Texto
9 Objeto de automao
10 Erro
11 Boleano
12 Variant (somente utilizado com Arrayvariantes)
13 Um objeto para acesso a dados.
17 Byte
8192 Array
Uma aplicao prtica seria a validao de dados de um formulrio

VERIFICANDO UMA DATA VALIDA NO FORMULARIO

Private Sub CommandButton1_Click()
If IsDate(TextBox1.Value) = True Then
TextBox1 = VBA.FormatDateTime(TextBox1, vbGeneralDate)
TextBox2.Text = TextBox1.Text
Else
msg = MsgBox("Data Invlida!" & Chr(13) & "Favor verifique a data indicada.", vbCritical,
"Erro")
TextBox1.Value = vbNullString
TextBox1.SetFocus
End If

End Sub

GERANDO NMEROS ALEATRIOS

Randomize Sem o Randomize ele gera os mesmos numeros sempre que for inicializado
x = Int(Rnd * (10)) Gera numeros de 1 a 10, o Int pra no gerar numeros quebrados.
Exemplo:
Sub NumerosAletatorios() Nesse exemplo gera uma sequncia de 4 numeros aleatrios
Dim x, y(3)

Comandos do VBA - Excel
'Range("a1").Select
For i = 1 To 4
Randomize
x = Int(Rnd * (10))
ActiveCell.Value = x
ActiveCell.Offset(0, 1).Activate
Next
End Sub

COMANDO WHILE WEND

Sub teste() semelhante ao For
Dim i As Integer
i = 0
While i <= 10
ActiveCell.Value = i
ActiveCell.Offset(1, 0).Activate
i = i + 1
Wend
End Sub

DIFERENA ENTRE InputBox e Application.InputBox

A principal diferena que Application.InputBox capaz de verificar automaticamente o tipo de
dados que deve ser inserido na caixa de texto do caixa de dilogo mostrada e InputBox no.
Estrutura do Application.InputBox:
Application.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextId, Type)
Prompt: Mensagem a ser exibida na caixa de mensagem.
Title: Ttulo da caixa de entrada.
Type: Especifica o dado retornado conforme a tabela abaixo:

Exemplo:
Public Sub TesteAppInputBox()
Dim num As Long
num = Application.InputBox("Digite um valor numrico", "Application.InputBox", "Valor
numrico", , , , , 1)
MsgBox "O valor digitado foi: " & num
End Sub

CANCELANDO INPUTBOX

Sub teste() Aqui estou usando o Application.InputBox
Dim erro
Dim x
erro:
x = Application.InputBox("informe um numero", , , , , , 1)
If x = False Then
Exit Sub
End If
If IsNumeric(x) = False Then
MsgBox "isso no um numero"
GoTo erro
Else
MsgBox x

Comandos do VBA - Excel
End If
End Sub

COMANDO GOTO

para: Identificar do GOTO, os dois pontos : obrigatrio
y = Application.InputBox("Informe o seu nome: ") GOTO vir para essa linha
If y = False Then
x = MsgBox("Deseja realmente sair?", vbYesNo, "Sair")
If x = vbYes Then
Exit Sub
Else
GoTo para GOTO ir para a primeira linha aps o identificador
End If
End If

COLOCANDO EM ORDEM CRESCENTE OU DECRESCENTE

Range("a1").Select Seleciona a primeira clula da coluna
Selection.Sort Key1:=Range("a1"), Order1:=xlDescending, Header:=xlGuess Ordem decrescente
O comando Header:=xlGuess pega o conteudo da primeira clula (Em destaque: Negrito) e no
o coloca na ordem junto como o restante da coluna que vai sofrer o comando
Selection.Sort Key1:=Range("a1"), Order1:=xlDAscending, Header:=xlGuess Ordem crescente

INSERINDO WORLD ART

ActiveSheet.Shapes.AddTextEffect(msoTextEffect22, "Maisa", "impact", 20#, msoFalse,
msoFalse, 200, 70).Select O numero 22 o tipo de Worl Art; Maisa a String, Impact o
tipo da fonte, 20 o tamanho da fonte, 200 e 70 a posio na tela

USANDO A FUNO TYPE

Type Dados_Pessoais
Nome As String
Idade As Date
DataNascimento As Date
End Type

Sub Tipos_definidos_Utilizador()
Dim Pessoa As Dados_Pessoais
Pessoa.Nome = "Francisco"
Pessoa.Idade = InputBox("informe a data: ")
Range("a1") = Pessoa.Nome
Range("a2").Value = Pessoa.Idade
MsgBox Pessoa.Nome & Chr(13) & Pessoa.Idade
End Sub

OCULTAR CLULAS

Sub ocultar()

Dim i
i = Range("i1").Value
Range(i).EntireRow.Hidden = True Oculta clulas

End Sub

Sub mostrar()

Dim i
i = Range("g1").Value
Range(i).EntireRow.Hidden = False Mostra clulas ocultas

End Sub


Comandos do VBA - Excel

ACUMULAR VALOR NA CLULA

Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Row = 1 And .Column = 1 Then 'Se A1
If IsNumeric(.Value) Then
.Worksheet.Cells(2, 1) = .Worksheet.Cells(2, 1) + .Value
End If
End If
End With
End Sub

EXECUTAR MACRO AO ABRIR PLANILHA

Sub auto_open()

Msgbox Seja Bem Vindo Ao abrir a planilha mostrar esta mensagem

End Sub

CONGELAR CLULA ATALHO

Depois de escrever a formula aperte a tecla F4, ir aparecer o cifro (Do Dolar) na clula
escolhida.

DESTACAR LINHA SELECIONADA MUDANDO COR DE FUNDO


Dim LinhaSelecAnterior As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case ActiveCell.Row
Case 1, 2

'Coloque neste 'case' as linhas que no devem ser
'destacadas na seleo

'Exemplo: Linhas de ttulo; Aqui eu defini como as linhas 1 e 2

'Remove cor de fundo da linha selecionada anteriormente

Select Case LinhaSelecAnterior.Row

Case Is <> 1, 2

Rows(LinhaSelecAnterior.Row).Interior.ColorIndex = 0

End Select

Case Else

'Altera a cor de fundo da linha selecionada

Rows(ActiveCell.Row).Interior.ColorIndex = 15

'Remove a cor de fundo quando a linha perde a seleo

If Not LinhaSelecAnterior Is Nothing Then

'Verifica se a linha atual j estava selecionada


Comandos do VBA - Excel
'neste momento, caso seja uma nova linha selecionada

'remove a cor de fundo.

If ActiveCell.Row <> LinhaSelecAnterior.Row Then

Rows(LinhaSelecAnterior.Row).Interior.ColorIndex = 0

End If

End If

'Inicializa a variavel informando a seleo atual

'que ser utilizada no inicio do procedimento

'como sendo a seleo anterior

Set LinhaSelecAnterior = ActiveCell

End Select

End Sub

FUNO SELECTIONCHANCE BY TARGET

Serve para mudar cor, letra, fundo, nome, na clula selecionada, e depois volta ao normal aps
perder a seleo

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
On Error Resume Next
Static UltCelula As String
Target.Value = "marcelo" 'Coloca a string "marcelo" na clula selecionada
Target.Interior.Color = vbYellow 'Colocar cor de fundo amarela na clula selecionada
Target.Font.Color = vbRed 'Coloca a cor verde da fonte na clula selecionada

Range(UltCelula).Interior.ColorIndex = xlNone 'Retira a cor de fundo na clula aps perder a
seleo
Range(UltCelula).Font.Color = vbBlack 'Coloca a cor da fonte preta na clula aps perder a
seleo
Range(UltCelula).Value = "" 'Retira a string "marcelo" na clula aps perder a seleo

UltCelula = Target.Address
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Muda a cor de fundo caso a clula selecionada contenha o nome marcelo

Static nome As String

On Error Resume Next
If Target.Value = "marcelo" Then
Target.Interior.Color = vbRed
End If

Nome = Target.Address

End Sub






Comandos do VBA - Excel
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim LinhaInicio As Range
Dim Linha As Range
Dim Linha2 As Long

Cells.Interior.ColorIndex = xlNone

Linha2 = Target.Row

Set LinhaInicio = Range("A" & Linha2, Target)

'Pinta da celula selecionada at a coluna 5
Set Linha = Range(Cells(Target.Row, 2), Cells(Target.Row, 5)) Seleciona a partir da segunda
coluna, at a coluna de nmero 5, contando a partir da primeira, se quiser selecionar 5 clulas
em linha, coloque 6 no lugar de 5

With Linha
.Interior.ColorIndex = 12
End With

End Sub


STATUSBAR


Sub StatusBar()

Dim x As Integer
Dim MyTimer As Double

'Change this loop as needed.
For x = 1 To 250

'Dummy Loop here just to waste time.
'Replace this loop with your actual code.
MyTimer = Timer
Do
Loop While Timer - MyTimer < 0.3 Quanto maior o valor, mais lento ser o contador

Application.StatusBar = "Progress: " & x & " of 250: " & Format(x / 250, "Percent")
DoEvents

Next x

Application.StatusBar = False

End Sub

Sub teste()

Application.StatusBar = "Marcelo " & Format(1, "percent") Escreve: Marcelo 100,00%



End Sub









Comandos do VBA - Excel
INSERIR DADOS NA CLULA SELECIONADA

Sub teste()

linha = ActiveCell.Row
coluna = ActiveCell.Column
Cells(linha, coluna).Value = "Marcelo" Insere a string Marcelo na clula selecionada

End Sub

Sub teste()

linha = ActiveCell.Row
coluna = ActiveCell.Column
Cells(linha, coluna).Value = "Marcelo" Insere a string Marcelo na clula a direita da clula
selecionada

End Sub


DESPROTEGER PLANILHA PARA INSERIR DADOS


Sub ModificarPlanilha()

'Realiza a abertura do arquivo
Workbooks.Open Filename:= "C:\Teste.xls"
'Desprotege a planilha Valores utilizado o password "Senha"
Sheets("Valores").Unprotect ("Senha")
'Realize suas modificaes de acordo com o planejado
'Protege novamente a planilha
Sheets("Valores").Protect ("Senha")
'Salva as alteraes
ActiveWorkbook.Save
'Fecha o arquivo
ActiveWindow.Close

End Sub


PEGAR O NOME DA PLANILHA ATIVA

Sub nomeDaPlanilha()

Range(a1). Value = ActiveSheet.Name
'A clula A1 estar recebendo o nome da sua planilha

End Sub


Salvar em PDF

Sub salvarPDF()
Dim nome As String
nome = Range("c15").Value

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
ActiveWorkbook.Path & "\" & nome, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True

'Salva na pasta onde o arquivo esta: ActiveWorkbook.Path
'D nome ao arquivo: & nome

End Sub

Comandos do VBA - Excel
SELECIONANDO VRIAS CLULAS

Sub teste()
Range(ActiveCell, ActiveCell.Offset(4, 0)).Select
Seleciona a clula ativa(ActiveCell) e mais 4 clulas abaixo dela (ActiveCell.Offset(4, 0))
Range("A1:b1", Range("A1").Offset(4, 0)).Select
Seleciona as clulas A1:B1 e mais 4 clulas abaixo delas
End Sub


ADICIONANDO UM BOTO DE AJUDA AO MSGBOX

Sub teste()

MsgBox "testando a ajuda", vbCritical + vbMsgBoxHelpButton, "Ajuda", "runner.hlp", 0
Onde runner.hlp o nome do arquivo de ajuda

End Sub


USAR O IMPUTBOX PARA OBTER O ENDEREO DA CLULA SELECIONADA


Sub teste()

Dim ORange As Range
On Error Resume Next
Set ORange = Application.InputBox _
(prompt:="Selecione uma clula", Type:=8)
On Error GoTo 0
If ORange Is Nothing Then
MsgBox "Voc no selecionou uma clula"
End If
MsgBox "Voc selecionou a seguinte clula: " & ORange.Address()
Mostra o endereo da clula selecionada
MsgBox "Voc selecionou a seguinte clula: " & ORange.Address(external:= true)
Mostra o endereo completo da clula selecionada


End Sub