Capítulo 3: Introdução A Macros
Capítulo 3: Introdução A Macros
Capítulo 3: Introdução A Macros
Introdução a Macros
O primeiro passo para se trabalhar com macros é a criação de Macros Gravadas. Este é um
recurso de grande valia no Excel. Com ele, é possível gravar uma série de ações e reproduzi-
-las ao bel-prazer. Entretanto, como será visto adiante, trata-se de um recurso limitado. São
necessários outros conhecimentos para que sua macro fique mais flexível, capaz de realizar
tarefas mais complexas. É recomendável fazer-se intenso uso da gravação de macros, dada a
economia de tempo e a facilidade para se realizar a tarefa desejada sem ser preciso memorizar
inúmeras instruções em VBA.
Para criação de uma macro gravada, entre em Ferramentas/Macro/Gravar nova macro, ou
simplesmente acione o botão de Gravação na Barra de Visual Basic: . Aparecerá, então, a
janela da Figura 21.
No campo “Nome da macro”, forneça o nome da macro a ser gravada. Caso não seja
fornecida uma denominação, o Excel atribui um nome padrão (Macro1, Macro2 etc.). Cabe
salientar que o nome da macro não pode conter espaços nem iniciar com números.
No campo “Tecla de Atalho”, é possível criar um atalho para executar a macro. Exemplo:
Ctrl+A. Cuidado, pois o Excel já contém alguns atalhos programados. Caso o atalho para a
macro seja o mesmo que um atalho já usado pelo Excel, o atalho do Excel deixa de existir. É
possível denominar um atalho por uma letra maiúscula. Nesse caso, o Excel insere Ctrl+Shift
no diálogo, conforme a Figura 22.
Provavelmente, existe apenas uma macro na janela de seleção de macros – aquela que acabou
de ser gravada. Selecione-a e clique no botão “Executar”. Seu nome deve aparecer na célula A1.
Apague o conteúdo da célula A1, retorne à janela de seleção de macros e acione o botão
“Editar”. Note que o VBE é aberto, e uma janela semelhante à da Figura 25 deve aparecer.
20 Macros para Excel na Prática Marcelo de Andrade Dreux ELSEVIER
Fernando Uilherme Barbosa de Azevedo
Conforme já sugerido, abra o Excel e o VBE lado a lado para que ambos possam ser vistos
simultaneamente, conforme a Figura 26.
Note que no VBE há uma série de linhas de código referentes à macro criada. Foi criado
o Módulo 1, que fica do lado esquerdo do VBE, onde está armazenada a macro gravada. Ao
criar novas macros, é recomendável que elas fiquem dentro de módulos. Para programadores
avançados, é possível criar macros também inserindo uma Classe.
Crie macros dentro das planilhas (Plan1, Plan2,...) ou em “EstaPasta_de_Trabalho” somente
quando estiver trabalhando com Ferramentas de Controle dentro da aba, assunto que será
Capítulo 3 Introdução a Macros 21
abordado posteriormente. Uma macro inserida dentro de uma aba causará problemas ao se
acessarem outras planilhas e outros arquivos.
Note o código gerado:
Sub Macro1()
'
' Macro1 Macro
' Macro gravada em 25/06/2009 por Fernando
'
'
Range("A1").Select
ActiveCell.FormulaR1C1 = "Fernando"
Range("A2").Select
End Sub
Todas as macros começam com “Sub nome()”, que significa sub-rotina, e terminam com
“End Sub”, onde nome é o nome da macro. Entre parênteses ficam eventuais parâmetros da
macro. O assunto parâmetros será abordado mais adiante. Vale ressaltar que palavras reservadas
do VBA aparecem sempre na cor azul; no exemplo, apenas Sub e End Sub.
Linhas em verde são comentários sobre o código. O programa, ao ser executado, ignora
todas as linhas em branco e todas as linhas em verde. Linhas em branco e comentários servem
apenas para ajudar o programador a entender o código. Ao gravar uma macro, o Excel tem
uma estrutura de comentários e linhas em branco onde se repete o nome da macro e se escreve
sua descrição e a tecla de atalho, caso existam. Para adicionar comentários, basta começar a
frase com aspas simples, a tecla localizada abaixo do “Esc” no teclado brasileiro. Note que,
ao terminar de escrever uma frase iniciada por aspas simples e teclar “Enter”, o VBE coloca
a frase em verde, indicando que se trata de um comentário. Também podem ser inseridos
comentários ao final de uma instrução.
As linhas em preto são instruções a serem executadas. Cada linha contém uma instrução.
Caso haja uma célula no Excel sendo editada ou haja alguma janela de informação do Excel
aberta, o editor de VBE fica travado. Tecle “Enter” no Excel ou feche a janela para destravar o
VBE. Também é impossível executar uma macro se uma outra já estiver sendo exectuada. É
necessário parar a execução de uma macro com o botão antes de executar outra.
Após ter dividido a tela entre Excel e VBE e apagado o conteúdo da célula A1, clique em
qualquer lugar no código da macro gravada e tecle F8. Surge uma seta amarela e a primeira
linha fica iluminada de amarelo, indicando que esta será a próxima instrução a ser execu-
tada. Ao teclar F8 novamente, a instrução em amarelo é executada e a próxima instrução é
iluminada em amarelo. A primeira instrução é o início da macro e, na verdade, não executa
instrução alguma.
22 Macros para Excel na Prática Marcelo de Andrade Dreux ELSEVIER
Fernando Uilherme Barbosa de Azevedo
Note que os comentários (em verde no VBE) são ignorados pelo programa.
Ö Sub Macro1()
'comentário 1
Range("A1").Select ' comentario 2
ActiveCell.FormulaR1C1 = "Fernando"
Range("A2").Select
End Sub
Sub Macro1()
'comentário 1
Ö Range("A1").Select ' comentario 2
ActiveCell.FormulaR1C1 = "Fernando"
Range("A2").Select
End Sub
Tecle F8 novamente. Note que somente agora a célula A1 foi selecionada. A próxima ins-
trução é ActiveCell.FormulaR1C1 = “Fernando”. Esta instrução irá escrever o nome “Fernando”
na célula ativa; no caso, A1.
Sub Macro1()
'comentário 1
Range("A1").Select ' comentario 2
Ö ActiveCell.FormulaR1C1 = "Fernando"
Range("A2").Select
End Sub
Tecle F8 novamente e o nome é escrito na célula A1. A próxima instrução irá selecionar
a célula A2. Isso foi gravado porque foi pressionada a tecla “Enter” depois de escrito o nome
na célula A1.
Capítulo 3 Introdução a Macros 23
Sub Macro1()
'comentário 1
Range("A1").Select ' comentario 2
ActiveCell.FormulaR1C1 = "Fernando"
Ö Range("A2").Select
End Sub
Tecle novamente F8 e a célula A2 é selecionada. Tecle mais uma vez F8. A macro termina
e a seta amarela desaparece.
Foi gravada e executada sua primeira macro. Daqui em diante, seus projetos ficarão gra-
dativamente mais complexos. Vale lembrar que se deve trabalhar sempre com as duas telas
simultaneamente e executando instrução por instrução, com o auxílio da tecla F8, para com-
preender melhor o código e identificar possíveis erros.
Apague o conteúdo da célula A1. Troque, no código, o nome entre aspas para qualquer
outra palavra. Execute a macro novamente. Caso queira executar a macro inteira de uma só vez,
clique em qualquer lugar do código da macro e pressione no VBE ou, então, selecione
no caminho Ferramentas/Macro/Macros a macro a ser executada.
Execute a macro do primeiro exemplo e inicie a gravação de uma nova macro. O objetivo
desta nova macro é somente pintar e colocar bordas na célula A1. Por exemplo, clique na
célula A1 e troque a cor da fonte para vermelho, interior amarelo e bordas normais ao redor
da célula, conforme a Figura 31.
O código gerado para esta nova macro é mostrado na Macro 2. No VBE, clique no Módulo1
para visualizar este código. Caso o arquivo.xls tenha sido fechado, o código da nova macro
estará no Módulo2.
24 Macros para Excel na Prática Marcelo de Andrade Dreux ELSEVIER
Fernando Uilherme Barbosa de Azevedo
Sub Macro2()
'
' Macro2 Macro
' Macro gravada em 25/06/2009 por Fernando
'
'
Range("A1").Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 3
Selection.Borders(xlDiagonalDown).LineStyle =
xlNone
Selection.Borders(xlDiagonalUp).LineStyle =
xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End Sub
Para um usuário iniciante, a visão de um código longo assim pode ser desanimadora. Não
se preocupe em entender, no estágio atual, o código por completo. Lembre-se sempre de usar
a tecla F8 para tentar acompanhar o que o VBE está fazendo.
Observe que, neste código, existem grupos With... End With, que são blocos de proprie-
dades e métodos (ações). Cada bloco desses está adicionando um tipo de borda – esquerda,
topo, baixo, direita. Ao gravar as instruções dentro de um bloco With... End With, o VBE
evita ficar repetindo o nome da borda selecionada (exemplo: Selection.Borders(xlEdgeLeft)),
ao modificar cada propriedade (LineStyle, Weight, ColorIndex). O mesmo grupo de instruções
poderia ser escrito de uma forma menos elegante como:
Selection.Borders(xlEdgeLeft).LineStyle = xlContinuous
Selection.Borders(xlEdgeLeft).Weight = xlThin
Selection.Borders(xlEdgeLeft).ColorIndex = xlAutomatic
Sub soma()
Range("B4").Select
ActiveCell.FormulaR1C1 = "=R[-1]C+R[-2]C+R[-3]
C"
Range("B5").Select
End Sub
Note que o VBE está trabalhando com FormulaR1C1. Isso significa que, a partir da célula
na qual está sendo inserida a fórmula, podem ser usadas células no formato RC, onde R é
relativo às linhas (Rows) e C, às colunas (Columns). R positivo tem o sentido para baixo; e R
negativo, para cima. Caso a linha não mude, é possível simplesmente escrever R. Analogamente,
C positivo tem o sentido para a direita; e C negativo, para a esquerda. Caso a coluna não mude,
é possível simplesmente escrever C. Note também que a fórmula tem de estar entre aspas e
começando com o símbolo “=”. Neste exemplo, está sendo usado o operador aritmético “+”,
que faz a adição dos três números.1
No exemplo da figura, as três células acima de B4 estão sendo acessadas, por isso aparece
R[-1]C, R[-2]C, e R[-3]C no código. Como a coluna não varia, a letra C aparece sem um
colchete ao lado.
No caso de se usar ActiveCell.Formula em vez de ActiveCell.FormulaR1C1, as células
passam a ser acessadas como B1, B2, B3, o que notadamente é uma representação mais in-
tuitiva. A vantagem de se usar FormulaR1C1, entretanto, é que seu código pode ser copiado
para outras colunas sem precisar ser modificado. Na Macro 4, é apresentado um código para
obter o resultado da Macro 3, utilizando ActiveCell.Formula.
Sub soma2()
Range("B4").Select
ActiveCell.Formula = "=B3 + B2 + B1"
Range("B5").Select
End Sub
1
Outros operadores aritméticos serão descritos na Seção 10.1.
Capítulo 3 Introdução a Macros 27
Sub valores()
valor1 = 7
valor2 = 9
End Sub
End Sub
A primeira macro, valores, não contém parâmetros. Possui duas variáveis2, valor1 e va-
lor2, com valores 7 e 9, respectivamente. Essa primeira macro chama a macro media, que
recebe como parâmetros os dois valores e calcula sua média aritmética. Note que dentro
dos parênteses da macro media há os parâmetros nota1 e nota2, responsáveis por receber
duas informações e passá-las para o interior da macro. A instrução MsgBox será explicada
no próximo capítulo.
Execute a macro valores com auxílio da tecla F8 e veja que ela passa os valores para a macro
media e, ao final, retorna para a macro valores, onde encerra sua execução.
2
Variáveis serão estudadas em maior profundidade no Capítulo 5.
28 Macros para Excel na Prática Marcelo de Andrade Dreux ELSEVIER
Fernando Uilherme Barbosa de Azevedo
Para isso, deve ser gravada uma macro, datagrafico, na planilha “Gráficos”, que será usada
posteriormente.
Na planilha “Gráficos”, preencha a célula A1 com: Gráfico gerado em:
Inicie a gravação da macro datagrafico através do menu do Visual Basic.
6XEGDWDJUD¿FR
'
' Macro2 Macro
' Macro gravada em 25/06/2009 por Fernando
'
'
Range("B1").Select
ActiveCell.FormulaR1C1 = "=Now()" 'data e hora de hoje
Range("B1").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End Sub
Macro 6 – Exemplo que escreve a data e a hora em que a macro foi executada.
Capítulo 3 Introdução a Macros 29
Execute a macro novamente e veja que a hora mudou. O objetivo desta macro é, no futuro,
mostrar ao usuário quando o gráfico do Sistema de Controle de Vendas foi gerado pela última vez.
Sub erro()
End Sub
3
Tratamento de erros será apresentado no Capítulo 18.
4
A declaração de tipos de variáveis será apresentada no Capítulo 5.
30 Macros para Excel na Prática Marcelo de Andrade Dreux ELSEVIER
Fernando Uilherme Barbosa de Azevedo
Cada erro tem um código. Quando o VBE não consegue descobrir qual é o erro, atribui o
número 1004, que significa “erro não reconhecido”.
Quando se está criando uma macro, é possível que mensagens de erro apareçam diversas
vezes. Não se desespere. Esta é a fase de depurar seu código. Pressione o botão “Depurar”
na janela de Erro; o VBE será aberto e a linha em que ocorreu o problema será iluminada.
Corrija o erro e pressione F8 para que o VBE execute a macro linha por linha. Quando forem
removidos todos os erros, pressione para executá-la.