Escolar Documentos
Profissional Documentos
Cultura Documentos
PROGRAMAO
VBA PARA EXCEL
O contedo programtico deste curso foi projetado com o propsito de, ao final do curso,
tornar o aluno apto a desenvolver macros e funes aplicadas para o Excel, com objetivo de
otimizar suas tarefas na realizao dos seus trabalhos.
Sumrio
INTRODUO............................................................................................................................................. 2
VBA PARA EXCEL ...................................................................................................................................... 6
MACROS................................................................................................................................................. 6
ROTINAS PBLICAS E PRIVADAS .................................................................................................... 6
PASSAGEM DE PARMETROS ............................................................................................................. 7
PASSAGEM DE PARMETROS POR VALOR BYVAL..................................................................... 7
PASSAGEM DE PARMETROS POR REFERENCIA BYREF .......................................................... 8
CRIAR MACROS................................................................................................................................. 9
PROGRAMAO ORIENTADA A OBJETOS ........................................................................................ 10
OBJETO............................................................................................................................................ 10
PROPRIEDADES .............................................................................................................................. 11
MTODOS ........................................................................................................................................ 11
CLASSES E INSTNCIAS ................................................................................................................ 12
EVENTOS ......................................................................................................................................... 13
PROCEDIMENTOS FUNCTION X PROCEDIMENTOS SUB ................................................................. 15
DEFINIO DE FUNCTION .............................................................................................................. 15
DEFINIO DE ROTINAS/SUBROTINAS (MACROS) ...................................................................... 18
INPUTBOX E MSGBOX......................................................................................................................... 19
FUNO INPUTBOX ........................................................................................................................ 19
FUNO MSGBOX........................................................................................................................... 20
VARIVEL IMPLCITA ME ................................................................................................................ 22
OBJETO RANGE................................................................................................................................... 23
PROPRIEDADE NAME ..................................................................................................................... 23
PROPRIEDADE VALUE .................................................................................................................... 23
OBJETO RANGE X MTODO SELECT ............................................................................................ 24
PROPRIEDADE CELLS .................................................................................................................... 25
PROPRIEDADE ACTIVECELL .......................................................................................................... 26
OBJETO FONT ................................................................................................................................. 27
OBJETO INTERIOR .......................................................................................................................... 27
PROPRIEDADE HORIZONTALALIGNMENT E VERTICALALIGNMENT ........................................... 28
PROPRIEDADES COLOR E COLORINDEX ..................................................................................... 29
COLEO BORDERS ...................................................................................................................... 30
PROPRIEDADE LINESTYLE E WEIGHT .......................................................................................... 31
PROPRIEDADE COUNT ................................................................................................................... 31
PROPRIEDADE COLUMN E ROW.................................................................................................... 32
PROPRIEDADE COLUMNS E ROWS ............................................................................................... 32
PROPRIEDADE RESIZE ................................................................................................................... 32
PROPRIEDADE ADDRESS............................................................................................................... 32
PROPRIEDADE OFFSET.................................................................................................................. 33
FUNO ISEMPTY ........................................................................................................................... 33
MTODO ACTIVATE ........................................................................................................................ 33
MTODO COPY................................................................................................................................ 34
MTODO DELETE ............................................................................................................................ 34
MTODO MERGE............................................................................................................................. 34
MTODO CLEAR .............................................................................................................................. 34
MTODO SORT................................................................................................................................ 34
OBJETO WORKSHEET......................................................................................................................... 36
PROPRIEDADE CODENAME ........................................................................................................... 37
PROPRIEDADE NAME ..................................................................................................................... 37
PROPRIEDADE VISIBLE .................................................................................................................. 37
PROPRIEDADE ACTIVESHEET ....................................................................................................... 38
MTODO ADD .................................................................................................................................. 38
MTODO ACTIVATE ........................................................................................................................ 39
MTODO COPY................................................................................................................................ 39
MTODO DELETE ............................................................................................................................ 39
MTODO MOVE ............................................................................................................................... 40
MTODO SELECT ............................................................................................................................ 40
EVENTO DE UM WORKSHEET ........................................................................................................ 40
EVENTO ACTIVATE ......................................................................................................................... 41
EVENTO DEACTIVATE..................................................................................................................... 41
EVENTO BEFOREDOUBLECLICK.................................................................................................... 41
EVENTO BEFORERIGHTCLICK ....................................................................................................... 42
EVENTO CALCULATE ...................................................................................................................... 42
EVENTO CHANGE ........................................................................................................................... 43
EVENTO SELECTIONCHANGE ........................................................................................................ 43
OBJETO WORKBOOK .......................................................................................................................... 45
PROPRIEDADE FULLNAME ............................................................................................................. 45
PROPRIEDADE PATH ...................................................................................................................... 45
MTODO ADD .................................................................................................................................. 46
MTODO ACTIVATE ........................................................................................................................ 46
MTODO CLOSE.............................................................................................................................. 46
MTODO SAVE ................................................................................................................................ 47
EVENTOS DE UM WORKBOOK ....................................................................................................... 47
EVENTO ACTIVATE ......................................................................................................................... 47
EVENTO OPEN ................................................................................................................................ 47
EVENTO NEWSHEET....................................................................................................................... 48
EVENTO SHEETCHANGE ................................................................................................................ 48
OBJETO APPLICATION ........................................................................................................................ 49
PROPRIEDADE THISWORKBOOK................................................................................................... 49
PROPRIEDADE DISPLAYALERTS ................................................................................................... 49
PROPRIEDADE SCREENUPDATING ............................................................................................... 50
MTODO QUIT ................................................................................................................................. 50
MTODO ONKEY ............................................................................................................................. 51
VARIVEIS DO TIPO OBJETO ............................................................................................................. 52
SUPLEMENTOS.................................................................................................................................... 54
CONVERTENDO UMA PASTA DE TRABALHO EM UM SUPLEMENTO ........................................... 54
INSTALANDO O SUPLEMENTO ....................................................................................................... 56
FECHANDO SUPLEMENTOS ........................................................................................................... 58
USERFORMS........................................................................................................................................ 59
CONTROLES DE INTERFACE.......................................................................................................... 60
MTODOS DE UM USERFORM ....................................................................................................... 63
EVENTOS EM UM USERFORM........................................................................................................ 63
CRIANDO UM USERFORM .............................................................................................................. 64
PROGRAMANDO O USERFORM ..................................................................................................... 64
PROGRAMANDO CONTROLES ....................................................................................................... 65
REFERNCIAS BIBLIOGRAFICAS ........................................................................................................... 67
VBA PARA EXCEL
MACROS
Macro um pequeno programa tambm denominado de Rotina que contm uma lista de
instrues a realizar no Excel, que pode ser classificada como: Sub-rotina, Funo ou
Procedimento de evento. Quando se trata de facilitar tarefas repetitivas, longas ou um conjunto de
tarefas, as rotinas resolvem o problema. Pode ser composta por uma lista armazenada de dois ou
mais comandos de aplicaes que, quando acionada por um programa, reproduz os comandos
que foram programados.
As instrues que formam o corpo da rotina so escritas num cdigo prprio para que o
computador as possa entender, essa linguagem designada por VBA Visual Basic for
Applications. O VBA uma poderosa ferramenta, para automatizar alguns procedimentos que,
geralmente facilitam nosso trabalho em diversas situaes.
As rotinas pblicas (Public) podem ser chamadas dentro de qualquer rotina e de qualquer
parte do projeto, como mdulos, formulrios, objetos. Tambm ficam disponveis em outro projeto
aberto, desde que voc adicione a referncia a esse projeto.
As rotinas privadas (Private), s podem ser executadas no mdulo onde foram escritas.
Elas s podem ser chamadas dentro das rotinas que pertenam ao mesmo mdulo ou objeto.
Quando chamadas a partir de outro mdulo, ocorrer o erro: Sub ou Function no definida.
Sub-rotinas e funes so pblicas por padro. Caso no queira que sejam pblicas,
necessrio que declare usando a palavra-chave Private Sub ou Private Function.
Sintaxe Sub-rotinas:
Sintaxe Funes:
PASSAGEM DE PARMETROS
Na passagem de parmetro por valor, ao iniciar a execuo, a funo faz uma cpia dos
valores passados para serem utilizados nas operaes. Supondo que o valor passado para a
funo fosse uma varivel criada por voc. Uma cpia deste valor seria efetuada durante a
execuo da funo, no alterando em nada o valor original de sua varivel. Significa que o
procedimento receber apenas o valor do parmetro e no uma referncia ao endereo de
memria onde est armazenado o valor do parmetro.
Para entender melhor este conceito, o exemplo abaixo mostra uma funo principal
chamada Sub Passagem_valor, na qual uma varivel X declarada, do tipo Integer, e
inicializada, esta varivel passa, por valor, o parmetro para o procedimento Sub Dobro.
Para poder alterar o valor original de uma varivel, a funo/procedimento, tem que
receber o parmetro por referncia ByRef, ou seja, a funo/procedimento tem que receber uma
referncia ao endereo de memria da varivel passada como parmetro e no uma simples
cpia do valor da varivel . Ao receber um parmetro por referncia (ByRef), as alteraes que a
funo/procedimento fizer, sero feitas diretamente na varivel original, pois agora, a
funo/procedimento tem acesso ao endereo da varivel na memria e no mais apenas uma
cpia do seu valor.
Para que um procedimento possa receber um parmetro por referncia, voc deve utilizar
a palavra ByRef, conforme o exemplo a seguir:
Para entender melhor este conceito, o exemplo abaixo mostra uma funo principal
chamada Sub Passagem_Ref, na qual uma varivel Y declarada, do tipo Integer e inicializada,
em seguida passada, por referncia, como parmetro para o procedimento Dobro_Ref.
OBS.: Na passagem por valor passado apenas uma cpia do valor da varivel. Os comandos
executados dentro do procedimento/funo chamado no iro alterar o valor original da varivel.
J na chamada por referncia, o endereo da varivel, na memria, passado para o
procedimento/funo que foi chamado. Com isso, as alteraes feitas pelo procedimento, na
varivel, iro alterar o valor original da varivel, pois esto atuando diretamente sobre esta
varivel, ou melhor, no endereo de memria da varivel.
CRIAR MACROS
A POO uma metodologia de programao muito verstil que se molda a todas as reas
de aplicao da Cincia da Computao e Anlise de Sistemas. Pode ser usada por todas as
classes de programadores.
OBJETO
Vrios objetos de uma mesma classe ocupam diferentes posies de memria, embora
compartilhem os mtodos (que esto apenas uma vez na memria).
Em VBA, um objeto uma unidade de dados que representa determinado elemento da sua
planilha ou do Excel; em outras palavras, um objeto que permite uma referncia, por exemplo,
s clulas de sua planilha, a um grfico ou janela do Excel.Tambm pode ser objetos de outros
aplicativos em seu aplicativo Visual Basic .Voc pode criar seus prprios objetos e definir
propriedades e mtodos adicionais para eles.
Exemplo 1:
PROPRIEDADES
MTODOS
Exemplo:
ActiveCell.Delete
Application.Quit
CLASSES E INSTNCIAS
Para entender a relao entre um objeto e sua classe, pense numa tesoura para cortar
papel. A tesoura a classe. Ela define as caractersticas de corte que vamos fazer no papel, tais
como, tamanho e forma. A classe usada para criar objetos. Os objetos so o que obtemos do
papel cortado de diferentes formas e tamanhos.
Para abrir o Pesquisador de Objeto, estando no editor VB, clique no cone Pesquisadsor
de objeto :, ou pressione F2. Ser exibido uma janela conforme abaixo:
Observe:
Os mtodos so exibidos com o cone verde
EVENTOS
Eventos so aes que informam a um aplicativo que algo importante ocorreu, algo que
acontece aos objetos. Ocorre em resultado de uma ao do usurio, do sistema ou do prprio
cdigo. Por exemplo, quando o usurio clica em um formulrio, o formulrio pode desencadear um
evento Click e chamar um procedimento que manipula o evento.
Outros exemplos: quando uma pasta de trabalho aberta, d-se o evento Open do objeto
Workbook. O evento Activate ocorre quando uma pasta ou planilha ativada. O evento
BeforeSave ocorre antes da pasta de trabalho ser salva. Definindo Cancel, um dos parmetros
deste evento, como True, a pasta de trabalho ser fechada sem ser salva.
Com os eventos voc personaliza o comportamento dos objetos, tais como: pastas de
trabalho, planilhas, grficos, janelas, etc.
Exemplos:
Ocorre quando o arquivo passa a ser o arquivo ativo por ao do mtodo Activate.
Ocorre quando inserida uma nova planilha (Sh referencia a nova planilha).
DEFINIO DE FUNCTION
Uma funo definida pelo usurio assemelha-se a qualquer funo de planilha pr-definida
do Excel, tal como Soma e Mdia. Cabe ao usurio decidir o que a funo deve fazer. Uma
funo definida pelo usurio criada em um mdulo combinando expresses matemticas,
funes pr-definidas do Excel e o cdigo.do Visual Basic. As Funes comeam com a palavra-
chave Function e terminam com as palavras End Function. um conjunto de valores
Uma vez que uma funo produz sempre um valor ela poder ser executada: dentro de
uma clula numa planilha, semelhana de qualquer outra funo do Excel, ou dentro de
qualquer outra funo ou SubRotina. A sua definio tem a estrutura conforme abaixo:
End Function
A identificao funo se d pelo nome, pelos argumentos e tipo de dados, e tem como
objetivo executar um conjunto de instrues e produzir um valor final. Isto , sempre que se
pretender executar uma funo sabe-se que ela produzir um valor.
Para definir o valor produzido por uma funo basta no seu interior, atribuir ao nome da
funo um determinado valor ou expresso.
End Function
Nota: Se os tipos de dados no forem definidos ser assumido por padro como tipo Variant.
Criar uma funo para obter o percentual do lucro. Para isso deve-se usar o preo de compra e
preo de venda que se encontram na planilha. Conforme figura abaixo:
End Function
Exemplo 2:
Crie uma funo que retorne uma string com a situao de cada aluno, conforme os critrios
abaixo: A frequncia deve ser acima de 75%, A mdia deve ser superior a 7,0.
dentro de uma clula numa planilha, semelhana de qualquer uma outra funo do Excel.
Preencha as caixas de dilogo Freq e Med com a referncia das respectivas clulas clique
em OK.
Exemplo 3
Usando uma funo do Excel em uma funo no mdulo VBA:
Function Circulo(raio)
Circulo = Application.Pi() * 2 * raio
End Function
Quando dentro de uma rotina se faz referncia ao nome de outra rotina a execuo da
primeira passa pela execuo daquela que est a ser invocada.
Exemplo 4
O exemplo abaixo mostra uma funo sendo chamada dentro de uma macro. A macro
Maior faz uma chamada funo Acha_maior de forma que, o valor produzido pela funo seja
armazenado na varivel M, e assim produzir a sada final da macro Maior.
Sub Maior()
Dim num1 As Integer, num2 As Integer, m As Integer
num1 = InputBox("Informe primeiro nmero")
num2 = InputBox("informe segundo nmero")
m = acha_maior(num1, num2)
MsgBox "maior nmero " & m
End Sub
Sub <nome_da_macro> ( )
<corpo_da_macro>
End Sub
As macros so identificadas pelo nome que lhe atribumos e no recebem variveis no
interior, tm como funo desempenhar um conjunto de tarefas que so determinadas no corpo
da macro.
INPUTBOX E MSGBOX
Permitem a interao entre o usurio e uma macro ou programa, funciona como uma
interface de comunicao. Mostraremos dois elementos bsicos para estabelecer esta ligao:
InputBox e MsgBox.
FUNO INPUTBOX
InputBox uma funo que permite ao usurio introduzir dados no programa portanto um
mecanismo de entrada.
Exibe uma janela com uma caixa de texto para a insero de dados. Espera que o
utilizador introduza os dados e/ou acione um dos botes OK ou Cancela. Conforme figura abaixo:
Como uma funo produz um valor final. Este consiste nos dados inseridos pelo usurio
no formato texto que normalmente so armazenados temporariamente em variveis de uma
macro ou programa.
Sintaxe:
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
O nico argumento da funo que no est entre colchetes a mensagem do prompt, pois
o nico argumento obrigatrio; os outros so opcionais. Vamos conferir cada um:
XPos, YPos a posio em que a caixa de mensagem situa-se na tela. O padro o centro.
HelpFile, Context Utilizados para designar um arquivo e um contexto de ajuda para a caixa de
mensagem.
Sintaxe
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
MsgBox tambm possui diversos parmetros, mas somente o primeiro obrigatrio, sendo
que todos os outros quando ignorados assumem valores atribudos por padro.
MsgBox "A Soma de 3 com 5 :" & Chr(13) & " 8 "
Buttons Aqui temos vrias opes de configurao de uma MsgBox. Se for omitido assumir o
valor 0 por padro. A configurao buttons pode ser dividida em botes, comunicao visual e
botes padro; Veremos detalhes abaixo:
Title o ttulo da caixa de mensagem. Se este for omitido, aparecer o padro que o nome da
aplicao.
HelpFile - Nome do arquivo que ser utilizado para ajuda. Se for indicado este parmetro o
seguinte obrigatrio.
Na janela de sada ser exibida a mensagem Erro de Sintaxe, o boto exibido ser o de
OK (por padro) e o ttulo da janela ser Mensagem de Erro.
Exemplos:
MsgBox "Data Invlida", vbCritical
MsgBox Me.Name
O Objeto range uma propriedade do objeto Worksheet. Isso significa que objeto Range
requer que uma planilha esteja ativa ou que ele referencie uma planilha.
Esse objeto representa uma clula, uma coluna, uma linha, um conjunto de clulas, at
todas as clulas de uma planilha; por isso to genrico e funcional. O objeto Range talvez seja o
objeto mais utilizado no Excel VBA, afinal, voc est manipulando dados em uma planilha.
Exemplo:
Sub Ex1()
Range("A1:B4") = "Ol"
End Sub
PROPRIEDADE NAME
PROPRIEDADE VALUE
Exemplo1:
Sub Ex1_Range()
Range("A4:D10").Value = 1 'colocar no intervalo do range A1 a D10 o valor 1, na planilha ativa.
End Sub
Sub Ex2_range()
Range("A10:F20").Name = "Conjunto"
Range("Conjunto").Value = 2
'Onde, na primeira instruo se atribui ao range "A1:F20" o nome "Conjunto", e na ltima instruo se
utiliza essa designao para referenciar o respectivo conjunto de clulas e atribuir-lhe o valor 1, na
planilha ativa.
End Sub
Exemplo3:
Com base na tabela abaixo vamos criar uma macro para calcular o salrio de uma pessoa.
Para isso a macro recebe as informaes da planilha e devolve o salrio na planilha.
Sub salario()
Dim hora_trab As Single, val_hora As Single
Dim sal As Single
hora_trab = Range("B2")
val_hora = Range("C2")
sal = hora_trab * val_hora
Range("D2") = sal
End Sub
Exemplo:
Sub Selecionar()
Range("A1:B6").Select seleciona um intervalo de clulas
End Sub
Range(Cell1,Cell2)
Cells.ClearContents - Limpa todas as clulas de valores ou frmulas que pode estar em uma
planilha:
Exemplo1:
Crie uma macro baseada nos exemplos acima, execute o mesmo e observe que o intervalo
foi preenchido com o nmero 2, logo aps acrescente a linha conforme abaixo e execute a macro
observando que est limpo.
Sub Ex2_range_cells()
Range("A10:F20").Name = "Conjunto"
Range("Conjunto").Value = 2
Cells.ClearContents 'limpa o intervalo anteriormente preenchido
End Sub
Exemplo2:
Com base na planilha abaixo criar uma macro que calcule um acrscimo de 30% para os
valores maior ou igual a 500 e escreva o valor reajustado na coluna ao lado;
ActiveSheet.Range.Cells (1,1)
Range.Cells(1,1)
Cells(1,1)
A propriedade Cells tem uma propriedade com nome de Item que torna a propriedade
Cells muito til. A propriedade Item permite referenciar uma clula especifica em relao ao objeto
Range.
Sintaxe:
Cells.Item(2,C)
Cells.Item(2,3)
PROPRIEDADE ACTIVECELL
O ActiveCell propriedade retorna um objeto Range que representa a clula que est ativa
na planilha especificada ou na planilha ativa. Voc pode aplicar qualquer das propriedades ou
mtodos de um objeto Range para a clula ativa.
Sub Range_activecell()
Dim v1 As Single, v2 As Single, result As Single
result = 0
v1 = Range("A2")
v2 = Range("B2")
cod = Range("C2")
Range("D2").Select
Select Case cod
Case 1
result = v1 + v2
ActiveCell = result
Case 2
result = v1 - v2
ActiveCell = result
Case Else
ActiveCell = "invalido"
End Select
End Sub
OBJETO FONT
O objeto Font possui toda a formatao de fonte que podemos utilizar na interface do
Excel. Vejamos as principais propriedades:
OBJETO INTERIOR
O objeto Interior define o plano de fundo para as clulas selecionadas Suas principais
propriedades so:
Pattern Define um padro para ser aplicado no fundo de uma clula. Existem dezoito padres
representados em valor inteiro de 1 a 18.
Alinhamento Horizontal:
xlLeft Alinhamento a esquerda.
xlCenter- Alinhamento centralizado.
xlRight- Alinhamento a direita
xlDistributed ou xlJustify - Alinhamento justificado.
Alinhamento Vertical:
As macros abaixo mostram recursos para alterar o tipo da fonte para Tahoma, tamanho 12,
cor azul, estilo Negrito e alinhamento centralizado.
Sub cor_fonte()
Range("A1:B4").Value = 10
Range("A1:B4").Font.color = vbBlue
Range("A1:B4").Font.Name = "Tahoma"
Range("A1:B4").Font.Size = 12
Range("A1:B4").Font.Bold = True
Range("A1:B4").Interior.ColorIndex = 3
Range("A1:D5").HorizontalAlignment = xlCenter
End Sub
Sub CoRFonte()
Range("A1:C1").Select
With Selection.Font
Name = "Arial"
PROGRAMAO VBA PARA EXCEL 28
ColorIndex = 10
FontStyle = "Bold"
Size = 14
End With
End Sub
Exemplo do uso da propriedade Pattern.
Sub Cor_Fundo()
Range("A5:B7").Value = 10
Range("A5:B7").Font.color = RGB(0, 0, 255)
Range("A5:B7").Interior.Pattern = 18
End Sub
Exemplo do uso da propriedade PatternColorIndex.
Sub Limpa_Cor_fundo()
Range("A8:B10").Value = 5
Range("A8:B10").Font.color = RGB(0, 0, 255)
Range("A5:B7").Interior.PatternColorIndex = 20
End Sub
Uma funo RGB trabalha com trs parmetros, que indicam a quantidade de vermelho,
verde e azul na composio de uma cor, variando de 0 a 255.
Exemplo:
Sub Fundo_RGB()
Range("A1").Interior.color = RGB(0, 0, 0) 'Preto
Range("A2").Interior.color = RGB(255, 0, 0) ' Vermelho
Range("A3").Interior.color = RGB(0, 0, 255) ' azul
Range("A4").Interior.color = RGB(128, 128, 128) ' cinza
End Sub
Exemplo:
A macro abaixo gera uma tabela de cores com os respectivos nmeros para ser utilizado
com a propriedade ColorIndex.
COLEO BORDERS
O exemplo a seguir adiciona uma borda dupla para as clulas C1 at D5 na planilha ativa.
Sub Bordas()
Range("C1:D5").Borders.LineStyle = xlDouble
End Sub
O exemplo a seguir define a cor da borda superior e inferior das clulas A2: G2 na cor vermelho.
Sub Bordas_Top_bottom()
Range("A2:G2").Borders(xlEdgeTop).Color = RGB(255, 0, 0)
Range("A2:G2").Borders(xlEdgeBottom).Color = RGB(255, 0, 0)
End Sub
O exemplo a seguir define a cor da borda inferior das clulas A10: D10 na cor Azul no
estilo traado.
Sub Linha()
With Range("A10:D10").Borders(xlEdgeBottom)
ColorIndex = 5
LineStyle = xlDash
Weight = xlMedium
End With
End Sub
PROPRIEDADE COUNT
As propriedades Column e Row indicam coluna e linha, que formam a base de um range,
ou seja, relativas clula do canto superior esquerdo.
Exemplos:
Sub Columns_Rows()
Columns("A:C").Value = 2 'preenche as colunas de um Range("A:C")
Rows("4:7").Value = 3 'preenche as linhas de um Range("4:7")
End Sub
Sub Conta_Colunas_linhas()
PROPRIEDADE RESIZE
Exemplo:
Sub Teste_Resize()
Range("A1").Resize(3, 2).Interior.ColorIndex = 7
Range("C6").Resize(, 4).Interior.Pattern = 8
Range("C9").Resize(Rowsize:=11, columnsize:=4).Interior.Pattern = 3
End Sub
PROPRIEDADE ADDRESS
Exemplo:
A macro abaixo seleciona e preenche com um valor a clula que se encontra 3 linhas
abaixo e 1 coluna direita da clula que encontra-se ativa na planilha ativa.
Sub Testa_offset()
Selection.Offset(3, 1).Range("A1").Select
ActiveCell.Value = 500
End Sub
FUNO ISEMPTY
Retorna um valor booleano se uma nica clula estiver vazia ou no. A Clula deve
realmente estar vazia, um espao que no possa ser visto considerado como preenchido, ou
seja, no vazia. Retorna TRUE se clula vazia e FALSE se tiverem contedo ou espao.
Exemplo:
Sub Test_Isempty()
Dim i As Byte
For i = 1 To 7
If IsEmpty(Cells(i, 1)) Then
Cells(i, 1).Resize(1, 10).Interior.ColorIndex = 5
Cells(i, 1).Resize(1, 10).Value = " Excel"
End If
Next i
End Sub
MTODO ACTIVATE
O exemplo abaixo torna C5 a clula ativa. Aps a mesma recebe o formato negrito.
Sub Active_Celula()
Range("C5").Activate
ActiveCell.Font.Bold = True
End Sub
MTODO COPY
Exemplo:
Sub Copiar_celula()
Range("a1:b3").Select
Selection.Copy
Range("H10:I13").Select
ActiveCell.PasteSpecial
End Sub
MTODO DELETE
Exemplo:
Sub Delete()
Range("A2:F4").Rows().Delete
Worksheets("Plan1").Rows(3).Delete
End Sub
MTODO MERGE
MTODO CLEAR
Limpa todo e qualquer contedo das clulas dentro de um range. O contedo envolve
valores, formatao e frmulas.
Exemplo:
Sub Limpar_Mesclar()
Range("A1:E1").Merge across:=True
Range("A2:E4").Clear
End Sub
MTODO SORT
OBS: Um objeto um tipo especial de varivel que contm os dados e cdigos. A coleo um
grupo de objetos da mesma classe.
Exemplos:
Sub Escreve_Plan1()
Worksheets("Plan1").Range("A1:C5") = "OL"
End Sub
Preenche com valor de 1 100 o intervalo de 10 linhas por 10 colunas.
Sub Escreve_valor()
num = 1
For Row = 1 To 10
For col = 1 To 10
Sheets("plan2").Cells(Row, col).Value = num
num = num + 1
Next col
Next Row
End Sub
Veremos a seguir algumas das vrias propriedades, mtodos e eventos que so aplicados
aos objetos Worksheets.
Os programadores VBA mais experientes que utilizam esta forma de referenciar planilha.
Cada planilha em uma pasta de trabalho possui um nome de cdigo nico que no muda mesmo
quando a planilha movida, renomeada ou outras planilhas so adicionadas. O CodeName da
planilha s pode ser visto entrando no Editor do Visual Basic no Project Explorer.
Conforme mostra a figura acima, o CodeName para a planilha com nome de guia
Balano Plan1. Um CodeName de uma planilha sempre o nome que est fora dos
parnteses quando se olha no Project Explorer. Podemos fazer referncia a esta planilha na
pasta de trabalho usando: Plan1.Select ou Sheets ("Balano"). Select ou Sheets (1). Select.
OBS: Voc no pode usar um codinome PlanX quando voc faz referncia a uma Planilha que
est em uma outra pasta de trabalho, na qual o cdigo no reside.
PROPRIEDADE NAME
A propriedade Name retorna o nome de uma planilha. Tambm pode ser usada para trocar
o nome de uma planilha. O nome de uma planilha pode ser escrito com letras, nmeros e a
maioria dos smbolos, limite de 31 caracteres, porm no pode ser escrito com caracteres
reservados como [, ], /, *, :, ? e \.
Exemplo:
Sub Renomear_plan1()
Sheets("Plan1").Name = "Equilibrio"
End Sub
PROPRIEDADE VISIBLE
Sub Oculta_Plan2()
Sheets("plan2").Visible = False
End Sub
Exemplo abaixo exibe a Plan2 oculta pela macro anterior.
Sub Exibe_Plan2()
Sheets("Plan2").Visible = True
Sheets("Plan2").Select
End Sub
PROPRIEDADE ACTIVESHEET
Retorna um objeto que representa a planilha ativa na pasta de trabalho ativa ou na janela
especificada. Se uma pasta de trabalho aparece em mais de uma janela, a propriedade
ActiveSheet pode ser diferente em diferentes janelas.
Exemplos:
O exemplo abaixo escreve na clula B2 da planilha ativa e mostra o nome da planilha.
Sub Test_Active_sheet()
ActiveSheet.Range("B2").Value = 3.14
MsgBox "A planilha ativa : " & ActiveSheet.Name
End Sub
Esse exemplo renomeia a planilha ativa.
Sub AvtiveSheet2()
ActiveSheet.Name = "Linda"
End Sub
MTODO ADD
Exemplo 1:
A macro abaixo adiciona a planilha Bacana a esquerda da planilha selecionada.
Sub Add_planilha()
Worksheets.Add().Name = "Bacana"
End Sub
Exemplo 2:
O exemplo insere 4 novas planilhas aps a ltima planilha.
MTODO ACTIVATE
Torna uma planilha da coleo WorkSheets ativa, movendo o foco para a planilha
especificada sem alterar a seleo do usurio.
Exemplo:
O exemplo abaixo torna ativa a Plan2 na qual D7 torna-se ativa e recebe o formato negrito.
Sub Active_Plan2()
Worksheets("plan2").Activate
Worksheets("plan2").Range("D7").Activate
ActiveCell.Font.Bold = True
End Sub
MTODO COPY
Permite criar uma cpia fiel de uma determinada planilha, em uma posio especificada na
coleo Worksheets.
Exemplo:
A macro abaixo faz um cpia fiel da planilha ativa, inserindo a cpia aps a ltima planilha da
coleo.
Sub Copiar_Planilha ()
ActiveSheet.Copy After:=Worksheets(Worksheets.Count)
End Sub
MTODO DELETE
Exemplos:
O exemplo abaixo exclui a planilha especificada.
Sub Excluir_plan1()
Worksheets("plan1").Delete
End Sub
Sub Excluir_ultima()
Worksheets(Worksheets.Count).Delete
End Sub
MTODO MOVE
Sub Mover_Ativa()
ActiveSheet.Move After:=Worksheets(Worksheets.Count)
End Sub
MTODO SELECT
Exemplo1:
Sub Seleciona_ultima()
Worksheets(Worksheets.Count).Select
End Sub
Exemplo2:
Sub Seleciona_Todas()
Dim plan As Integer
For plan = 1 To Worksheets.Count
Worksheets(plan).Select
Next
End Sub
Exemplo3:
Sub Seleciona_plan3()
Sheets("Plan3").Select
End Sub
EVENTO DE UM WORKSHEET
EVENTO ACTIVATE
Este mtodo equivalente a clicar na guia na parte inferior da Planilha. Ocorre quando a
planilha em que est o evento se torna a planilha ativa.
Exemplo:
EVENTO DEACTIVATE
Exemplo:
EVENTO BEFOREDOUBLECLICK
Target do tipo Range, atravs desse argumento, podemos identificar qual clula recebeu
o duplo clique e dar os tratamentos desejados ao evento.
EVENTO BEFORERIGHTCLICK
Exemplo:
EVENTO CALCULATE
Ocorre toda vez que um clculo executado ou um valor de uma expresso matemtica
alterado em uma clula da planilha que contm a macro.
Exemplo:
No exemplo abaixo, a cada vez que a clula C2 sofre uma alterao exibe uma
mensagem, essa alterao pode ser no momento que est editando a expresso ou se um dos
valores das clulas envolvidas na expresso sofrer uma alterao de valor.
Ocorre quando uma das clulas da planilha teve o seu contedo alterado pelo usurio ou
por agente externo. Por exemplo, quando o texto inserido, editado ou excludo. Target a clula
que foi alterada.
Exemplo1:
Quando uma clula for preenchida com um valor, a cor de fundo da clula ficar em vermelho.
EVENTO SELECTIONCHANGE
Ocorre quando um novo intervalo de clulas selecionado dentro de uma planilha. Target
o intervalo recentemente selecionado e podemos dar o tratamento desejado. Este um evento
padro de uma Worksheet.
Workbook representa uma pasta de trabalho do Microsoft Excel. O objeto pasta de trabalho
um membro da coleo Workbooks. A coleo de pastas de trabalho contm todos os objetos
Workbook atualmente aberto no Microsoft Excel.
Como um objeto Workbook representa uma pasta de trabalho, podemos acess-lo como
um ndice da coleo Workbooks da seguinte maneira: workbooks(1) ou pelo nome do arquivo
workbooks(nome arquivo). O nmero de ndice indica a ordem em que os arquivos foram abertos
ou criados. Workbooks(1) o primeiro livro criado e Workbooks(Workbooks.Count) o ltimo
criado.
PROPRIEDADE FULLNAME
Exemplo1:
Essa funo retorna o caminho do disco e o nome da pasta de trabalho ativa.
Sub teste()
MsgBox ActiveWorkbook.FullName
End Sub
PROPRIEDADE PATH
O mtodo Add permite criar uma nova pasta de trabalho vazia e adicion-la coleo.
Exemplo 1:
O exemplo seguinte adiciona uma nova pasta de trabalho vazia ao Microsoft Excel.
Sub CriaPasta()
Workbooks.Add
End Sub
Exemplo 2:
MTODO ACTIVATE
MTODO CLOSE
Fecha a pasta de trabalho desejada. Close tem alguns parmetros, se caso omitido o
funcionamento da ao ser padro Windows. O mtodo verifica se a propriedade Saved do
objeto Workbook True. Se for, fechar a pasta, caso contrrio perguntar se deseja salvar.
Exemplo 1:
Sub Feccha_SemSalvar()
ActiveWorkbook.Close False
End Sub
Exemplo 2:
A macro do exemplo abaixo fecha a pasta de trabalho ativa dando a opo de escolha se o
usurio deseja salvar.
MTODO SAVE
EVENTOS DE UM WORKBOOK
A maioria dos eventos de um Workbook afetam globalmente uma aplicao. Para acessar
os eventos de um Workbook dentro do ambiente VBA, voc deve dar duplo clique em
EstaPasta_de_Trabalho, que est no Project Explorer. Vai aparecer a janela conforme abaixo.
Clicando na caixa de combinao onde aparece Geral voc encontrar o objeto Workbook, na
caixa de combinao da direita voc escolhe o evento desejado.
Vamos mostrar alguns dos principais eventos de um objeto Workbook e o que eles podem fazer.
EVENTO ACTIVATE
Ocorre quando a pasta de trabalho que contm esse evento torna-se ativa.
EVENTO OPEN
Open o evento de pasta de trabalho padro. Esse procedimento ativado quando uma
pasta de trabalho aberta, no necessita de nenhuma interface com o usurio. Ele tem uma
variedade de usos, como verificar o nome de usurio e personalizar os privilgios do usurio na
pasta de trabalho.
Exemplo:
A macro abaixo abre a pasta de trabalho com a planilha Janela ativada.
Private Sub Workbook_Open()
Worksheets("Janela").Activate
ActiveWindow.DisplayHorizontalScrollBar = False 'desativa a barra de rolagem horizontal
ActiveWindow.DisplayVerticalScrollBar = False ' desativa a barra de rolagem vertical
End Sub
Ocorre quando uma nova planilha adicionada pasta de trabalho ativa. Esse evento tem
como argumento uma varivel Sh, do tipo Object, que vai fazer referncia para a planilha
adicionada e pode ser utilizada dentro do cdigo como um elemento Worksheet.
No exemplo abaixo a macro ser acionada quando inserir nova planilha, a nova planilha ser
inserida aps a ltima j existente.
EVENTO SHEETCHANGE
Exemplo1:
A macro abaixo abre uma pasta de trabalho quando voc digita o nome da pasta de trabalho
desejada em uma clula na planilha da pasta de trabalho ativa:
Exemplo 1:
Esse exemplo cria um novo arquivo solicitando que o usurio digite o nome, aps salva e fecha o
novo arquivo.
Sub Acha_Caminho()
Dim Caminho As String
Caminho = ActiveWorkbook.Path
Workbooks.Open (Caminho & "\" & "classificar.xls")
End Sub
OBJETO APPLICATION
O objeto Application representa todo o aplicativo Microsoft Excel e seus derivados. Atravs
dele, podemos configurar a visualizao, execues e outras funcionalidades do Excel. O Objeto
Application possui vrias propriedades e mtodos, aqui mostraremos os princpais.
PROPRIEDADE THISWORKBOOK
Retorna um objeto de pasta de trabalho que representa a pasta onde a macro cdigo atual
est funcionando. ThisWorkbook sempre devolve a pasta no qual o cdigo est sendo executado.
PROPRIEDADE DISPLAYALERTS
Exemplo1:
Este exemplo fecha a pasta de trabalho Tempo.xls sem perguntar se deseja salvar alteraes.
Sub Fecha_arq()
Application.DisplayAlerts = False
Workbooks("Tempo.xls").Close
Application.DisplayAlerts = True
End Sub
Sub Excluir_plan()
Application.DisplayAlerts = False
Application.Worksheets("plan7").Delete
MsgBox "A planilha foi excluda sem aviso...."
Application.DisplayAlerts = True
Application.Worksheets("plan8").Delete
MsgBox "A planilha foi excluda com aviso...."
End Sub
PROPRIEDADE SCREENUPDATING
Essa propriedade permite desativar a atualizao quando False. True a atualizao da tela
ativada. Ou seja, quando voc no quer ver seu ecr acompanhar as aes de seu
procedimento. O padro do VBA sempre mostrar o ecr durante a execuo do procedimento.
Exemplo:
No exemplo abaixo voc ver uma folha em branco, sem qualquer movimento e, em seguida, uma
folha onde as clulas de A1 a A10000 so iguais a "77".
Sub Oculta_ecra()
Range("A1").Select
Application.ScreenUpdating = False
Do Until Selection.Row = 10000
Selection.Value = 77
Selection.Offset(1, 0).Select
Loop
Range("A1").Select
Application.ScreenUpdating = True
End Sub
MTODO QUIT
Esse mtodo encerra o Microsoft Excel com a opo que pergunta ao usurio se deseja
salvar os arquivos que esto sendo fechados, caso marque no fecha sem salvar.
Exemplo:
Sub Fechar()
Application.Quit
End Sub
PROGRAMAO VBA PARA EXCEL 50
MTODO ONKEY
Exemplo1:
O exemplo desabilita a configurao padro da tecla TAB.
Sub Desabilita_Tab()
Application.OnKey "{TAB}", ""
End Sub
Exemplo2:
Habilita a configurao padro da tecla TAB.
Sub Habilita_Tab()
Application.OnKey "{TAB}"
End Sub
Exemplo3:
Quando pressionar a tecla TAB ser exibido uma caixa de mesnsagem.
Sub DemoOnKey()
Application.OnKey "{TAB}", "Message"
End Sub
Sub Message()
MsgBox "Oi"
End Sub
At agora trabalhamos com variveis que armazenam um nico valor. Tambm possvel
ter uma varivel mais poderosa chamada varivel objeto, essa representa uma referncia a um
objeto. Uma varivel de objeto pode armazenar muitos valores, todas as propriedades associadas
ao objeto esto associadas a varivel objeto. Uma varivel de extrema importncia que facilita a
codificao e melhora o desempenho de uma rotina.
Dim Cel As Range - Quando voc define uma varivel de objeto para um objeto Range,
voc pode facilmente manipular o intervalo usando o nome da varivel.
Dim Planilha WorkSheet - Uma varivel objeto Worksheet pode representar uma planilha
ou um conjunto de planilhas, assim voc pode manipular as planilhas utilizando o nome da
varivel.
Dim Arquivo Workbook Quando voc definir uma varivel de objeto para um objeto
Workbook, voc pode manipular as pastas de trabalho do Microsoft Excel fazendo
referencia a varivel.
Dim X As Application Uma varivel objeto application pode representar todo o aplicativo
Microsoft Excel, contendo opes de configuraes, mtodos que retornam objetos e
assim por diante.
Exemplo da Declarao:
Dim aplicativo As Excel.Application
Dim arquivo As Excel.Workbook
Dim planilha As Excel.WorkSheet
O exemplo seguinte cria a varivel de objeto cel, aps atribui a mesma o intervalo A1:E10 da
plan1 na pasta de trabalho ativa. As instrues modificam propriedades do intervalo utilizando o
nome da virivel que referente ao objeto de intervalo.
Sub intervalo_cel()
Dim cel As Range
Set cel = Worksheets("plan2").Range("A1:D5")
cel.Formula = "=RAND()"
cel.Font.Bold = True
cel.Font.ColorIndex = 3
End Sub
Exemplo2:
Voc pode combinar vrios intervalos em um objeto Range usando o mtodo Union. O exemplo
seguinte cria um objeto Range chamado unicel, define-o com os intervalos A1:B2 e C3:D4 e, em
seguida, formata com negrito os intervalos combinados.
Sub uniao_cel()
Dim cel1 As Range, cel2 As Range, unicel As Range
Set cel1 = Sheets("plan2").Range("A1:B2")
Set cel2 = Sheets("plan2").Range("C3:D4")
Set unicel = Union(r1, r2)
unicel.Font.Bold = True
End Sub
O exemplo abaixo abre uma nova pasta de trabalho do Microsoft Excel.
Sub AdicionaArquivo()
Dim Aquivo As Workbook
Dim ArqVelho As Workbook
Set ArqVelho = ActiveWorkbook
Set Arquivo = Workbooks.Add
ArqVelho.Activate
MsgBox Arquivo.FullName & " Nova pasta de trabalho adicionada"
End Sub
No campo Salvar Como Tipo, role pela lista e selecione Suplemento do Excel (*.xlam).
Obs: Se o suplemento puder ser utilizado nas verses anteriores atravs do Excel 2007, escolha
suplemento Excel 97-2003(*.xla).
Note que o arquivo muda a extenso de xlsm para xlam e o local de salvamento muda
automaticamente para uma pasta de suplementos.
Pressione Ctrl+G para exibir a janela de verificao Imediata. Nessa janela, salve o
arquivo, utilizando uma extenso xlam, conforme a figura abaixo:
Obs.: Se o suplemento for utilizado no Excel97-2003, mude o parmetro final xlAddin8 para
xlAddin.
INSTALANDO O SUPLEMENTO
Agora que voc gerou um suplemento, vamos instalar o suplemento. Para isso, vamos
abrir o Excel. A partir do boto do Office, selecionar Opes do Excel. Na janela Opes do
Excel clique em Suplementos. Na parte inferior da janela, escolher Suplemetos do Excel a partir
da lista suspensa Gerenciar. Aps clicar no boto Ir, veja figura abaixo:
O suplemento ento instalado. O Excel copia arquivo do local onde voc salvou para a
localozao adequada da pasta de suplementos. Na caixa de dilogo Suplementos, o ttulo do
FECHANDO SUPLEMENTOS
Para excluir um suplemento necessrio fazer pelo Windons Explorer. Localize o arquivo
renomeie e coloque em outro lugar, ou se realmente no quiser o suplemento pode excluir
definitivamente com Delete.
Um objeto UserForm uma janela ou caixa de dilogo que constitui parte da interface
personalizada pelo programador, tendo a finalidade de facilitar a interao entre a pasta de
trabalho Excel e o usurio de forma amigvel. Os formulrios podem ser construdos com poucos
objetos ou conforme sua necessidade. Esse ambiente personalizado estabelece a entrada de
dados, sem o usurio precisar preencher e navegar pelas inmeras linhas das planilhas. A
vantagem disso que podemos criar pequenos e inteligentes sistemas que solicitem dados aos
usurios, trate esses dados e devolva os resultados, armazenando informaes necessrias em
planilhas Excel.
Aps ter dado o clique em Inserir/UserForm a primeira viso que temos de um userform
um formulrio vazio, conforme figura abaixo:
Quando selecionamos o formulrio, a caixa de ferramentas fica ativa. Esta possui todos os
controles necessrios para criarmos nosso formulrio. Sempre que voc desejar ter uma idia da
montagem do seu formulrio, voc pode execut-lo, clicando em executar ou tecle F5. Fechando
o formulrio voc volta para o ambiente de criao.
CONTROLES DE INTERFACE
Rtulo (Label1) permite colocar um texto dentro do formulrio. Para alterar o texto a ser
exibido no controle, clique na propriedade Caption e digite o texto desejado. Para formatar use as
propriedades Font e ForeColor.
Mtodo set Focus esse mtodo d foco caixa de texto que o chamou.
Evento Change - ocorre sempre que uma cauxa de texto tem sua propriedade Text alterada,
ou seja, com qualquer digitao executada.
Caixa de Combinao (ComboBox1) serve para mostrar ao usurio uma lista de opes
multipla escolha. Elas podem, ou no, permitir digitao, uma boa forma de impedir que o
usurio insira em sua planilha informaes que no estejam se acordo com seus objetivos. Abaixo
segue as principais propriedades especificas, Mtodos e Eventos do controle caixa de
combinao.
Propriedade List permite acesso a lista de opes. Por exemplo, se uma lista possuir cinco
elementos, ComboBox1.list(0) ser o primeiro, e ComboBox1.list(5) ser o ltimo elemento da
lista.
Propriedade Style essa propreidade vai definir o estilo da caixa de combinao. Temos
duas opes fmStyleDropDownCombo permite a digitao, e fmStyleDropDownList obriga
a escolha de um item na lista.
Mtodo AddItem - mtodo que permite adicionar um novo item em uma caixa de
combinao. Sua sintaxe:
Onde Item uma string ou varivel indicando o texto do item a ser inserido, e ndex a
posio em que o item deve ser inserido na caixa de combinao.
Mtodo RemoveItem Permite remover um item da lista de uma caixa de combinao. Sua
sintaxe:
Propriedade Value esta propriedade define o estado do boto. True marca o boto e false
desmarca.
Quadro (Frame1) Muito utilizado como continer de controles, tais como, Boto de Opo e
Caixa de Seleo.
Font Exibe a caixa padro de Fonte do Sitema onde podemos determinar a configurao dos
textos exibidos no formulrio ou nos controles.
RowSource - origem dos dados do controle. Pode ser um intervalo de clulas da planilha.
MTODOS DE UM USERFORM
EVENTOS EM UM USERFORM
Os eventos mostrados na sequncia servem tambm para vrios outros controles, portanto
mais a frente podemos apenas expandir o conceito.
Initialize acontece toda vez que um formulrio for carregado para memria.
Voc pode redimensionar o formulrio pegando e arrastando as alas no lado direito, parte
inferior ou canto direito inferior do userform. Para adicionar qualquer um ou mais controles
descritos acima, clique no controle desejado na caixa de ferramentas, mova o mouse at o
formulrio clique e arraste para dimensionar o controle, depois faa os ajustes necessrios a seu
critrio, como tambm, alterar manualmente as propriedades na janela Propriedades, conforme as
decries das principais propriedades acima.
PROGRAMANDO O USERFORM
Diferentemente dos outros mdulos, dar um duplo clique no mdulo do formulrio abre o
formulrio no Modo de Criao. Para visualizar o cdigo, clique com o boto direito do mouse no
mdulo ou no userform no Modo de Criao e selecione Exibir Cdigo, ou de um duplo clique no
userform.
Exatamente como uma planilha, um userform tem eventos desencadeados por aes.
Depois que o userform foi adicionado ao projeto, os eventos estaro disponveis na lista suspensa
que fica no canto superior direito da janela de cdigo, selecionando-se Userform na lista suspensa
Objeto, canto superior esquerdo da janela cdigo.
PROGRAMANDO CONTROLES
Para programar um controle, selecione o controle no qual voc deseja programar, clique
com o boto direito do mouse sobre o controle, selecione Exibir Cdigo ou d um duplo clique no
controle. O rodap, o cabealho e a ao padro para o controle so automaticamente inseridos
na janela de cdigo. Para ver e/ou escolher outras aes para um controle, selecione o controle
na lista de Objeto e visualize as aes na lista de eventos. Podem ser escolhidas vrias aes
para um mesmo controle na lista de eventos.
Aps executar o cdigo acima voc visualizar seu formulrio conforme abaixo a cada
informao que inserir nas caixas de textos e clicar no boto Ok uma planilha do Excel estar
recebendo os dados.