Você está na página 1de 26

Libere o Poder do Excel

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.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 7 23/07/2014 11:39:20


8 Captulo 1 Libere o Poder do Excel com o VBA

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.

Boas Notcias: Escalar a Curva de Aprendizado Fcil


Mesmo que voc tenha sido frustrado pelo gravador de macro, isso foi apenas um pequeno
inconveniente na sua jornada para escrever programas poderosos em Excel. Este livro
no apenas vai lhe ensinar o porqu das falhas do gravador de macros, mas tambm como
transformar o cdigo gravado em algo til. Para todos os antigos programadores BASIC na
plateia, vou decodificar o VBA de forma que seja possvel facilmente olhar o cdigo gravado e
entender o que est acontecendo.

timas Notcias: Excel com VBA Vale o Esforo


Apesar de voc ter ficado frustrado com a Microsoft pela inabilidade de gravar macros no
Excel, a tima notcia que o VBA do Excel poderoso. Simplesmente qualquer coisa feita na
interface do Excel pode ser duplicada com rapidez incrvel no VBA do Excel. Se voc estiver
criando os mesmos relatrios manualmente, dia aps dia ou semana aps semana, o VBA do
Excel vai otimizar enormemente essas tarefas.
Os autores desse livro trabalham para a MrExcel Consulting. Nesta funo, j automatizamos
relatrios para centenas de clientes. As histrias so frequentemente similares: o departamento
de TI tem um registro de chamados para diversos meses. Algum na contabilidade ou
engenharia descobre que ele ou ela pode importar alguns dados para o Excel e conseguir os
relatrios necessrios para gerir os negcios. Este um evento libertador voc no tem
mais que esperar meses para que o departamento de TI escreva um programa. Entretanto, o
problema que depois de importar os dados no Excel e ganhar os cumprimentos do seu gerente
por produzir o relatrio, provavelmente vo pedir que voc produza o mesmo relatrio todo
ms ou toda semana. Isso se torna entediante.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 8 23/07/2014 11:39:20


Conhecendo suas Ferramentas: A Guia Desenvolvedor 9

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.

Conhecendo suas Ferramentas: A Guia Desenvolvedor


Vamos comear com uma viso geral bsica das ferramentas necessrias para usar o VBA. Por
padro, a Microsoft oculta as ferramentas de VBA. Voc tem que executar os seguintes passos
para mudar a configurao nas opes do Excel e acessar a guia Desenvolvedor.
1. Abra o menu Arquivo para chegar ao novo modo de visualizao Backstage.
2. Na barra de navegao esquerda, clique em Opes, perto do final da lista.
3. Na caixa de dilogo Opes do Excel, selecione Personalizar Faixa de Opes na navegao
da esquerda.
4. Na lista direita, a guia Desenvolvedor a terceira de baixo para cima. Marque o checkbox
ao lado do item.
5. Clique em OK para voltar para o Excel.

O Excel exibe a guia Desenvolvedor mostrada na Figura 1.1.

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.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 9 23/07/2014 11:39:20


10 Captulo 1 Libere o Poder do Excel com o VBA

O grupo Suplementos fornece cones para gerenciar suplementos regulares e suplementos de


COM.

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.

Entendendo Qual Tipo de Arquivo Permite Macros


