Você está na página 1de 19

INTRODUÇÃO AO VBA

Para abrir ambiente de trabalho: ALT + F11


Tipo de arquivo a ser salvo: .xslm

1. Aprendendo a escrever código:

1.1. Diferença entre procedimentos Sub x Function: ( Executar procedimento: F5)

sub → Executa um processamento sem emitir qualquer informação, para emitir


informação é necessário acrescentar uma Msgbox. Ex: Gravar macro da planilha.

Function → Quando o processamento necessita devolver algum resultado. Pode ser usada
para criação de função direta na planilha. A exigência para que isso seja possível, é criá-las
com o modificador Public, que é o padrão caso seja omitido.

1.2 Diferença entre macro absoluta e macro relativa:

Absoluta → Mantém a célula de origem ao executar a macro gravada.


Relativa → Começa a macro na célula que está ativa.

1.3 Linguagem do código:


No português escrevemos : Verbo> substantivo. Ativar a planilha
No VBA é o contrário: Objeto > Método. Planilha.ativa
Em analogia, Objeto= Substantivo ( Em quem estou mexendo) e Método= verbo ( O que estou
fazendo).
1.4 Definições:

Objetos: tudo que pode ser mexido - célula, planilha, pasta de trabalho…

Coleções: conj. De objetos.


Worksheets -:> coleção de planilhas - todas as planilhas dentro daquela pasta de trabalho
Range -> coleção de células - todas as células dentro daquela planilha.

Propriedades: Características do objeto .


Ex: Worksheets(1).NAME → Nome da planilha 1 da pasta de trabalho

Métodos: Ações que podem ser feitas no objeto.


Possuem paramentos: Direção, intensidade ...
Ex: worksheets(1).delete → deletar a primeira planilha da pasta de trabalho
^- ordem: a primeira planilha

Para ter acesso a biblioteca de propriedades e métodos : F2


Para depurar o código - executar linha por linha : f8

2. Aplicações:

Sub test()
'Selecionar a primeira planilha da pasta de trabalho'
Worksheets(1).Select
End Sub
Sub test2()
' Selecionar uma planilha específica pelo nome'
Worksheets("Plan1").Select
End Sub

Sub test3()
' Ocultar planilha utilizando sua propriedade(visible)'
Worksheets(1).Visible = False
End Sub

Sub test4()
' Reaparecendo a planilha com a propriedade visible'
Worksheets(1).Visible = True
End Sub

Obs: Na propriedade visible podemos ocultar a planilha de forma a não ser reexibida na pasta
de trabalho, somente no editor de vba ( travar em oculto).

Sub test5()
' Ocultando através do nome do projeto'
Plan1.Visible = xlSheetVeryHidden ( sem poder reexibir)
End Sub
Sub Copiar_transpor()
' Copiar valores das células em A e transpor a partir de B'

Plan1.Range("A1:A12").Copy
Plan1.Range("B1").PasteSpecial xlPasteAll, xlPasteSpecialOperationNone, False, True

' PASTESPECIAL COLAR TUDO, SEM FAZER OPERAÇÃO, COM ESPAÇOS VAZIOS, TRANSPOR'
End Sub

Sub Copiar_transpor2()
' Copiar valores das células em A e transpor a partir de B2'

Plan1.Range("A1:A12").Copy
Plan1.Range("B2").PasteSpecial xlPasteAll, xlPasteSpecialOperationNone, True, True

' PASTESPECIAL COLAR TUDO, SEM FAZER OPERAÇÃO, SEM ESPAÇOS VAZIOS, TRANSPOR'
End Sub

Sub Hierarquia()
' Ordem de hierarquia '
Workbooks("Pasta1").Worksheets(1).Range("A1").Select
End Sub

Sub Exercicio1()
' Crie uma macro que selecione o intervalo A1:B10 utilizando a propriedade range'
Worksheets(1).Range("A1:B10").Select
'ou'
[A1:B10].Select
End Sub

