com o VBA
O Poder do Excel
O Visual Basic for Applications (VBA), combinado com
o Microsoft Excel, provavelmente a ferramenta
mais poderosa disponvel para voc. O VBA est nos
1
computadores de 500 milhes de usurios do Microsoft
Office, e a maioria nunca descobriu como aproveitar
NESTE CAPTULO
seu poder no Excel. Usando o VBA, possvel acelerar O Poder do Excel ...........................................7
a produo de qualquer tarefa no Excel. Se voc
regularmente usa somente o Excel para produzir uma Dificuldades Iniciais .....................................7
srie de grficos mensais, pode fazer o VBA realizar a Conhecendo Suas Ferramentas:
mesma tarefa em questo de segundos. A Guia Desenvolvedor ...................................9
Entendendo Qual Tipo de
Dificuldades Iniciais Arquivo Permite Macros..............................10
H duas barreiras no aprendizado bem-sucedido da Segurana de Macro ...................................11
programao em VBA. Primeiro, o gravador de macro
Viso Geral da Gravao,
do Excel falho e no produz cdigo funcional que
Armazenamento e Execuo de
possa ser usado como modelo. Segundo, para muitos
uma Macro .................................................14
que aprenderam uma linguagem de programao como
o BASIC, a sintaxe do VBA terrivelmente frustrante. Executando uma Macro ..............................16
Entendendo o VB Editor ..............................19
O Gravador de Macro No Funciona!
Entendendo os Problemas do
A Microsoft comeou a dominar o mercado de Gravador de Macro .....................................21
planilhas em meados da dcada de 1990. Apesar
de ela ter sido extremamente bem-sucedida em Prximos Passos .........................................31
construir um poderoso programa de planilhas para
que qualquer usurio do Lotus 1-2-3 pudesse fazer a
transio facilmente, a linguagem de macro era muito
diferente. Qualquer pessoa proficiente na gravao de
macros no Lotus 1-2-3 que tentasse gravar algumas
macros no Excel provavelmente falharia. Apesar de a
linguagem VBA da Microsoft ser muito mais poderosa
que a linguagem de macro do Lotus 1-2-3, a falha
fundamental que o gravador de macro no funciona.
Com o Lotus 1-2-3, voc podia gravar uma macro
hoje, execut-la amanh, e ela funcionaria fielmente.
Ao tentar a mesma coisa no Microsoft Excel, a macro pode funcionar hoje, mas no amanh.
Em 1995, quando tentei gravar minha primeira macro em Excel, fiquei terrivelmente frustrado
com isso. Neste livro, eu ensino trs regras para tirar o mximo proveito do gravador de macros.
1
Visual Basic No como BASIC
O cdigo gerado pelo gravador de macro era diferente de tudo o que eu j tinha visto. Ele dizia
que era Visual Basic (VB). Eu tive o prazer de aprender uma meia dzia de linguagens de
programao em momentos diferentes; essa linguagem de aparncia estranha era terrivelmente
contraintuitiva e no se parecia com a linguagem BASIC que eu havia aprendido na escola.
Para piorar as coisas, mesmo em 1995 eu j era o guru das planilhas no meu escritrio. Minha
companhia forou todos a migrarem do Lotus 1-2-3 para o Excel, o que significou que tive que
encarar um gravador de macros que no funcionava e uma linguagem que eu no conseguia
entender. Esta no foi uma boa combinao de eventos.
Minha suposio ao escrever este livro que voc seja bem talentoso com uma planilha. E que
provavelmente saiba mais do que 90% das pessoas em seu escritrio. Tambm suponho que,
mesmo que voc no seja um programador, talvez j tenha tido alguma aula sobre isso. No
entanto, saber BASIC no um requisito na verdade uma barreira para entrar no grupo dos
programadores VBA bem-sucedidos. H uma boa chance de voc ter gravado uma macro no
Excel e uma chance similar de voc no ter ficado feliz com o resultado.
Assim, a tima notcia que, com algumas horas de programao em VBA, possvel
automatizar o processo de gerao do relatrio e transform-lo em alguns poucos cliques de
boto. Ento, fique comigo enquanto cobrimos um pouco do bsico.
1
Este captulo explica por que o gravador de macro no funciona. Ele tambm explica o passo a
passo, atravs de um exemplo de cdigo gravado, e demonstra por que ele vai funcionar hoje,
mas no amanh. Sei que o cdigo que voc v nesse captulo pode no ser familiar, mas est
tudo certo. O objetivo deste captulo demonstrar o problema fundamental do gravador de
macro. Voc tambm aprende os fundamentos do ambiente Visual Basic.
Figura 1.1
A guia Desenvolvedor
fornece uma interface para
executar e gravar macros.
O grupo Cdigo da guia Desenvolvedor contm os cones usados para gravar e executar as
macros em VBA, conforme listados aqui:
n cone Visual Basic Abre o Editor de Visual Basic.
n cone Macros Exibe a caixa de dilogo Macro, onde possvel escolher executar ou
editar uma macro de uma lista de macros.
n cone Gravar Macro Inicia o processo de gravao de uma macro.
n cone Usar Referncias Relativas Alterna entre o uso de gravao relativa ou absoluta.
Com gravao relativa, o Excel grava que voc moveu trs clulas para baixo. Com a
gravao absoluta, o Excel grava que voc selecionou a clula A4.
n cone Segurana de Macro Acessa a Central de Confiabilidade, onde possvel
escolher habilitar ou desabilitar a execuo de macros neste computador.
1 O grupo Controles da guia Desenvolvedor contm um menu Inserir, onde possvel acessar
uma variedade de controles de programao que podem ser colocados na planilha. Veja
Atribuindo uma Macro a um Controle de Formulrio, Caixa de Texto ou Forma, mais
frente neste captulo. Outros cones neste grupo possibilitam que voc trabalhe com controles
embutidos na planilha. O boto Executar Caixa de Dilogo possibilita a exibio de uma caixa de
dilogo personalizada ou userform projetada no VBA. Para saber mais sobre userforms, veja o
Captulo 10, Userforms: Uma Introduo.
O grupo XML da guia Desenvolvedor contm ferramentas para importar e exportar documentos
XML.
O grupo Modificar permite a voc especificar se o Painel de Documentos sempre est exibido
para novos documentos. Usurios podem entrar com palavras-chave e uma descrio do
documento no Painel de Documentos. Se voc trabalha com SharePoint e InfoPath, pode
definir campos personalizados para aparecerem no Painel de Documentos.
Para evitar ter que escolher uma pasta de trabalho com macros habilitadas na caixa de dilogo
Salvar Como, possvel personalizar a sua cpia do Excel para sempre salvar novos arquivos no
formato .xlsm, seguindo os seguintes passos:
1
1. Clique no menu Arquivo e clique em Opes.
2. Na caixa de dilogo Opes do Excel, selecione a categoria Salvar no painel de navegao
esquerda.
3. A primeira caixa de combinao Salvar Arquivos Neste Formato. Abra a lista e selecione
Pasta de Trabalho Habilitada para Macro do Excel (*.xlsm). Clique em OK.
Apesar de voc e eu no termos medo de usar macros, tenho encontrado algumas pessoas que pare-
NOTE
cem surtar quando veem a extenso .xlsm. Elas chegam a ficar nervosas se eu lhes envio um arquivo
.xlsm que no tenha macros. A reao delas parece sair da fala do Rei Arthur, em Monty Python em
Busca do Clice Sagrado: Voc me assustou!.
Se voc encontrar algum que parea ter medo do tipo .xlsm, lembre-o destes pontos:
n Toda pasta de trabalho criada nos ltimos 20 anos poderia ter macros, mas, na verdade, a
maioria no tem.
. n Se algum estiver tentando evitar macros, deveria usar as configuraes de segurana para
prevenir as macros de serem executadas de qualquer maneira (reveja a Figura 1.3). Elas
podem ainda assim abrir o arquivo .xlsm para obter os dados da planilha.
Com estes argumentos, espero que voc possa superar quaisquer medos da extenso .xlsm, de forma
que ele possa ser seu tipo de arquivo padro.
Segurana de Macro
Depois que macros VBA foram utilizadas como mtodo de ataque de alguns vrus poderosos,
a Microsoft mudou as configuraes padro de segurana para prevenir que as macros fossem
executadas. Assim sendo, antes que possamos discutir a gravao de macros, precisamos lhe
mostrar como ajustar as configuraes padro.
No Excel 2013, possvel ajustar as configuraes de segurana em nvel global ou controlar as
configuraes de macro para certas pastas de trabalho, salvando-as em um local de confiana.
Quaisquer pastas de trabalho armazenadas em uma pasta que tenha sido marcada como um local
de confiana vai ter suas macros automaticamente habilitadas.
Voc pode encontrar as configuraes de segurana para macros sob o cone Segurana de
Macro na guia Desenvolvedor. Ao clicar neste cone, a categoria Configuraes de Macros da
Central de Confiabilidade exibida. Voc pode usar a barra de navegao esquerda da caixa de
dilogo para acessar a lista Locais Confiveis
CUIDADO
Use de cautela ao selecionar um local confivel. Ao dar um duplo clique em uma planilha do Excel
anexada a um e-mail, o Outlook armazena o arquivo em um diretrio temporrio do seu drive C:. Voc
no vai querer adicionar globalmente o C:\ e todas as suas subpastas lista Locais Confiveis.
Figura 1.2
Gerencie as pastas
confiveis na categoria
Locais Confiveis da
Central de Confiabilidade.
Figura 1.3
Abra uma pasta de
trabalho contendo macros
usando a configurao
Desabilitar Todas as
Macros com Notificao
para habilitar as macros.
Caso no queira habilitar macros para a pasta de trabalho atual, descarte o Aviso de
Segurana clicando no X, no canto direito da barra de mensagem.
1 Se voc se esquecer de habilitar as macros e tentar executar uma delas, o Excel indicar que
no possvel execut-la, porque todas foram desabilitadas. Se isso ocorrer, feche a pasta de
trabalho e abra-a novamente para acessar a barra de mensagens de novo.
CUIDADO
Depois que habilitar as macros em uma pasta de trabalho armazenada em um HD local e ento salvar a pasta
de trabalho, o Excel vai se lembrar de que voc previamente habilitou as macros nessa pasta de trabalho. Da
prxima vez que voc reabrir essa pasta de trabalho, as macros sero automaticamente habilitadas.
Figura 1.4
Use a caixa de dilogo
Gravar Macro para
atribuir um nome e uma
tecla de atalho macro
sendo gravada.
CUIDADO
Voc pode reutilizar uma tecla de atalho para uma macro. Se voc atribuir uma macro a Ctrl+c, o Excel
vai executar sua macro em vez de realizar a ao normal de copiar.
Na caixa de dilogo Gravar Macro, escolha onde quer salvar a macro quando ela for gravada:
Pastade Trabalho Pessoal de Macros, Nova Pasta de Trabalho, Esta Pasta de Trabalho.
recomendvel que voc armazene as macros relacionadas a determinada pasta de trabalho em
Esta Pasta de Trabalho.
A Pasta de Trabalho Pessoal de Macros (Personal.xlsm) no uma pasta de trabalho visvel; ela
criada se voc escolher salvar a gravao em Pasta de Trabalho Pessoal de Macros. Esta pasta
usada para salvar uma macro em uma pasta de trabalho que vai abrir automaticamente ao iniciar
o Excel, possibilitando que voc use a macro. Depois de o Excel ser iniciado, a pasta de trabalho
ocultada. Se quiser exibi-la, selecione Reexibir na guia Exibio.
DICA
No recomendvel utilizar a pasta de trabalho pessoal para cada macro que salvar. Salve apenas
aquelas macros que lhe ajudam em tarefas gerais no as que so realizadas em uma pasta de
trabalho ou planilha especfica.
O quarto campo na caixa de dilogo Gravar Macro para dar uma descrio. Essa descrio
includa como um comentrio no incio da sua macro. Observe que as verses antigas do Excel
automaticamente escreviam a data e o nome de usurio da pessoa que gravou a macro, mas o
Excel 2013 no mais insere essa informao no campo Descrio.
Depois de selecionar o local onde deseja armazenar a macro, clique em OK. Grave sua macro.
Para este exemplo, digite Al Mundo na clula ativa e pressione CTRL+ENTER para aceitar a
entrada e permanecer na mesma clula. Ao terminar de grav-la, clique no cone Parar Gravao
da guia Desenvolvedor.
DICA
Tambm possvel acessar o cone Parar Gravao no canto inferior esquerdo da janela do Excel.
Procure por um pequeno quadrado branco, direita da palavra Pronto, na barra de status. Usar este
boto pode ser mais conveniente do que retornar guia Desenvolvedor. Depois de gravar sua primeira
macro, sta rea vai normalmente ter um cone Gravar Macro, que um pequeno ponto em uma
planilha do Excel.
Observe que um atalho para substituir os passos 1 e 2 clicar com o boto direito na Faixa de Opes e
selecionar Personalizar Faixa de Opes.
3. Na caixa de listagem da direita, escolha o nome da guia onde quer adicionar um cone.
4. Clique no boto Novo Grupo, abaixo da caixa de listagem da direita. O Excel adiciona uma
entrada chamada Novo Grupo (Personalizado) no fim dos grupos daquela guia da faixa de
opes.
5. Para mover o grupo para a esquerda na guia, clique diversas vezes no cone da seta para
cima direita da caixa de dilogo.
6. Para renomear o grupo, clique no boto Renomear. Digite um novo nome, tal como
Macros 1 de Relatrios. Clique em OK. O Excel vai mostrar o grupo na caixa de listagem
como Macros de Relatrios (Personalizado). Perceba que a palavra Personalizado no vai
aparecer na Faixa de Opes.
7. Abra a caixa de combinao do canto superior esquerdo e escolha Macros nessa lista. A
categoria Macros a quarta da lista. O Excel exibe uma lista de macros disponveis na caixa
de listagem da esquerda.
8. Escolha uma macro da caixa de listagem esquerda. Clique no boto Adicionar, no centro
da caixa de dilogo. O Excel usa um cone VBA genrico para todas as macros. Voc pode
mudar o cone seguindo os passos 9 e 10.
9. Clique na macro, na caixa de listagem da direita. Clique no boto Renomear, na parte de
baixo da caixa. O Excel exibe uma lista de 180 cones possveis. Escolha um. Aps isso,
digite um para o cone, tipo Formatar Relatrio.
10. Voc pode mover o grupo Relalrio de Macros para uma nova posio na guia Faixa de
Opes. Clique em Relatrio de Macros (Personalizar) e use as setas para cima e para baixo
direita da caixa de dilogo.
11. Clique em OK para fechar as opes do Excel. O novo boto aparece na guia selecionada da
Faixa de Opes.
Observe que um atalho para substituir os passos 1 e 2 clicar com o boto direito na barra de ferra-
mentas de Acesso Rpido e selecionar Personalizar a Barra de Ferramentas de Acesso Rpido.
3. Se for necessrio que a macro esteja disponvel apenas quando a pasta de trabalho atual
estiver aberta, abra a caixa de combinao superior direita e mude de Para Todos os
Documentos (Padro) para Para <NomeDoArquivo>. Quaisquer cones associados com a
pasta de trabalho atual sero exibidos no final da barra de ferramentas de Acesso Rpido.
4. Abra a caixa de combinao superior esquerda e selecione Macros na lista. A categoria
Macros a quarta da lista. O Excel exibe uma lista de macros disponveis na caixa de
listagem da esquerda.
5. Escolha uma macro da caixa de listagem da esquerda. Clique no boto Adicionar, no centro
da caixa de dilogo. O Excel move a macro para a caixa de listagem da direita. O Excel usa
um cone VBA genrico para todas as macros. Voc pode mudar o cone seguindo os passos
de 6 a 8.
6. Clique na macro, na caixa de listagem da direita. Clique no boto Modificar, na parte de
baixo da caixa de listagem. O Excel exibe uma lista de 180 cones possveis (veja a Figura
1.5).
Considerando que o Excel 2003 oferecia 4.096 cones possveis e um editor de cones, a lista de 180
NOTA
um grande desapontamento.
7. Escolha um cone a partir da lista. Na caixa de nome para exibio, substitua o nome da
macro pelo nome que voc quer que aparea como dica de tela para o cone.
8. Clique em OK para fechar a caixa de dilogo Modificar Boto.
9. Clique em OK para fechar as Opes do Excel. O novo boto aparece na barra de
ferramentas de Acesso Rpido.
Figura 1.5
Anexe uma macro a
um boto na barra de
1 ferramentas de Acesso
Rpido.
* N. E.: Na verdade este efeito imperceptvel no Excel 2013, porm voc pode observar a palavra Edita na barra de status.
As macros podem ser atribudas a qualquer objeto na planilha, como um Clip-Art, uma forma,
imagens SmartArt ou uma caixa de texto. Na Figura 1.6, o boto de cima um boto de
formulrio tradicional. As outras imagens so um Clip-Art, uma forma com WordArt e um
grfico SmartArt. Para atribuir uma macro a qualquer objeto, clique com o boto direito no
objeto e selecione Atribuir Macro.
Figura 1.6
Atribuindo uma macro
a um controle de
formulrio ou a um
objeto apropriado para
macros armazenado na
mesma pasta de trabalho
que o controle. possvel
atribuir uma macro a
quaisquer desses objetos.
Entendendo o VB Editor
Se voc quer editar sua macro gravada, tem que fazer isto no VB Editor. Aperte Alt+F11 ou use
o cone Visual Basic na guia Desenvolvedor.
A Figura 1.7 mostra um exemplo de uma tela tpica do VB Editor. Voc pode ver trs janelas:
a Project Explorer, a janela Propriedades e a janela de Programao. No se preocupe se a sua
janela no for exatamente igual a essa, porque voc vai aprender como exibir as janelas que
precisar nesta reviso do editor.
Figura 1.7
A janela VB Editor.
Configuraes do VB Editor
Diversas configuraes no VB Editor possibilitam a personalizao desse editor. A subseo
seguinte cobre a configurao que vai ajudar na sua programao.
Em Ferramentas, Opes, Editor, possvel encontrar diversas configuraes teis. Todas
as configuraes, exceto uma, esto configuradas corretamente por padro. A configurao
restante requer alguma considerao de sua parte. Esta configurao Requerer Declarao de
Varivel. Por padro, o Excel no requer a declarao de variveis. Eu prefiro esta configurao
porque ela economiza tempo quando voc cria um programa. Minha coautora prefere que esta
configurao requeira a declarao da varivel. Essa mudana fora o compilador a parar caso
encontre uma varivel que ele no reconhea, o que reduz os nomes de variveis mal escritos.
uma questo de gosto pessoal deixar essa configurao ativada ou desativada.*2
O Project Explorer
O Project Explorer lista todas as pastas de trabalho abertas e add-ins que estejam carregados. Ao
clicar no cone + prximo ao VBAProject, ver que h uma pasta com objetos do Microsoft
Excel. Tambm pode haver pastas para formulrios, mdulos de classes e mdulos padro. Cada
pasta inclui um ou mais componentes individuais.
Clicar com o boto direito em um componente e selecionar Exibir Cdigo, ou simplesmente dar
um duplo clique nos componentes, traz qualquer cdigo para a janela Programao. A exceo
so os userforms, onde um duplo clique exibe o userform no modo de exibio Design.
Para exibir a janela Project Explorer, v em Exibir, Project Explorer, ou pressione Ctrl+R ou
clique no cone do Project Explorer na barra de ferramentas, situado entre o cone Modo de
* N.E.: A declarao obrigatria de variveis altamente recomendvel para uma boa programao, pois evita
que uma varivel digitada incorretamente seja interpretada como uma nova varivel vazia, o que poderia levar a
clculos incorretos e erros difceis de serem detectados. A declarao obrigatria (requerida) tambm incentiva
o programador a usar tipos declarados em vez do tipo padro (variant) o tempo todo. Como consequncia, o
programador poder produzir cdigos mais rpidos e com menor consumo de memria.
Criao e o cone Janela Popriedades. Para inserir um mdulo, clique com o boto direito, selecione
Inserir e, em seguida, escolha o tipo de mdulo que deseja. Os mdulos disponveis so os seguintes:
n Objetos Microsoft Excel Por padro, um projeto consiste de mdulos para cada 1
planilha na pasta de trabalho e um nico mdulo EstaPasta_de_trabalho (ThisWorkbook).
Cdigos especficos para uma planilha, como controles ou eventos de planilha, so
colocados na planilha correspondente. Eventos de pastas de trabalho so colocados
no mdulo EstaPasta_de_trabalho. Voc vai aprender mais sobre eventos no Captulo
9,Programao Orientada a Eventos.
n Formulrios O Excel permite que voc projete seus prprios formulrios para interagir
com o usurio. Voc vai aprender mais sobre estes formulrios no Captulo 10.
n Mdulos Ao gravar uma macro, o Excel automaticamente cria um mdulo no qual
colocar o cdigo. A maior parte do seu cdigo vai ficar em mdulos desse tipo.
n Mdulos de Classe Mdulos de classe so a maneira do Excel de deixar voc criar seus
prprios objetos. Eles tambm permitem que pedaos do cdigo sejam compartilhados entre
programadores sem que eles tenham que entender como funcionam. Voc vai aprender mais
sobre mdulos de classe no Captulo 9, Criando Classes, Registros e Colees.
A Janela Propriedades
A janela Propriedades possibilita a edio das propriedades de vrios componentes, tais como
planilhas, pastas de trabalho, mdulos e controles de formulrio. A lista Propriedade varia de acordo
com o componente selecionado. Para exibir esta janela, selecione Exibio, Janela Propriedades no
menu, pressione F4 ou clique no cone Janela Propriedades na barra de ferramentas.
Figura 1.8
O Arquivo
Fatura.txt.
A cada manh, voc manualmente importa este arquivo no Excel. Voc inclui uma linha de
totalizao nos dados, formata os ttulos em negrito e depois imprime o relatrio para distribuir
para alguns gerentes.
Este parece um processo simples, que seria idealmente apto para o uso do gravador de macros.
Entretanto, devido a alguns problemas com o gravador de macros, suas primeiras tentativas
podem no ser bem-sucedidas. O estudo de caso seguinte explica como superar esses problemas.
1
E S T U D O D E C A S O : P R E PA R A N D O PA R A G R AVA R A M AC R O
A tarefa mencionada na seo anterior perfeita para uma macro. Entretanto, antes de voc gravar uma macro, pense nos
passos que vai dar. Neste caso, os passos a serem dados so os seguintes:
1. Clique no menu Arquivo e selecione Abrir.
2. Navegue at a pasta onde o arquivo Fatura.txt est armazenado.
3. Selecione Todos os Arquivos, na lista de Tipos de Arquivos1.
4. Selecione Fatura.txt.
5. Clique em Abrir.
6. No Assistente de Importao de Texto Passo 1 de 3, selecione Delimitado, na seo Tipo de Dados Originais.
7. Clique em Avanar.
8. No Assistente de Importao de Texto Passo 2 de 3, desmarque Tabulao e selecione Vrgula, na seo
Delimitadores.
9. Clique em Avanar.
10. No Assistente de Importao de Texto Passo 3 de 3, selecione Geral na seo Formato dos Dados da Coluna e mude-
a para Data:DMA.
11. Clique em Concluir para importar o arquivo.
12. Pressione a tecla End, seguida de Seta-Para-Baixo, para mover-se para a ltima linha de dados.
13. Pressione a Seta-Para-Baixo mais uma vez, para ir para a linha de totalizao.
14. Digite a palavra Total.
15. Pressione a Seta-Para-Direita quatro vezes, para ir para a Coluna E da linha de totalizao.
16. Clique no boto AutoSoma e pressione Ctrl+Enter para incluir o total da coluna Renda do Produto e continuar na
mesma clula.
17. Clique na ala AutoPreenchimento e arraste-a da Coluna E at a Coluna G, para copiar a frmula de totalizao para as
colunas F e G.
18. Marque a Linha 1 e clique no cone Negrito, na guia Pgina Inicial, para colocar os ttulos em negrito.
19. Marque a linha Total e clique no cone Negrito, na guia Pgina Inicial, para colocar os totais em negrito.
20. Pressione Ctrl+T para selecionar todas as clulas2.
21. Na guia Pgina Inicial, selecione Formatar, AutoAjuste da Largura da Coluna.
Depois de ter treinado estes passos na sua cabea, voc est pronto para gravar a sua primeira macro. Abra uma pasta de
trabalho em branco e salve-a com um nome como 01-MacroParaImportarFatura.xlsm. Clique no boto Gravar
Macro na guia Desenvolvedor.
Na caixa de dilogo Gravar Macro, o nome padro da macro Macro1. Mude para algo descritivo, como ImportarFatura.
Certifique-se de que as macros sejam armazenadas em Esta Pasta de Trabalho. Voc talvez queira uma maneira fcil de executar
essa macro mais tarde, ento insira a letra i no campo Tecla de Atalho. No campo Descrio, insira um pequeno texto descritivo 1
para dizer o que a macro est fazendo (veja a Figura 1.9). Clique em OK quando estiver pronto.
Figura 1.9
Antes de gravar a macro,
preencha a caixa de
dilogo Gravar Macro.
Gravando a Macro
O gravador de macros agora est registrando cada movimento que voc fizer, mas no fique nervoso. Por este motivo,
execute cada passo na ordem exata sem aes que no se relacionem tarefa. Se voc se mover sem querer para a Coluna
F, digitar um valor, limpar o valor e depois voltar para a Coluna E para digitar o primeiro total, a macro gravada repetir
cegamente os mesmos passos errados de novo, de novo e de novo. Macros gravadas so executadas rapidamente, mas
no h motivo para assistir ao gravador de macros repetir seus erros indefinidamente.
Cuidadosamente, execute todas as aes necessrias para produzir o relatrio. Depois de ter dado o passo final, clique no
boto Parar, no canto inferior esquerdo da janela do Excel, ou em Parar Gravao, na guia Desenvolvedor.
Agora hora de olhar o cdigo. Alterne para o VB Editor selecionando Visual Basic na guia Desenvolvedor ou pressionando
Alt+F11.
O comentrio no atribui o atalho. Se voc alterar o comentrio para ser Ctrl+J, ele no vai mudar o
NOTA
atalho. necessrio alterar essa definio na caixa de dilogo Macro no Excel ou executar esta linha de
cdigo:
Application.MacroOptions Macro:="ImportarFatura", _
Description:="", ShortcutKey:="j"
O cdigo de macros gravadas geralmente bem limpo (veja a Figura 1.10). Cada linha que
no seja de comentrio indentada em quatro caracteres. Se uma linha for maior do que 100
caracteres, o gravador a quebra em mltiplas linhas e indenta as linhas em quatro caracteres
1 adicionais. Para continuar uma linha de cdigo, digite um espao e um sublinhado ( _ ) no fim
da linha.
Observe que as limitaes fsicas desse livro no permitem 100 caracteres em uma nica linha. Assim,
NOTA
as linhas sero quebradas em 80 caracteres de forma que elas caibam em uma pgina. Por essa razo,
sua macro gravada pode parecer um pouco diferente daquelas que aparecem neste livro.
Figura 1.10
A macro gravada
clara ao olhar e bem
indentada.
Considere que as seguintes linhas do cdigo gravado so na verdade uma nica linha de
cdigo que foi quebrada em diversas linhas para melhorar a legibilidade:
Workbooks.OpenText Filename:= _
C:\VBA-e-Macros\Fatura.txt, Origin:=xlMSDOS, StartRow:=1,
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
Tab:=True, Semicolon:=False, Comma:=True, Space:=False, _
Other:=False, FieldInfo:=Array(Array(1, 4), Array(2, 1), Array(3, 1), _
Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1)), _
TrailingMinusNumbers:=True
Contando isso como uma linha, o gravador de macros foi capaz de gravar nosso processo de
21 passos em 15 linhas de cdigo, o que bastante impressionante.
Cada ao realizada na interface do usurio do Excel pode ser equivalente a uma ou mais linhas do
NOTA
cdigo gravado. Algumas aes podem gerar uma dzia de linhas de cdigo.
1
Pressione Ctrl+I para executar a macro gravada. Ela deve funcionar direito se voc executou
os passos corretamente. Os dados esto importados, os totais esto includos, a formatao em
negrito aplicada e as colunas esto alargadas. Esta parece a soluo perfeita (veja a Figura 1.11).
Figura 1.11
A macro formata os dados
na planilha.
Figura 1.12
A inteno da macro
gravada era adicionar um
1 total ao final dos dados,
mas o gravador criou uma
macro que sempre grava
totais na Linha 11.
E S T U D O D E C A S O : G R AVA N D O A M AC R O C O M R E F E R N C I A S R E L AT I VA S
Vamos tentar gravar a macro novamente, mas dessa vez voc vai usar referncias relativas. Feche o Fatura.txt sem salvar nen-
huma mudana. Na pasta de trabalho 01-MacroParaImportarFatura.xlsm, grave uma nova macro selecionando
Gravar Macro na guia Desenvolvedor. D nova macro o nome de ImportarFaturaRelativa e atribua uma tecla de
atalho diferente, como Ctrl+Shift+J.
Ao comear a gravar a macro, inicie o processo de abrir o arquivo Fatura.txt. Antes de navegar at a ltima linha de dados
pressionando a tecla End mais a Seta-Para-Baixo, clique no boto Usar Referncias Relativas na guia Desenvolvedor (reveja a
Figura 1.1).
Repita os passos de 1 a 11 deste estudo de caso para importar o arquivo e, ento, continue com as aes do script:
1. Pressione a tecla End, seguida da Seta-Para-Baixo, para ir at a ltima linha de dados.
2. Pressione a Seta-Para-Baixo mais uma vez, para ir para a linha de total.
Pressione Alt+F11 para ir para o VB Editor para revisar o cdigo. A nova macro aparece no Mdulo1 abaixo da macro anterior.
Se voc fechar o Excel entre a gravao da primeira e da segunda macro, o Excel insere um novo mdulo chamado
Mdulo2 para a nova macro.
O cdigo seguinte foi editado com dois comentrios que lhe ajudaro a lembrar onde voc ligou e desligou a gravao
relativa:
Sub ImportarFaturaRelativa()
'
' ImportarVendasRelativa Macro
' Use referncias relativas para alguns dos passos da macro para formatar o
' arquivo Fatura.txt
'
Workbooks.OpenText Filename:= _
C:\VBA-e-Macros\Fatura.txt, Origin:=xlMSDOS, StartRow:=1,
DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=True, Space:=False, _
Other:=False, FieldInfo:=Array(Array(1, 4), Array(2, 1), _
Array(3, 1), _ Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1)), TrailingMinusNumbers:=True
Para testar a macro, feche o Fatura.txt sem salvar e depois execute a macro com Ctrl+J. Tudo deve parecer bem e voc
deve obter os mesmos resultados.
O prximo teste ver se o programa funciona no dia seguinte, quando voc talvez tenha mais linhas. Se voc est trabal-
hando com arquivos de exemplo, renomeie fatura.txt para Fatura1.txt. Renomeie Fatura2.txt para Fatura.txt.
Figura 1.13
O resultado da execuo
da macro Relativa.
Se voc no for cuidadoso, pode imprimir esses resultados para o seu gerente. E, se voc
imprimiu, ter problemas. Olhando na clula E19, o Excel inseriu um tringulo verde que diz
para voc olhar na clula. Se voc por acaso tentou isso no Excel 95 ou Excel 97, antes das
SmartTags, no haveria nenhuma indicao de que alguma coisa estava errada.
Quando voc move o ponteiro da clula para E19, um indicador de alerta surge perto da
clula. Este indicador informa que a frmula no incluiu as clulas adjacentes. Se voc olhar
na barra de frmulas, voc ver que a macro totalizou somente a partir da linha 10 at a 18.
Nem a gravao relativa nem a no relativa so inteligentes o suficiente para replicar a lgica 1
do boto AutoSoma.
Nesse ponto, algumas pessoas desistiriam. Entretanto, imagine que voc pode ter tido apenas
algumas vendas naquele dia em particular. O Excel teria brindado voc com a frmula ilgica
=SUM(E6:E1048574) e uma referncia circular, conforme mostrado na Figura 1.14.
Figura 1.14
O resultado de executar
a macro Relativa com
menos registros de
vendas.
Se voc tentou usar o gravador de macro, muito provavelmente teve problemas similares aos
produzidos pelos dois ltimos estudos de caso. Apesar de isso ser frustrante, voc deveria
ficar feliz em saber que o gravador de macros, na verdade, lhe conduz at cerca de 95% do
caminho de uma macro til.
Seu trabalho perceber onde o gravador de macros provavelmente vai falhar e, depois, ser
capaz de entrar no cdigo VBA para consertar uma ou duas linhas que precisem de ajustes de
forma que tenha uma macro perfeita. Com um pouco de inteligncia humana, possvel pro-
duzir macros incrveis para acelerar seu trabalho dirio.
Se voc for como eu, deve estar amaldioando a Microsoft agora. Perdemos uma boa quan-
tidade de tempo nos ltimos dias, e nenhuma das macros funciona. O que faz isso ser ainda
pior que esse tipo de procedimento teria sido executado perfeitamente pelo gravador de
macros do velho Lotus 1-2-3, introduzido em 1983. Mitch Kapor resolveu este problema 24
anos atrs e a Microsoft ainda no consegue fazer isso funcionar.
Voc sabia que, at o Excel 97, o Microsoft Excel executava secretamente as macros de linha
de comando do Lotus? Descobri isso pouco depois da Microsoft terminar o suporte ao Excel
97. Naquele momento, certa quantidade de empresas fez o upgrade para o Excel XP, que no
mais suportava as macros do Lotus 1-2-3. Muitas dessas empresas nos contrataram para con-
verter as antigas macros Lotus 1-2-3 para o VBA do Excel. interessante que, no Excel 5, 95
e 97, a Microsoft oferecia um interpretador que conseguia lidar com as macros do Lotus que
resolviam esse problema corretamente e, ainda assim, seu prprio gravador de macros no
conseguia (e ainda no consegue!) resolver o problema.
1
Trs Dicas ao Usar o Gravador de Macros
Voc raramente ser capaz de gravar 100% das suas macros e faz-las funcionarem.
Entretanto, chegar mais perto usando estas trs dicas demonstradas nas prximas subsees.
Dica 3: Nunca Toque no cone AutoSoma Enquanto Estiver Gravando uma Macro
O gravador de macros no ir gravar a essncia do boto AutoSoma. Pelo contrrio, ele vai
escrever no cdigo a frmula que resultou ao pressionar o boto AutoSoma. Essa frmula no
funciona a qualquer momento em que haja mais ou menos registros no conjunto de dados.
Em vez disso, digite uma frmula com um nico sinal de cifro, tal como =SOMA(E$2:E10)3.
Quando isso feito, o gravador de macros registra o primeiro E$2 como uma referncia fixa
e comea o intervalo da SOMA diretamente abaixo dos ttulos da Linha 1. Dado que a clula
ativa seja a E11, o gravador de macros reconhece E10 como uma referncia relativa apontando
diretamente acima da clula corrente.
Prximos Passos
O Captulo 2, Isso Parece o BASIC. Ento Por Que No Familiar? examina as trs
macros que voc gravou neste captulo para entend-las melhor. Depois que voc souber
como decodificar o cdigo VBA, vai parecer natural corrigir macros gravadas ou simplesmente
escrever o cdigo a partir do zero. Leia mais um captulo. Voc em breve aprender que VBA
a soluo e escrever cdigos teis que funcionam consistentemente.
3 N.E.: Na interface do usurio, voc deve escrever a frmula em portugus SOMA, mas o gravador de macros vai
gravar a frmula com a grafia original em ingls: SUM. Se voc estiver gravando uma macro e for digitar uma
funo na interface do usurio, sempre escreva a funo em portugus; se escrever em ingls, vai dar erro. Se voc
estiver escrevendo a macro diretamente no VB Editor, sempre escreva a funo em ingls.