O Excel 2013 oferece suporte para quatro tipos de arquivos. Macros no podem ser armazenadas
no tipo de arquivo padro. Voc tem que usar o Salvar Como para todas as suas pastas de
trabalho com macros ou mudar o tipo de arquivo padro usado no Excel 2013.
Os tipos de arquivos disponveis so os seguintes:
n Pasta de Trabalho do Excel (.xlsx) Os arquivos so armazenados como uma srie de
objetos XML e depois zipados em um nico arquivo. Isto cria arquivos significativamente
menores. Permite tambm que outros aplicativos (at mesmo o Bloco de Notas!) editem ou
criem pastas de trabalho do Excel. Infelizmente, as macros no podem ser armazenadas em
arquivos com uma extenso .xlsx.
n Pasta de Trabalho Habilitada para Macro do Excel (.xlsm) Este similar ao formato
padro .xlsx, mas macros so permitidas. O conceito bsico que, se algum tiver um
arquivo.xlsx, ele ou ela no precisar se preocupar com macros maliciosas. Entretanto, se
virem um arquivo .xlsm, devem ficar cientes de que pode haver macros anexadas.
n Pasta de Trabalho Binria do Excel (.xlsb) Este um formato binrio projetado
para lidar com as mais de 1 milho de linhas introduzidas no Excel 2007. Verses antigas
do Excel armazenavam seus arquivos em um formato binrio proprietrio. Apesar de
formatos binrios poderem carregar mais rpido, eles esto mais sujeitos a se corromperem,
e uns poucos bits perdidos podem destruir o arquivo inteiro. Macros so permitidas nesse
formato.
n Pasta de Trabalho do Excel 97-2003 (.xls) Esse formato produz arquivos que podem
ser lidos por qualquer um usando verses antigas do Excel. As macros so permitidas nesse
formato binrio; entretanto, quando voc salva nesse formato, perde acesso a quaisquer
clulas fora de A1:IV65536. Alm disso, se algum abrir o arquivo no Excel 2003, perder
acesso a qualquer coisa que tenha usado caractersticas introduzidas no Excel 2007 ou mais
recentes.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 10 23/07/2014 11:39:20


Segurana de Macro 11

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

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 11 23/07/2014 11:39:20


12 Captulo 1 Libere o Poder do Excel com o VBA

Adicionando um Local Confivel


possvel escolher armazenar suas pastas de trabalho com macros em uma pasta que esteja
1 marcada como um local confivel. Qualquer pasta de trabalho armazenada em uma pasta
confivel ter suas macros habilitadas. A Microsoft sugere que um local confivel deva estar no
seu HD. A configurao padro que voc no pode confiar em um local que esteja na rede.
Para especificar um local confivel, siga estes passos:
1. Clique em Segurana de Macro na guia Desenvolvedor.
2. Clique em Locais Confiveis no painel de navegao esquerda da Central de
Confiabilidade.
3. Se voc quiser confiar num local na rede, marque Permitir Locais Confiveis na Minha
Rede.
4. Clique no boto Adicionar Novo Local. O Excel exibe a caixa de dilogo Local Confivel
do Microsoft Office (veja a Figura 1.2).
5. Clique no boto Procurar. O Excel exibe a caixa de dilogo Procurar.
6. Navegue at a pasta que contm a pasta que voc quer que seja um local confivel. Clique
na pasta confivel. Apesar de o nome da pasta no aparecer no campo Nome da Pasta,
clique em OK. O nome correto da pasta vai aparecer na caixa de dilogo Procurar.
7. Se voc quiser confiar nas subpastas da pasta selecionada, marque Subpastas Deste Local
Tambm So Confiveis..
8. Clique em OK para adicionar a pasta 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.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 12 23/07/2014 11:39:20


Segurana de Macro 13

Usando as Configuraes de Macro para Habilitar Macros em Pastas de Trabalho