Sub Exercicio2()
'Crie uma macro que selecione o intervalo C2:D4 utilizando a propriedade cells '
Range(Cells(2, 3), Cells(4, 4)).Select
'Cells ( indice da linha, indice da coluna)'
End Sub

Sub Exercicio3()
'Crie uma macro que selecione a celula D4 a partir da A1 utilizando a propriedade offset
(desloca)'
Range("A1").Offset(3, 3).Select
'offset(casas para direita; casas para baixo), para esquerda e para cima utiliza-se indices
negativos'
End Sub

Sub Exercicio4()
'Crie uma macro que seleciona o intervalo A1:D5 utilizando a propriedade Resize( aumenta
o intervalo)'
' Aumentando o intervalo de 1 linha e 1 coluna "A1" para um intervalo de 5 linhas e 4
colunas'
Range("A1").Resize(5, 4).Select
End Sub
Sub Exercicio5()
' Crie uma macro que selecione a linha 2'
Rows(2).Select
End Sub

Sub Exercicio6()
' Crie uma macro que selecione a coluna 2'
Columns(2).Select
End Sub

Sub Exercicio7()
'Crie uma macro que seleciona o intervalo do A1 até a celula ativa utilizando a
propriedade Resize( aumenta o intervalo)'
Range("A1").Resize(ActiveCell.Row, ActiveCell.Column).Select
End Sub

3. Interação com usuário

Sub apresentação()
'Mensagem aparecendo ao usuário do excel'
Msgbox " Olá planilheiros!" & Chr(13) & " Seja bem vindo", vbInformation, " Primeiro
contato"
'Msgbox " Mensagem a ser exibida" chr(13)= enter para descer texto, tipo de texto, titulo da
mensagem'
' Mensagem permitindo retorno do usuário'
Plan3.Range("A1") = InputBox(" Então vamos lá?", "Primeiro contato", "sim")
' Lugar onde vou armazenar a informação do usuário = inputbox( " texto a ser exibido",
titulo, resposta programa'
End Sub

4. Aprendendo a declarar variáveis :


Options explict- OBRIGA A DECLARAR TODAS AS VARIAVEIS

Dim nomedavariavel as tipo de variavel

Tipo
Boolean valores booleano - True ou False
BYTE NÚMEROS SEM SINAL ENTRE 0 E 225
CURRENCY MOEDA
DATE DATAS
DECIMAL NUMERO DECIMAL
DOUBLO 4,94 x 10 ^324 PARA VALORES NEGATIVOS E DESDE 1,797693134862 E 398 até 4,94 x 10 ^324 para valores
positivos.
Integer numeros inteiros entre -32768 e 32767
Long numeros inteiros entre milhoes
Object referencia a um objeto do excel
Single numero real desde -3,40 x 10^38 até -1,40 x 10^-40 para negativos, e 3,40 x 10^38 atée 1,40 x 10^-45 para
positivos
String conjunto de caracteres
Variant qualquer tipo de dados( utiliza mais memoria)
Sub declarandovariavel()

Dim Nome As String


Dim Nasc As Date
Dim Atual As Date
Dim Result As Single

Nome = InputBox("Digite o seu nome")


Nasc = InputBox("Digite o seu nascimento, coloque (/)")
Atual = Date
Result = Atual - Nasc

Msgbox " " & Nome & " você está com " & Result & " dias ", vbInformation, " Declarando
variavel"
End Sub

5. Estruturas de decisão:
IF … Then
Com uma condição.
Sub avaliarvencimento()

If Plan2.Range("C2") > Date Then


Plan2.Range("D2") = " Conta a vencer "

ElseIf Plan2.Range("C2") = Date Then


Plan2.Range("D2") = "Vence hoje"
Else
Plan2.Range("D2") = "Conta atrasada"
End If
End Sub

Com duas condições .


If Plan2.Range("C2") > Date And Plan2.Range("A2") = "Luz" Then
Plan2.Range("D2") = " Conta a vencer "

