Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila VBA Excel
Apostila VBA Excel
Apostila VBA Excel
PROGRAMAO
VBA PARA EXCEL
INTRODUO
Esta apostila foi desenvolvida pelo SENAC/RS, para apoio ao aluno durante o
desenvolvimento do curso de Programao VBA para Excel.
A disciplina introduz o estudo da Linguagem de Programao, destacando a construo de
Macros e Funes do Usurio. Abrange os conceitos fundamentais para criao de macros e
funes interagindo com o Excel e outros aplicativos Microsoft.
Este material composto de bases tericas que abrangem o contedo programtico do
curso com exemplos da aplicao.
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
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.
Procedimentos de evento so privados por padro, a palavra-chave Private
automaticamente inserida antes da declarao do procedimento (Private Sub evento).
Sintaxe Sub-rotinas:
Public Sub <nome_da_macro> ( )
<corpo_da_macro>
<corpo_da_macro>
End Sub
End Sub
Sintaxe Funes:
Public Function <Nome Funo>(argumentos)
End Function
End Function
Sub Passagem_valor()
Dim x As Integer
x=3
MsgBox " Valor dado a variavel X : " & x
'Aqui estou chamando a procedure que vai dobrar o valor de x (sub Dobro)
Dobro (x)
MsgBox "Valor de X Aps a Execuo: " & x
End Sub
Sub Dobro(ByVal Num As Integer)
MsgBox " Valor passado como parmetro:" & Num
Num = Num * 2
MsgBox "Dobro do valor:" & Num
End Sub
Na prtica, ao passar um parmetro por valor, voc passa apenas uma cpia do valor da
varivel e nesta cpia que a funo/procedimento chamado trabalha, sem afetar o valor original
da varivel passada como parmetro.
PASSAGEM DE PARMETROS POR REFERENCIA BYREF
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:
Public Sub DobraValor(ByRef Num As Integer)
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.
Sub Passagem_Ref()
Dim y As Integer
y=3
MsgBox "Valor original atribuido a Y : " & y
''Aqui estou chamando a procedure que vai dobrar o valor de y (sub Dobro_ref)
Call Dobro_ref(y)
MsgBox "Aps a execuo da procedure dobro Y : " & y
End Sub
Sub Dobro_ref(ByRef Num As Integer)
MsgBox "Valor passado como parmetro:" & Num
Num = Num * 2
MsgBox "Dobro do valor :" & Num
End Sub
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
10
Exemplo 2
ActiveCell.Value = 10,0
O objeto ActiveCell se refere clula ativa no momento da execuo da macro: no
exemplo acima, a clula selecionada receber o valor 10,0
PROPRIEDADES
11
No exemplo acima, Delete um mtodo do objeto ActiveCell: ele apagar a clula ativa.
Quit um mtodo do objeto Application; ele encerra o Excel (se tiver uma planilha aberta no
salva, voc deve salva-l antes da concluso desta ao).
CLASSES E INSTNCIAS
12
Observe:
Os mtodos so exibidos com o cone verde
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.
Os procedimentos correspondentes aos eventos tm todos a seguinte forma:
Private Sub Objeto_Evento(argumentos)
Exemplos:
Private Sub Workbook_Open()
Ocorre quando o arquivo aberto por ao do mtodo Open.
13
14
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 palavrachave 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:
Function <Nome da Funo> ( <argumento1>, <argumento2>, )
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.
Definio do tipo de dados para os argumentos e do tipo da funo
Todos os elementos de entrada e sada de uma funo tm um tipo de dados atribudo.
Assim os argumentos devero ser definidos com o tipo de dados respectivo e a funo dever ser
definida do tipo de dados que ela for retornar o valor para o interior de uma clula do Excel.
Function <Nome da Funo> ( <argumento1> As <Tipo>, ) As <Tipo>
End Function
Nota: Se os tipos de dados no forem definidos ser assumido por padro como tipo Variant.
15
Exemplo 1:
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:
Function lucro(venda, compra)
lucro = (venda - compra) / compra
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.
Se a mdia menor que 7,0, escrever a mensagem Reprovado por mdia;
Se a frequncia inferior a 75% , escrever a mensagem Reprovado por frequncia;
Se a mdia maior e igual a 7,0 e menor 9,5, escrever a mensagem Bom;
Se a mdia maior e igual a 9,5, escrever a mensagem timo.
Function resultado (freq As Single, med As Single) As String
If freq < 0.8 Then
resultado = "reprovado por frequncia"
ElseIf med < 7 Then
resultado = "reprovado por mdia"
ElseIf med <= 9 Then
resultado = "satisfatrio"
Else
resultado = "timo"
End If
End Function
Execuo de uma Funo
Uma vez que uma funo produz um valor ela poder ser executada:
dentro de uma clula numa planilha, semelhana de qualquer uma outra funo do Excel.
dentro de qualquer outra funo ou SubRotina.
16
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
17
Para usar necessrio uma instruo para que a funo seja procurada no aplicativo
Excel. Essa instruo se chama Application, e usada como no exemplo acima.
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.
Function Acha_maior(n1 As Integer, n2 As Integer)
If n1 > n2 Then
acha_maior = n1
Else
acha_maior = n2
End If
End Function
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
DEFINIO DE ROTINAS/SUBROTINAS (MACROS)
18
O corpo da macro pode ser composto por um conjunto de instrues, sendo que cada
instruo diferente necessita de estar numa linha diferente. Contudo, quando se trata de
instrues muito longas o editor faz a sua partio por diversas linhas, recorrendo ao operador _,
com objetivo de facilitar a leitura.
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:
Prompt a mensagem a ser exibida ao usurio quando executada a inputbox.
Title o ttulo da caixa de mensagem, situado na barra de identificao (barra azul).
Default um valor que j aparece preenchido na inputbox como valor padro.
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.
19
FUNO MSGBOX
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.
Prompt a mensagem a ser exibida na caixa de mensagem. Se construir uma mensagem
muito longa poder utilizar o caractere Enter Chr(13); Exemplo:
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.
Context - Nmero do ndice do tpico de ajuda.
Exemplo:
MsgBox "Erro de Sintaxe !!!", , "Mensagem de Erro"
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.
20
21
VARIVEL IMPLCITA ME
22
OBJETO RANGE
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.
Um objeto Range pode ser representado de diversas formas. Pode ser:
Range(A1): - Uma clula ,A1;
Range(B2:C3): - Um intervalo de clulas, B2:C3.
Range(A1, B2:C3): - Uma clula, A1, mais um intervalo B2:C3
Range(Lucro): - Um intervalo com o nome Lucro
Range.Value: - Valores das clulas do range
Range(B2:C3).Cells(1, 2): - Referncia clula na 1 linha e na 2 coluna dentro do intervalo
B2:C3 (clula C2)
Range.Offset(RowOffset, ColumnOffset): - Desloca o range RowOffset linhas para cima/baixo e
ColumnOffset colunas para a direita/esquerda
Range.Address(RowAbsolute, ColumnAbsolute): - Endereo do range.
Range.Count: - Nmero de clulas do range
Exemplo:
Sub Ex1()
Range("A1:B4") = "Ol"
End Sub
PROPRIEDADE NAME
23
Exemplo2:
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
OBJETO RANGE X MTODO SELECT
24
PROPRIEDADE CELLS
25
Sub valor_reajuste()
Dim preco, acrec As Single
Dim L As Integer
L=2
While Cells(L, 1) <> ""
If Cells(L, 1) <> "" Then
preco = Cells(L, 1)
If preco <= 500 Then
acrec = preco * 0.3 + preco
Else
acrec = preco
End If
End If
Cells(L, 2).Select
Cells(L, 2) = acrec
L=L+1
Wend
End Sub
As trs afirmaes abaixo so equivalentes:
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.
26
Com base na planilha abaixo a macro que recebe 2 valores da planilha e uma opo, retorna o
valor 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:
Name Define o tipo da fonte.
Bold True define o estilo da fonte negrito.
Itlic - True define se o estilo da fonte itlico.
Size Define o tamanho da fonte.
ColorIndex define cor da fonte com valor inteiro de 1 a 56.
OBJETO INTERIOR
O objeto Interior define o plano de fundo para as clulas selecionadas Suas principais
propriedades so:
27
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
PROPRIEDADES COLOR E COLORINDEX
29
Sub Tabela_cor()
Dim cor As Integer
For cor = 1 To 56
Range("a" & cor).Interior.ColorIndex = cor
Range("B" & cor) = cor
Next
End Sub
COLEO BORDERS
30
xlThick
xlHairline -
xlDashDot xlDashDotDot xlDot xlDouble 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
31
As propriedades Column e Row indicam coluna e linha, que formam a base de um range,
ou seja, relativas clula do canto superior esquerdo.
PROPRIEDADE COLUMNS E ROWS
End Sub
Sub Conta_Colunas_linhas()
Dim lin As Integer, col As Integer
lin = Range("A1:D10").Rows.Count 'retorna o nmero de linhas no intervalo .
col = Range("A1:D10").Columns.Count ' retorna o nmero de colunas no intervalo .
Range("E1") = lin
Range("E2") = col
End Sub
PROPRIEDADE RESIZE
32
PROPRIEDADE OFFSET
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
33
OBS.: Voc pode usar o mtodo Select para selecionar um intervalo de clulas, e para tornar uma
nica clula ativa, use o mtodo Activate.
MTODO COPY
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
34
35
OBJETO WORKSHEET
O objeto Worksheet representa uma planilha, especificada da coleo Worksheets. O
objeto Worksheet tambm um membro da coleo Sheets. A coleo Sheets representa todas
as planilhas da pasta de trabalho especificada.
Quando queremos referenciar uma Worksheets de uma pasta de trabalho necessitamos
indicar qual planilha, para isso temos que especificar com o nmero de ndice qual a posio da
planilha. Por exemplo, Worksheets (1) a primeira planilha da esquerda na pasta de trabalho,
Worksheets(2),... e assim sucessivamente.Todas as planilhas so includas na contagem do
ndice, mesmo se eles esto escondidos.
Use Worksheets (ndice), ou o nome da planilha Worksheets(Plan1), ou ainda se a
planilha foi renomeada Worksheets(Balano), para retornar um objeto de planilha nica.
Sheets um conjunto de planilhas,. Sheets (1) a primeira planilha na pasta de trabalho,
ou Sheets(plan1), ou se a planilha foi renomeada indicar o novo nome Sheets(FolhaPgto).
OBS: Um objeto um tipo especial de varivel que contm os dados e cdigos. A coleo um
grupo de objetos da mesma classe.
Exemplos:
A macro abaixo escreve na Plan1 no intervalo A1:C5 o texto "OL".
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.
36
PROPRIEDADE CODENAME
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:
A macro abaixo muda o nome de uma planilha especificada.
Sub Renomear_plan1()
Sheets("Plan1").Name = "Equilibrio"
End Sub
PROPRIEDADE VISIBLE
37
Exemplos:
O exemplo abaixo oculta Plan2
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
38
Sub Adiciona_ultima()
Worksheets.Add After:=Worksheets(Worksheets.Count), Count:=4
End Sub
Exemplo 3:
Insere uma planilha com nome aps a ltima.
Sub Add_ultima()
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Contas"
End Sub
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
39
40
combinao onde aparece Geral voc encontrar o objeto Worksheet, na caixa de com binao da
direita voc escolhe o evento desejado.
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:
Private Sub Worksheet_Activate()
MsgBox "Voc deu um clique na Plan1!!!!", vbExclamation
End Sub
OBS.: O evento Activate ocorre quando um arquivo (WorkBook), pasta (WorkSheet) ou planilha
(Sheets) ativada.
EVENTO DEACTIVATE
41
Exemplo:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
MsgBox "Voc deu um duplo clique na clula"
Target.Interior.ColorIndex = 5
Cancel = True
End Sub
OBS.: A utilizao de Cancel =True no exemplo acima evita que a ao padro ocorra na clula
que sofreu o duplo clique, que colocar a clula em modo de edio.
EVENTO BEFORERIGHTCLICK
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.
Private Sub Worksheet_Calculate()
Dim S As Single
S = Range("C2").Value
If S < 0 Then
MsgBox "Negativo!!!!! Voc Gastou mais que ganhou!", vbCritical
Else
MsgBox "Positivo!!!!! Parabns!!!!", vbExclamation
End If
End Sub
42
EVENTO CHANGE
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:
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "Clula alterada" & Target.Address, vbCritical
End Sub
Exemplo 2:
Quando uma clula for preenchida com um valor, a cor de fundo da clula ficar em vermelho.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
For Each cel In Target
cel.Interior.ColorIndex = 3
Next
End Sub
Exemplo 3:
A macro abaixo fora a entrada do texto em caracteres maisculos.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 1 Then 'target.column - numero coluna onde ocorrer o efeito
If Not (Target.Text = UCase(Target.Text)) Then 'target.text: contedo texto a ser digitado
Target = UCase(Target.Text)
End If
End If
End Sub
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.
43
Exemplo:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 Then
MsgBox " 1 Clula selecionada ", vbExclamation
Target.Interior.Pattern = 13
Else
MsgBox Target.Count & " Cluals selecionadas ", vbInformation
Target.Interior.ColorIndex = 10
Target.Font.Bold = True
Target.Value = "Ol"
End If
End Sub
44
OBJETO WORKBOOK
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.
OBS.:Pastas de trabalho so uma coleo de todos os objetos Workbook. Planilhas so uma
coleo de objetos Worksheet. O objeto Workbook representa uma pasta de trabalho, o objeto
Worksheet representa uma planilha, o objeto sheet representa uma folha de planilha e o objeto
Range representa um intervalo de clulas.
PROPRIEDADE FULLNAME
45
MTODO ADD
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:
A macro abaixo cria um novo arquivo fecha salvando com nome.
Sub CriaNovo_arq()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="C:\Macros_vba\Cadastro.xls", FileFormat:=xlExcel7
End Sub
MTODO ACTIVATE
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.
A macro abaixo fecha a pasta de trabalho ativa sem salvar.
Exemplo 1:
Sub Feccha_SemSalvar()
ActiveWorkbook.Close False
End Sub
Exemplo 2:
Esse exemplo a macro fecha a pasta de trabalho ativa e o salva.
Sub Fecha_salva()
ActiveWorkbook.Close True
End Sub
Exemplo 3:
A macro do exemplo abaixo fecha a pasta de trabalho ativa dando a opo de escolha se o
usurio deseja salvar.
46
Sub Salva_sim_nao()
ActiveWorkbook.Close
End Sub
MTODO SAVE
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
47
EVENTO NEWSHEET
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.
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Sh.Move After:=Worksheets(Worksheets.Count)
End Sub
EVENTO SHEETCHANGE
48
Sub Cria_Salva_Fecha_Arquivo()
Dim nomearq As String
Workbooks.Add
nomearq = InputBox("Informe o nome do novo arquivo")
ActiveWorkbook.SaveAs Filename:=nomearq, FileFormat:=xlExcel7
ActiveWorkbook.Close savechanges:=False 'Fecha a pasta recem criada
End Sub
Exemplo 2:
A macro abaixo abre uma pasta de trabalho existente, localizando o caminho onde a mesma se
encontra.
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
49
Exemplo2:
A macro abaixo exclui uma planilha sem aviso Application.DisplayAlerts = False,
antes de
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
50
MTODO ONKEY
51
52
53
SUPLEMENTOS
Os suplementos fornecem comandos e funcionalidades opcionais para o Microsoft Excel.
Por predefinio, os suplementos no esto imediatamente disponveis no Excel, devem
primeiramente ser instalados ou ativados para poder utiliz-los.
Suplementos so projetos desenvolvidos em VBA Excel, com a extenso XLA
completamente ocultos aos olhos do usurio. Uma vez que um suplemento criado e instalado no
Excel, as suas macros ou funes podem ser utilizadas em qualquer pasta de trabalho que estiver
aberta. Como o suplemento nunca pode ser exibido, seu cdigo no pode selecionar nem ativar
nenhuma clula na pasta de trabalho de suplementos. permitido salvar dados no arquivo de
suplementos, mas voc no pode selecionar o arquivo. Alm disso, se voc gravar os dados no
arquivo de suplementos que voc quer disponibilizar futuramente, os cdigos de suplementos
precisam tratar o salvamento do arquivo. Voc pode adicionar ThisWorkbook.Save ao evento
Workbook_BeforeClose do suplemento.
CONVERTENDO UMA PASTA DE TRABALHO EM UM SUPLEMENTO
54
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.
55
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:
56
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
57
FECHANDO SUPLEMENTOS
58
USERFORMS
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.
Para inserir um UserForm no ambiente VBA clique no menu Inserir/UserForm, veja na
figura abaixo:
Aps ter dado o clique em Inserir/UserForm a primeira viso que temos de um userform
um formulrio vazio, conforme figura abaixo:
59
propridade Name e digitamos Cadastro. Tambm mudamos o rtulo da barra de ttulo que tem o
mesmo nome UserForm1, Para isso, clicamos na propriedade Caption e digitamos Principal.
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.
Caixa de Texto (TextBox1) so as melhores formas de receber dados de entrada. A caixa
de texto permite digitao de qualquer tipo de dados alfanumrico, numrico, datas e at mesmo
caracteres especiais.
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.
Evento Enter ocorre quaando a caixa de texto recebe o foco.
60
61
62
Os eventos mostrados na sequncia servem tambm para vrios outros controles, portanto
mais a frente podemos apenas expandir o conceito.
Activate ocorre quando o formulrio for ativado.
Click d-se toda vez que o formulrio for clicado.
Doubleclick acontece sempre que o formulrio receber um duplo clique.
Deactivate ocorre quando um formulrio for desativado.
Initialize acontece toda vez que um formulrio for carregado para memria.
63
CRIANDO UM USERFORM
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.
64
Vrios eventos para o userform podem ser selecionados na lista suspensa na parte
superior esquerda 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.
No exemplo abaixo criamos um programa no controle Boto de Comando com o Name
BTN_OK, o programa tem o objetivo de inserir nome e idade em uma planilha do excel.
65
Antes de executar o userform precisamos cham-lo a partir de qualquer mdulo, para isso
utilizamos o mtodo Show, sua sintaxe: NameForm.Show.
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.
66
REFERNCIAS BIBLIOGRAFICAS
JELEN, Bill VBA e Macros para Microsoft Office Excel 2007
FERNANDES, Maicris Desenvolvendo Aplicaes Poderosas com Excel e VBA
67