Fora de Locais Confiveis
Para todas as macros no armazenadas em um local confivel, o Excel confia nas configuraes 1
de macro. As configuraes Baixa, Mdia, Alta e Muito Alta, que eram familiares no Excel 2003,
foram renomeadas.
Para acessar as configuraes de macros, clique em Configuraes de Macro, na guia
Desenvolvedor. O Excel exibe a categoria Configuraes de Macro da caixa de dilogo
Central de Confiabilidade. Marque a segunda opo, Desabilitar Todas as Macros com
Notificao. Segue uma descrio de cada opo:
n Desabilitar Todas as Macros sem Notificao Esta configurao impede que qualquer
macro seja executada. indicada para pessoas que nunca tm a inteno de executar macros.
Como voc est atualmente segurando um livro que lhe ensina como usar macros, supe-se
que esta configurao no seja para voc. Esta configurao , grosso modo, equivalente
configurao Segurana Muito Alta do Excel 2003. Com essa configurao, apenas macros
nas pastas Locais Confiveis podem ser executadas.
n Desabilitar Todas as Macros com Notificao Essa configurao similar segurana
Mdia no Excel 2003 e a recomendada. As palavras essenciais nesta configurao so
com notificao. Isto significa que voc v uma notificao quando abre um arquivo com
macros e voc pode escolher habilitar o contedo. Se voc ignorar a notificao, as macros
permacecem desabilitadas. No Excel 2013, uma mensagem exibida na rea de mensagem
indicando que as macros foram desabilitadas. Voc pode escolher habilitar o contedo
clicando na opo correspondente, como mostrado na Figura 1.3.
n Desabilitar Todas as Macros, Exceto as digitalmente assinadas Essa configurao
requer que voc obtenha uma ferramenta de assinatura digital da VeriSign ou de outro
fornecedor. Isso pode ser apropriado se voc for vender mdulos suplementares (add-ins)
para outros, mas um pouco de exagero se for escrever macros apenas para seu prprio uso.
n Habilitar Todas as Macros (No Recomendado: Cdigos Possivelmente Perigosos
Podem Ser Executados) Essa configurao similar ao nvel baixo de segurana de
macro do Excel 2003. Apesar de menos trabalhosa, ela tambm abre seu computador para
ataques de vrus do tipo Melissa. A Microsoft sugere que voc no use essa configurao.

Figura 1.3
Abra uma pasta de
trabalho contendo macros
usando a configurao
Desabilitar Todas as
Macros com Notificao
para habilitar as macros.

Desabilitando Todas as Macros com Notificao


recomendado definir as suas configuraes de macro para Desabilitar Todas as Macros com
Notificao. Se voc usar essa configurao e abrir uma pasta de trabalho que contenha macros,
ver um Aviso de Segurana na rea, logo acima da barra de frmulas. Supondo que voc esteja
esperando macros nessa pasta de trabalho, clique em Habilitar Contedo.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 13 23/07/2014 11:39:20


14 Captulo 1 Libere o Poder do Excel com o VBA

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.

Viso Geral da Gravao, Armazenamento e Execuo de


uma Macro
Gravar uma macro til quando no se tem experincia em escrever linhas de cdigo em uma
macro. medida que voc ganha mais conhecimento e experincia, vai comear a gravar linhas
de cdigo com menos frequncia.
Para comear a gravar uma macro, v em Gravar Macro na guia Desenvolvedor. Antes de a
gravao comear, o Excel exibe a caixa de dilogo Gravar Macro, como mostrado na Figura 1.4.

Figura 1.4
Use a caixa de dilogo
Gravar Macro para
atribuir um nome e uma
tecla de atalho macro
sendo gravada.

Preenchendo a Caixa de Dilogo Gravar Macro


No campo Nome da Macro, digite um nome para a macro. Certifique-se de usar caracteres
contnuos. Por exemplo, digite Macro1, sem espao, e no Macro 1. Supondo que voc logo vai
criar muitas macros, use nomes significativos para a macro. Um nome como FormatarRelatorio
muito mais til que Macro1.
O segundo campo na caixa de dilogo Gravar Macro uma tecla de atalho. Ao digitar J nesse
campo e depois pressionar Ctrl+J, essa macro executada. Tenha cuidado, entretanto, pois

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 14 23/07/2014 11:39:20


Viso Geral da Gravao, Armazenamento e Execuo de uma Macro 15

do CTRL+A at CTRL+Z (Exceto CTRL+J e CTRL+M) j esto todas associadas a outras


tarefas no Excel. Se voc atribui uma macro ao CTRL+N, voc no ser mais capaz de usar
CTRL+N para negrito. Uma alternativa atribuir as macros aos atalhos CTRL+SHIFT+A at
CTRL+SHIFT+Z. Para atribuir uma macro ao CTRL+SHIFT+A, voc deve digitar SHIFT+A 1
na caixa de atalho.

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.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 15 23/07/2014 11:39:20