Com uma ou outra condição


If Plan2.Range("C2") > Date OR Plan2.Range("A2") = "Luz" Then
Plan2.Range("D2") = " Conta a vencer "

6. Estruturas de repetição:
For… To
Sub Avaliarsaldo() - ‘ Escreve qual linha é debito e quAL é credito’
Dim i As Integer
Dim UL As Long
'Para descobrir a ultima linha'
UL = Plan2.Cells(Rows.Count, 2).End(xlUp).Row
For i = 10 To UL
' Linha que começa a rodar i=10'
If Plan2.Cells(i, 2) < 0 Then
Plan2.Cells(i, 3) = " debito"
Else
Plan2.Cells(i, 3) = " credito"
End If
Next
End SUB
Sub Limparconteudo()
'Limpar linha que contenha o x'
Dim i As Integer
Dim UL As Long
UL = Plan2.Cells(Rows.Count, 2).End(xlUp).Row
For i = 10 To UL
If Plan2.Cells(i, 4) <>Empty Then
Plan2.Rows(i).ClearContents
Exit for ‘ Para sair do loop’
End If
Next
End Sub

PROJETO FINAL - VBA BASICO

Sub Organizarguiche()

Dim UL As Long
Dim X As Long
Dim senha As Integer

' Senha '


senha = Plan4.[h5]

'Descobrir o ultimo guiche'

UL = Plan4.Cells(Rows.Count, 2).End(xlUp).Row
' Descobrir onde está o X'
X = Plan4.Cells(Rows.Count, 4).End(xlUp).Row

'Colocando X no proximo a realizar atendimento'

If X = UL Then
'Se tiver no ultimo volta para o primeiro'
Plan4.Cells(X, 4) = empyt 'vazio'
Plan4.Cells(5, 4) = "x"
Plan4.Cells(5, 3) = senha
Plan4.[j10] = "Senha" & senha & ". Por favor, comparecer ao guichê de número" &
Plan4.[b5] & ". O atendente " & _
Plan4.[A5] & " irá te atender."
Else
' Para outras situações'

Plan4.Cells(X, 4) = empyt
Plan4.Cells(X + 1, 4) = "x"
Plan4.Cells(X + 1, 3) = senha
Plan4.[j10] = "Senha " & senha & ". Por favor, comparecer ao guichê de número " &
Plan4.Cells(X + 1, 2) & ". O atendente " & _
Plan4.Cells(X + 1, 1) & " irá te atender."
End If
End Sub

Sub chamar()
Application.Speech.Speak (Plan4.[j10]) ‘ EXCEL FALAR ‘
End Sub

INTERFACE GRÁFICA

Aprendendo a utilizar formulários:

Private Sub botao_Click()


‘ Inserindo texto na caixa de texto’
UserForm2.Texto.Text = " Candidatos"

End Sub

Private Sub UserForm_Initialize()


' Private= só ocorre quando o formulario inicializar '
MsgBox " Olá, candidato!. Seja Bem vindo."

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)


' Mensagem quando o formulário fecha'
MsgBox " Boa Sorte!"

Simulando uma calculadora

Private Sub ENTER_Click()


Dim num1 As Long
Dim num2 As Long
‘Calculadora é o nome do formulario’
num1 = Calculadora.N1.Value ‘n1 é a caixa de texto onde o numero será inserido’
num2 = Calculadora.N2.Value’n2 é a caixa de texto onde o numero será inserido’
Calculadora.RESULTADO.Value = num1 * num2
‘ Resultado é o nome do local onde será inserido o resultado ‘
MsgBox " Operação realizada"
End Sub

OBS: PARA VERIFICAÇÃO IMEDIATA

Debug.Print (" Produtos totais: " & prodtotal & " e produtos vendidos: " & prodvendido)
Exemplo:

Número de produtos vendidos e em estoque e atualização da lista

Sub relatorio()

Dim prodvendido As Long


Dim prodtotal As Long