16 Captulo 1 Libere o Poder do Excel com o VBA

Executando uma Macro


Se voc atribuiu um atalho sua macro, pode execut-la pressionando a combinao de teclas.
1 As macros podem tambm ser atribudas a botes em barras de ferramentas, controles de
formulrios, objetos de desenho, ou voc pode execut-las a partir da barra de ferramentas do
Visual Basic.

Criando um Boto para a Macro na Faixa de Opes


possvel adicionar um cone a um novo grupo na sua Faixa de Opes para executar a sua
macro. Isso apropriado para macros armazenadas na Pasta de Trabalho Pessoal de Macros.
Siga esses passos para adicionar um boto para a macro na Faixa de Opes:
1. Clique no menu Arquivo e clique em Opes para abrir a caixa de dilogo Opes do Excel.
2. Nesta caixa de dilogo, selecione a categoria Personalizar Faixa de Opes na navegao
esquerda.
DICA

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.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 16 23/07/2014 11:39:21


Executando uma Macro 17

Criando um Boto para a Macro na Barra de Ferramentas de Acesso Rpido


possvel adicionar um cone na barra de ferramentas de Acesso Rpido para executar a sua
macro. Se a macro estiver armazenada na Pasta de Trabalho Pessoal de Macros, voc pode ter 1
um boto permanentemente exibido na barra de ferramentas de Acesso Rpido. Se a macro
estiver armazenada na pasta de trabalho atual, voc pode especificar que o cone deve aparecer
apenas quando a pasta de trabalho for aberta. Siga esses passos para adicionar um boto de
macro na barra de ferramentas de Acesso Rpido:
1. Clique no menu Arquivo e clique em Opes para abrir a caixa de dilogo Opes do Excel.
2. Na caixa de dilogo Opes do Excel, selecione a categoria Barra de Ferramentas de Acesso
Rpido no painel de navegao esquerda.
DICA

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.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 17 23/07/2014 11:39:21


18 Captulo 1 Libere o Poder do Excel com o VBA

Figura 1.5
Anexe uma macro a
um boto na barra de
1 ferramentas de Acesso
Rpido.

Atribuindo uma Macro a um Controle de Formulrio, Caixa de Texto ou Forma


Se voc quiser criar uma macro especfica para uma pasta de trabalho, armazene a macro na
pasta de trabalho e anexe-a a um controle de formulrio ou qualquer objeto na planilha.
Siga esses passos para anexar uma macro a um controle de formulrio na planilha:
1. Na guia Desenvolvedor, clique no boto Inserir para abrir a lista dele. O Excel oferece 12
Controles de Formulrio e 12 Controles ActiveX. Os controles de formulrio esto em
cima e os controles ActiveX esto embaixo. A maioria dos cones parece idntica nesta lista.
Clique no cone Boto (Controle de Formulrio), no canto superior esquerdo da lista.
2. Mova o cursor sobre a planilha; o cursor muda para um sinal de mais.
3. Desenhe um boto na planilha, clicando e segurando o boto esquerdo do mouse enquanto
desenha uma forma retangular. Solte o boto quando terminar.
4. Escolha uma macro da caixa de dilogo Atribuir Macro e clique em OK. O boto criado
com um texto genrico, tipo Boto 1. Para personalizar o texto ou a aparncia do boto,
siga os passos de 5 a 7.
5. Digite um novo rtulo para o boto. Observe que, enquanto digita, a borda de seleo
ao redor do boto muda de pontos para linhas diagonais*,1 para indicar que voc est no
modo Editar Texto. No possvel mudar a cor do boto no modo Editar Texto. Para
sair do modo Editar Texto, clique nas linhas em diagonal para mud-las para pontos
ou, novamente, d um Ctrl+Clique no boto para selecion-lo de novo. Perceba que, se
voc acidentalmente clicar fora do boto, voc deve dar um Ctrl+clique no boto para
selecion-lo. Ento, arraste o cursor sobre o texto no boto para selecionar o texto.
6. Clique com o boto direito nos pontos ao redor do boto e selecione Formatar Controle. O
Excel exibe a caixa de dilogo Formatar Controle, com sete guias ao longo do topo. Se a caixa
de dilogo Formatar Controle tiver apenas a guia Fonte, voc falhou ao sair do modo Editar
Texto. Se isto ocorreu, feche a caixa de dilogo, d um Ctrl+clique no boto e repita esse passo.

* N. E.: Na verdade este efeito imperceptvel no Excel 2013, porm voc pode observar a palavra Edita na barra de status.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 18 23/07/2014 11:39:21


Entendendo o VB Editor 19

7. Use as configuraes na caixa de dilogo Formatar Controle para mudar o tamanho da


fonte, a cor da fonte, as margens e configuraes similares do controle. Clique em OK
para fechar a caixa de dilogo quando terminar. Clique em uma clula qualquer para
desmarcar o boto. 1
8. Clique no boto para executar a macro.

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.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 19 23/07/2014 11:39:21


20 Captulo 1 Libere o Poder do Excel com o VBA

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.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 20 23/07/2014 11:39:21


Entendendo os Problemas do Gravador de Macro 21

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.

Entendendo os Problemas do Gravador de Macro


Suponha que voc trabalhe em um departamento de contabilidade. Cada dia voc recebe um
arquivo de texto do sistema da companhia mostrando todas as vendas do dia anterior. Este
arquivo de texto tem vrgulas separando cada campo. As colunas no arquivo so DataDaFatura,
NumeroDaFatura, NumeroDoVendedor, NumeroDoCliente, RendaDoProduto,
RendaDoServico e CustoDoProduto (veja a Figura 1.8).

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.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 21 23/07/2014 11:39:21


22 Captulo 1 Libere o Poder do Excel com o VBA

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.

1 N.E.: Na direita, onde aparece inicialmente Todos os Arquivos do Excel.


2 N.E.: Prefira Ctrl + Shift + 8, ou simplesmente Ctrl + * se voc estiver em um computador com teclado numrico. Essa
combinao independe do idioma do Excel.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 22 23/07/2014 11:39:21


Entendendo os Problemas do Gravador de Macro 23

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.

Examinando o Cdigo na Janela de Programao


Vamos examinar o cdigo que voc acabou de gravar no estudo de caso. No se preocupe se
ele no fizer sentido ainda.
Para abrir o VB Editor, pressione Alt+F11. No seu projeto VBA (01-MacroParaImportarFatura.xlsm),
encontre o componente Mdulo1, clique com o boto direito no mdulo e selecione Exibir
Cdigo. Perceba que algumas linhas comeam com um apstrofo elas so comentrios e so
ignoradas pelo programa. O gravador de macros comea as macros com alguns comentrios,
usando a descrio que voc inseriu na caixa de dilogo Gravar Macro. O Comentrio sobre o
Atalho do Teclado est ali para lembrar voc do atalho.

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"

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 23 23/07/2014 11:39:21


24 Captulo 1 Libere o Poder do Excel com o VBA

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.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 24 23/07/2014 11:39:21


Entendendo os Problemas do Gravador de Macro 25

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

Teste Cada Macro


sempre bom testar as macros. Para testar sua nova macro, retorne para a interface normal
do Excel pressionando Alt+F11. Feche o Fatura.txt sem salvar nenhuma mudana. O
01-MacroParaImportarFatura.xlsm ainda est aberto.

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.

Executar a Macro em Outro Dia Produz Resultados Indesejveis