' A quantidade de produtos vendidos recebe a soma das células na coluna c que estão com
SIM '
' Worksheetfunction é utilizado para usar formulas do excel, countif= cont.se'

prodvendido = WorksheetFunction.CountIf(Plan5.Columns("C"), "SIM")

' A quantidade de produtos que existem -1 do cabeçalho'


' CountA= quantidade de células preenchidas'

prodtotal = WorksheetFunction.CountA(Plan5.Columns("A")) - 1

' Atribuindo valores na interface'

UserForm1.Txprodt.Value = prodtotal
UserForm1.Txprodv.Value = prodvendido
' Chamar o formulario'
MsgBox " Analise realizada", vbInformation, " "

UserForm1.Show
End Sub

RESPOSTAS POSSIVEIS NO FORMULÁRIO

Private Sub BNAO_Click()


' Fechar formulario se clicar em NAO'
Unload Me ' Me= este formulario'
End Sub

Private Sub BSIM_Click()


'quantidade de linhas na tabela'
Dim qtlinhas As Long

qtlinhas = WorksheetFunction.CountA(Plan5.Columns("A"))

For cont = 2 To qtlinhas


If Plan5.Cells(cont, 3) = "SIM" Then
Plan5.Rows(cont).ClearContents ' Limpar a linha de produtos vendido'
End If

Next
' chamar a macro para organizar '
Call Organizar - organizar é uma macro para tirar os espaços vazios entre as ceélulas que
sobraram ‘

MsgBox " Operação realizada com sucesso"


End Sub

SOMAR CELULAS

Sub ENTER()
plani6.Show’ PLANI6 é o formulário criado’
End Sub

Private Sub bsomar_Click()

Dim soma As Long

Me.ProgressBar1.Min = 2 ' Minimo da barra de progresso'


Me.ProgressBar1.Max = 10000 ' Maximo da barra de progresso'

For cont = 2 To 10000


' Somar os numeros da coluna 1 + coluna 2 e armazenar na coluna 3'
soma = Plan6.Cells(cont, 1) + Plan6.Cells(cont, 2)
Plan6.Cells(cont, 3).Value = soma
Me.ProgressBar1.Value = cont
Next
MsgBox " Operação realizada!"

Unload Me
End Sub

COMO INSERIR UMA CAIXA DE LISTAGEM.


1- FORMULÁRIO → CAIXA DE LISTAGEM
2- cRIAR UMA BASE DA LISTAGEM EM UMA PLANILHA
3- NOMEAR ITENS DA LISTA CRIANDO UMA TABELA
4- CLICAR NA CAIXA DE LISTAGEM EM USERFORM E NOMEAR o ROWSOURCE com o nome que deu a
tabela.

CADASTRO DE NOVOS ALUNOS

'
Private Sub UserForm_Initialize()

Dim ultimoid As Long


ultimoid = WorksheetFunction.CountA(Plan7.Columns("A")) - 1
Dim ID As Long
ID = ultimoid + 1

Me.txID.Value = ID
Me.Txentrada.Value = Date
End Sub

Private Sub bfechar_Click()

Dim nome As String


nome = Me.Txnome.Value
Dim idade As Long
idade = Me.Txidade.Value
Dim atividade As String
atividade = Me.Txatividade.Value
Dim mensalidade As Long
mensalidade = Me.Txmensalidade.Value
Dim UL As Long

UL = WorksheetFunction.CountA(Plan7.Columns("A"))

Plan7.Cells(UL + 3, 1) = Cadastro.txID.Value
Plan7.Cells(UL + 3, 2) = Date
Plan7.Cells(UL + 3, 3) = nome
Plan7.Cells(UL + 3, 4) = idade
Plan7.Cells(UL + 3, 5) = atividade
Plan7.Cells(UL + 3, 6) = mensalidade
Plan7.Cells(UL + 3, 7) = Date + 30
MsgBox " Cadastro concluído"

Unload Cadastro

End Sub

Você também pode gostar