Depois de testar a macro, salve o arquivo de macro para usar em um outro dia. No dia
seguinte, depois de receber um novo arquivo Fatura.txt do sistema, voc abre a macro,
pressiona Ctrl+I para execut-la e o desastre acontece. Os dados de 9 de junho tinham nove
vendas, enquanto que os dados de 10 de junho tinham 17 vendas. Entretanto, a macro gravada
cegamente adicionou os totais na Linha 11, porque foi ali que voc colocou os totais quando a
gravou (veja a Figura 1.12).
Este problema surge porque o gravador de macros, por padro, est gravando todas as suas
aes no modo absoluto. Em vez de usar o estado padro do gravador de macros, a prxima
seo discute a gravao relativa e como ela pode lhe aproximar de uma soluo definitiva.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 25 23/07/2014 11:39:21


26 Captulo 1 Libere o Poder do Excel com o VBA

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.

Soluo Possvel: Use Referncias Relativas Quando Estiver Gravando


Por padro, o gravador de macros grava todas as aes como aes absolutas. Se voc navegar
at a Linha 11 enquanto grava a macro na segunda-feira, a macro sempre ir at a Linha 11
quando for executada. Isso raramente apropriado quando estamos lidando com um nmero
varivel de linhas de dados. A melhor opo usar referncias relativas ao gravar.
Macros gravadas com referncias absolutas apontam para o endereo real do ponteiro
da clula, como, por exemplo, A11. Macros gravadas com referncias relativas ditam que
o ponteiro da clula deve se mover por um certo nmero de linhas e colunas a partir de
sua posio atual. Por exemplo, se o ponteiro da clula comeasse na clula A1, o cdigo
ActiveCell.Offset(16, 1).Select moveria o ponteiro da clula para B17, que a clula 16
linhas abaixo e 1 coluna direita.
Vamos tentar o mesmo estudo de caso novamente, desta vez usando referncias relativas. A
soluo ficar muito mais prxima de funcionar corretamente.

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.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 26 23/07/2014 11:39:21


Entendendo os Problemas do Gravador de Macro 27

3. Digite a palavra Total.


4. Pressione a Seta-Para-Direita quatro vezes, para ir para a Coluna E da linha Total. 1
5. Segure a tecla SHIFT enquanto pressiona a seta para direita duas vezes para selecionar E11:G11.
6. Clique no boto AutoSoma.
7. Pressione Shift+Barra de Espao para selecionar a linha inteira. Digite Ctrl+N para aplicar a formatao negrito
nela. Nesse ponto, necessrio ir at a Clula A1 para aplicar a formatao negrito nos ttulos. Voc no quer que o
gravador de macros grave o movimento da Linha 11 para a 1, porque ele gravaria isso como um movimento de 10
linhas para cima, o que pode no estar correto amanh. Antes de mover para A1, desligue o boto Usar Referncias
Relativas e depois continue a gravao do resto da macro.
8. Marque a Linha 1 e clique no cone Negrito para colocar os ttulos em negrito.
9. Pressione Ctrl+T para selecionar todas as clulas.
10. Na guia Pgina Inicial, selecione Formatar, AutoAjuste da Largura da Coluna.
11. Selecione a clula A1.
12. Pare a gravao.

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

' Gravao relativa ligada aqui


Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "'Total"
ActiveCell.Offset(0, 4).Range("A1:C1").Select
Selection.FormulaR1C1 = "=SUM(R[-9]C:R[-1]C)"

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 27 23/07/2014 11:39:21


28 Captulo 1 Libere o Poder do Excel com o VBA

' Gravao relativa desligada aqui


ActiveCell.Rows("1:1").EntireRow.Select
1 ActiveCell.Activate
Selection.Font.Bold = True
Rows("1:1").Select
Selection.Font.Bold = True
Cells.Select
Selection.Columns.AutoFit
Range("A1").Select
End Sub

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.

Abra o 01-MacroParaImportarFatura.xlsm e execute a nova macro com Ctrl+J. Dessa vez,


tudo deve estar certo, com os totais nos locais devidos. Veja a Figura 1.13 v algo fora do
comum?

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.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 28 23/07/2014 11:39:21


Entendendo os Problemas do Gravador de Macro 29

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.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 29 23/07/2014 11:39:21


30 Captulo 1 Libere o Poder do Excel com o VBA

Nunca use o Boto AutoSoma Enquanto Estiver Gravando uma Macro


Na verdade, h uma soluo no gravador de macros para o problema atual. importante reconhecer
1 que o gravador de macros nunca ir gravar corretamente a inteno do boto AutoSoma.
Se voc est na clula E99 e clica no boto AutoSoma, o Excel comea a varrer as clulas de
E98 para cima at localizar uma clula de texto, em branco ou com uma frmula. Ele ento
prope uma frmula que soma tudo entre a clula atual e a clula encontrada.
Entretanto, o gravador de macros grava o resultado especfico daquela busca no dia em que
a macro foi gravada. Em vez de gravar algo do tipo faa a lgica normal da AutoSoma, o
gravador de macros insere uma nica linha de cdigo para somar as 98 clulas anteriores.
Excel 2013 acrescentou o recurso Anlise Rpida. Selecione E2:G99, abra o Anlise Rpida,
escolha Totais, Some na Parte inferior e voc conseguir os totais corretos na Linha 100. O
gravador macros codifica as frmulas para sempre aparecer na Linha100 e sempre totalizar da
Linha 2 at a Linha 99.
A soluo, um tanto estranha, digitar uma funo SOMA que use uma mistura de referncias
de linha relativas e absolutas. Ao digitar =SOMA(E$2:E10) enquanto o gravador de macros est
sendo executado, o Excel inclui corretamente o cdigo que sempre soma da segunda linha
que fixa para baixo, at a referncia relativa que est logo acima da clula atual.
Aqui est o cdigo resultante com alguns comentrios:
Sub FormatarFatura3()
'
' Macro FormatarFatura3
' Terceira tentativa. Use a gravao relativa. No toque na AutoSoma
'
' Atalho de Teclado: Ctrl+Shift+K
'
Workbooks.OpenText Filename:=C:\VBA-e-Macros\Fatura.txt, Origin _
Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
Tab:=False, 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
' Gravao relativa ligada aqui
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "Total"
ActiveCell.Offset(0, 4).Range("A1").Select
' No use a AutoSoma. Digite esta frmula:
Selection.FormulaR1C1 = "=SUM(R2C:R[-1]C)"
Selection.AutoFill Destination:=ActiveCell.Range("A1:C1"), _
Type:= xlFillDefault
ActiveCell.Range("A1:C1").Select
' Gravao relativa desligada aqui
ActiveCell.Rows("1:1").EntireRow.Select
ActiveCell.Activate
Selection.Font.Bold = True
Cells.Select
Selection.Columns.AutoFit
Range("A1").Select
End Sub

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 30 23/07/2014 11:39:21


Nunca use o Boto AutoSoma Enquanto Estiver Gravando uma Macro 31

Essa terceira macro vai funcionar consistentemente com um conjunto de dados de


qualquer tamanho.

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 1: A Configurao Usar Referncias Relativas Normalmente Precisa Estar Ativada


A Microsoft deveria tornar essa configurao o padro. A menos que voc precise ir
especificamente at a Linha 1 a partir do final do conjunto de dados, voc deveria
normalmente deixar ativado o boto Usar Referncias Relativas na guia Desenvolvedor.

Dica 2: Use Teclas Especiais de Navegao para Ir at o Final de um Conjunto de Dados


Se voc estiver no topo do conjunto de dados e precisar ir para a ltima clula com dados, pode
pressionar Ctrl+Seta-Para-Baixo ou pressionar a tecla End e depois a tecla Seta-Para-Baixo.
De forma similar, para ir at a ltima coluna na linha atual do conjunto de dados, pressione
Ctrl+Seta-Para-Direita ou pressione End e depois a tecla Seta-Para-Direita.
Usando essas teclas de navegao, possvel pular at o fim de um conjunto de dados, no
importando quantas linhas ou colunas tenha no momento.

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.

PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 31 23/07/2014 11:39:21


PF-E-RT-01_Excel-2013-VBA-e-Macro.indd 32 23/07/2014 11:39:21

Você também pode gostar