You are on page 1of 398

Bertolo Lies de VBA do Excel 1

Lies de VBA
do Excel





225 225 159

222 222 189

204 204 153

238 238 201













Bertolo As Fases do Curso 2


O Excel

um programa que tem um grande potencial, mas a maioria do
pessoal o maneja de forma simples, utilizando somente as suas opes bsicas. Porm
h algo muito importante que tenho a lhes dizer. O Excel conta com uma linguagem
muito poderosa chamada Visual Basic , ou melhor, somente com uma parte da
linguagem, mas que permite resolver os problemas mais facilmente. Porm, devemos
aprender a program-lo e para isso que existe este curso. As pessoas poderiam dizer
que este curso de um nvel muito alto, e talvez o seja, mas fcil de aprender, j que
se manipularo as coisas termos simples, e eu gosto de falar com palavras que todo
mundo entenda, por isso o torna mais fcil. A programao empregada neste este curso
ou as estruturas que aparecero so criadas pelo prprio aplicativo, j que para manejar
a programao de Visual Basic do Excel necessrio ter muita criatividade, cada
pessoa pode criar estruturas diferentes, mas que trabalhem de forma igual. Assim mos
obra e divirtam-se!

Bertolo Lies de VBA do Excel 3
FASES DO CURSO
Fase # 1: Desenvolvendo Procedimentos (Macros) VBA em Excel
Descubra o Gravador de Macros que funcionar para voc todas s vezes, mesmo
quando voc se tornar um expert. Descubra ento o ambiente amigvel Visual Basic
Editor onde todas as coisas acontecem no VBA. Aqui temos 9 lies para fazer voc se
sentir mais confortvel, de modo que voc se diverte desenvolvendo procedimentos
VBA (macros).

Lio 1: Introduo - Lio 2: Vocabulrio das Macros do Excel - Lio 3: O
Gravador de Macros Excel - Lio 4: O Visual Basic Editor - VBE - Lio 5:
Modificando Macros no Visual Basic Editor - Lio 6: Criando Macros no Visual
Basic Editor - Lio 7: Testando Macros no Visual Basic Editor - Lio 8:
Eventos VBA - Lio 9: Segurana e Proteo no VBA

Fase # 2: O Cdigo VBA
quase o Ingls, mesmo assim existem maneiras para falar ao Excel. Nestas 8 lies
voc aprender trabalhar com o Application (o prprio Excel), com pastas, planilhas,
clulas e ranges, caixas de mensagens, caixas de entradas de dados e erros.
Lio 1: Palavras e sentenas (cdigo) no VBA para o Excel - Lio 2:
Trabalhando com o Application - Lio 3: Trabalhando com Workbooks - Lio 4:
Trabalhando com Worksheets - Lio 5: Trabalhando com Clulas e Ranges -
Lio 6: Trabalhando com Caixas de Mensagens - Lio 7: Trabalhando com
Caixas de Entrada - Lio 8: Trabalhando com Erros
Fase # 3: VBA Avanado para o Excel
Vamos agora nos aprofundar mais . Em 12 lies voc aprender como trabalhar com
variveis, declaraes e funes. Da ento descobrir os databases no Excel e o cdigo
para trabalhar com eles. Depois a parte divertida, trabalhar com userforms e controles.
Como criar e/ou modificar Menus? Use os controles ActiveX nas prprias planilhas e
grficos. Vamos trabalhar com barras de ferramentas. Finalmente como criar os
Suplementos.
Lio 1: Cdigo VBA do Excel para Variveis - Lio 2: Trabalhando com
Declaraes - Lio 3: Trabalhando com Funes - Lio 4: Trabalhando com
databases - Lio 5: Criando UserForms - Lio 6: Adicionando Controles aos
userforms Lio 7: Cdigo VBA do Excel para UserForms - Lio 8: Cdigo VBA
do Excel para Grficos e Arquivos Seqenciais Lio 9: Criando e Modificando
Menus Lio 10: Usando controles ActiveX nas planilhas e grficos Lio 11:
Trabalhando com Barras de Ferramentas Lio 12: Os Suplementos
Bertolo As Fases do Curso 4




Saudao
Entre no maravilhoso mundo do VBA (macros) com estas 29 lies. No
somente a linguagem de programao para desenvolver macros (Visual Basic for
Application ou VBA) fcil para aprender, mas o seu ambiente de desenvolvimento
extremamente amigvel para o usurio. Desde 1997, voc pode desenvolver muito mais
que comandos de macro (macros) com VBA. O VBA para todo mundo. Ele uma
linguagem muito simples e projetada para os USURIOS. Com o VBA voc pode
desenvolver pequenos procedimentos (10 linhas ou menos) que lhe pouparo um monte
de tempo, eliminando tarefas repetitivas. Voc tambm pode desenvolver programas
complexos e poderosos por uma frao do preo que ele poderia lhe custar para
consegu-los desenvolvidos por especialistas em computao. A experincia tem me
mostrado em incontveis vezes que certas anlises e relatrios sofisticados SOMENTE
podem ser desenvolvidos com o Excel e o VBA. Isto porque o Excel o programa de
anlise e relatrio mais usado no mundo.
Divirta-se
Bertolo Fase #1: Desenvolvendo Procedimentos VBA em Excel 5

Fase # 1: Desenvolvendo Procedimentos
(Macros) VBA em Excel.

Lio 1: Introduo ao VBA do Excel - Lio 2: Vocabulrio das Macros VBA do
Excel - Lio 3: O Gravador de Macros Excel - Lio 4: O Visual Basic Editor -
Lio 5: Modificando Macros no Visual Basic Editor - Lio 6: Escrevendo
Macros no VBEditor - Lio 7: Testando Macros no Visual Basic Editor - Lio 8:
Eventos VBA do Excel - Lio 9: Segurana e Proteo no VBA do Excel

Lio 1: Introduo ao VBA do Excel
O VBA "Visual Basic for Application". Ele uma linguagem de programao
que permite usurios a programarem macros para executar tarefas repetitivas ou
complexas automaticamente dentro do Excel. Com o VBA do Excel voc pode
desenvolver pequenos procedimentos (macros) que tornaro a sua vida profissional
mais fcil e lhe permitir fazer mais em menos tempo. Mas o VBA tambm uma
linguagem de programao muito poderosa com a qual voc pode desenvolver dentro do
Excel programas reais que executem em poucos minutos tarefas muito complexas. Com
o VBA do Excel voc pode desenvolver um programa que faa EXATAMENTE o que
voc precisa.
Lio 2: Vocabulrio das Macros VBA do Excel
Se como eu voc for um contador voc tem dispensar anos numa faculdade para
aprender lanamentos de dbitos e crditos. Quando voc falar com outros contadores
eles entendero a respeito do que voc est falando, mas se voc falar com advogados
ou engenheiros eles no tm uma pista. Em programao existem certos termos que
voc precisa aprender sobre eles para descobrir o bsico e o mais complexo. Estes
termos so "objetos", "propriedades", "mtodos" e outros. Aqui est o que eles so e o
que eles significam.
Lio 3: O Gravador de Macros do Excel
Quando voc iniciar o gravador de macro voc pode escolher para anexar a macro a
uma tecla do teclado. Quando ela foi gravada voc apenas clicou na tecla que voc
escolheu e a macro por outro lado fez isto novamente. Desenvolva a sua primeira macro
Excel com esta lio passo a passo sobre como usar o Gravador de Macros do Excel.
Aps 12 anos de programao eu ainda uso o Gravador de Macros do Excel
diariamente. Ele o melhor professor e o maior dos assistentes.
Lio 4: O Visual Basic Editor
O Visual Basic Editor - VBE o subprograma em Excel com o qual voc desenvolve,
testa e modifica as suas macros, em Excel. Ele um ambiente muito amigvel para o
usurio. Voc no precisa instal-lo, ele j est l toda vez que voc abrir o Excel. Aqui
est como configur-lo para tornar a sua experincia tanto quanto possvel, fcil,
agradvel e til. Desenvolver macros, criar useforms com controles (botes de
comando, caixa de listagens, caixas de texto, caixas de combinao (listas drop-down),
etc..). Configure e mude todas as propriedades dos componentes.

Bertolo As Lies da Fase #1 6


Lio 5: Modificando Macros no Visual Basic Editor
Numa lio anterior voc gravou uma macro mas agora que voc entendeu o
fundamento dela voc quer faz-la MAIS. Aprenda como modificar uma dada macro no
Visual Basic Editor - VBE.
Lio 6: Escrevendo Macros no VBEditor
Neste captulo criamos uma nova macro (procedimento VBA) estigmatizada.
Escreveremos manualmente as sentenas (cdigos) que o Excel entende. Descubra
mesmo assim uma linguagem muito poderosa.
Lio 7: Testando Macros no Visual Basic Editor
Agora a vez de testar a macro passo a passo. Voc no quer somente test-la passo a
passo, mas voc quer v-la funcionando no Excel quando voc rod-la lentamente.
Aprenda como se desdobra a sua tela para ver o Visual Basic Editor e o Excel ao
mesmo tempo. Voc clica na tecla F8 para rodar a macro passo a passo e voc v as
coisas acontecendo no Excel. Voc no gostou do que viu ento voc volta atrs para
modificar o cdigo e v adiante novamente.
Lio 8: Eventos VBA do Excel
Uma macro inicia quando um evento acontece. Uma macro em Excel usualmente inicia
quando voc clica num boto como em qualquer outro programa grande. O clicar
chamado de um evento. Existem mais coisas para os eventos do que apenas clicar num
boto. Voc pode clicar num item de menu, num cone de uma barra de ferramentas,
numa tecla do teclado mas a abertura de uma pasta tambm um evento, mover-se para
uma certa folha um evento e apenas mover o cursor sobre um boto pode iniciar uma
macro. Aprenda sobre todos os eventos, o mais usual e alguns dos menos usuais. Assim
basicamente quando um evento acontecer voc chamar uma macro com uma sentena
muito simples como "Call proMyMacro".
Lio 9: Segurana e Proteo no VBA do Excel
Aprenda como proteger seu computador de vrus transmitidos pelas macros. Aprenda
como proteger suas macros (procedimentos VBA) com uma senha (password) e aprenda
como usar a propriedade "VeryHidden" da folha para REALMENTE ocultar uma
planilha contendo salrios e preos. Quando ela estiver very hidden a folha est l mas
somente VOC e uns poucos selecionados que sabe o password para a suas
macros podem acess-las.

Para quem serve estas 9 lies?
Estas lies foram projetadas para os contadores, planejadores de produes,
supervisores de produo, pessoal de vendas, analistas financeiros e outros analistas de
dados de negcios.
O VBA uma linguagem de programao para os usurios. Ela simples e fcil
para aprender. Qualquer um pode desenvolver macros simples (procedimentos de VBA)
e com tempo e interesse voc pode chegar a um ponto onde voc pode desenvolver
muitos procedimentos complexos para efetuar tarefas muito sofisticadas. Ela fornecer a
Bertolo Lies de VBA do Excel 7


voc uma ferramenta que vai alm daquele feijo com arroz geralmente praticado por
muitos todo o dia.
Voc pode esperar em desenvolver aplicaes muito brilhantes se voc:
- conhecer bem os seus dados (financeiros, contbeis, vendas, marketing, estoque, etc..)
- conhecer bem o Excel (SUMPRODUCT, INDEX/MATCH e outras funes
importantes do Excel, mais as funcionalidades do database do Excel). No precisa
aprender sobre funcionalidades muito raramente usadas como pivot tables, solver,
atingir metas, cenrios, group e outline e outras ferramentas especializadas.
esta maleabilidade que faz com que a anlise dos dados tenha uma
apresentao realmente profissional e somente vista em verses de programas
estatsticos SPSS, etc..
Se voc tiver mais do que 10 anos de experincia no seu campo de
especializao (Contabilidade, Finanas, Produo, Engenharia, etc...) voc deve querer
aprender VBA para tornar-se um desenvolvedor VBA do Excel (o mercado e o dinheiro
so muito bons). Precisa para isso ter conhecimentos bsicos de Excel.
nossa inteno desenvolver ferramentas que permanecem na obscuridade e
abrir a voc novas fronteiras na arte de analisar dados.
O que so estas 9 lies?
Por favor, no pule o primeiro captulo sobre o vocabulrio. Algumas das coisas
que eu preciso falar para voc sobre elas mais tarde soaro como Marcianas. Se voc
falar Marciano, ento, siga em frente....
Da ento eu lhe apresentarei ao gravador de macro, uma caracterstica nica que
permite a voc criar macros enquanto voc est fazendo manualmente o que voc
gostaria que a macro fizesse. Da ento nas prximas 4 lies, eu darei uma olhada no
Visual Basic Editor (VBE), o ambiente de programao mais amigvel do usurio no
mercado.
Voc ento aprender sobre os EVENTOS que disparam as macros (lio 8),
controles (botes de comando) e os userforms.
Finalmente h a lio 9 sobre segurana e proteo.
Bertolo Fase #1: Desenvolvendo Procedimentos VBA em Excel 8


Lio #01: Introduo ao VBA do Excel
VBA "Visual Basic for Application". uma linguagem de
programao que permite os usurios a programarem macros para
efetuar tarefas complexas dentro de uma aplicao. Com o VBA do
Excel voc pode desenvolver pequenos procedimentos (macros e/ou funes) que
tornaro sua vida profissional mais fcil e lhe permitir fazer mais em menos tempo. Mas
o VBA tambm uma linguagem de programao muito poderosa com a qual voc
pode desenvolver dentro do Excel programas reais que efetuaro em uns poucos
minutos tarefas muito complexas. Com o VBA para o Excel voc pode desenvolver um
programa que faa EXATAMENTE o que voc precisa.
O
Visual Basic e VBA
O que VBA?
Existe um VBA
para cada
Aplicativo
Existe o VBA para o Excel, o VBA para o Word, o VBA para o Project, o VBA
para o Access. Voc pode usar o VBA em Autocad, Oracle e mesmo com o EssBase.
Todos os VBA's so semelhantes, mas variam nos objetos com os quais eles trabalham.
Todos eles tm a mesma fonte Visual Basic (VB).
De onde veio o VBA?
Nos anos 70 uma nova linguagem de computador apareceu chamada Basic. Eu
a usei em calculadoras avanadas (TI 59). Naquele tempo, a RAM (memria) e a CPU's
(o crebro do computador) eram muito, muito pequenos e voc estava limitado no que
voc poderia fazer com a linguagem. Lembro-me ainda que no final daquela dcada eu
era Estagirio numa Empresa de Construo Civil, no Rio de Janeiro, e tinha
programado uma folha de pagamento completa (salrios, impostos, benefcios) para 500
empregados na calculadora Texas Instrument 59.
Com os computadores de hoje em dia veio o Visual Basic (VB). Ela ainda o
Basic, mas, um monte de elementos est pr-programado, tornando a tarefa do usurio
muito mais simples. A Microsoft adotou a linguagem e introduziu-a como um
componente de todas as suas aplicaes.
Deveria eu aprender VBA ou VB?
Digamos que VB para programadores e VBA para usurios (ou
desenvolvedores). Pessoalmente, eu tive vrias horas de treinamento em VB, mas eu
fao todo o meu trabalho no VBA para Excel. Voc no precisa aprender VB para ser
bom em VBA. Eu tenho adotado o VBA para o Excel porque a maioria das funes que
eu preciso para organizar e analisar os dados de negcios est pre-programada no Excel.
Custa muito menos para desenvolver aplicaes financeiras e administrativas no Excel
do que re-inventar a roda e fazer tudo em VB.
Qual a diferena entre VB, VBA para Excel, para Access, para Word,
para Project, etc.?
Para responder esta questo eu lhe pediria para imaginar um encontro de cinco
pessoas falando Portugus, um advogado, um contador, um mdico, um qumico e um
psiclogo. Todos eles falam Portugus, mas quando for vez de falar a respeito do seu
trabalho dirio nenhum deles entende totalmente o outro. o mesmo com o VB e
Bertolo Lies de VBA do Excel 9


VBA's. Os objetos, propriedades e mtodos variam substancialmente de uma
sublinguagem para a outra.
Mas basicamente, se voc falar Ingls voc pode falar VB ou quaisquer dos
VBA's.
O Projeto VBA
Ao iniciarmos uma Pasta de trabalho no Excel automaticamente criado
um Projeto VBA atrelado a ela. Um Projeto VBA o equivalente Pasta d
trabalho no Excel.
e
O Projeto VBA composto por:
Pastas de Trabalho
Estes dois elementos so prprios do Excel
Planilhas
Formulrios
Mdulos
Classes
Estes trs elementos so prprios do VBA
Gostaramos de salientar que durante o processo de desenvolvimento em VBA,
haver situaes onde a resposta ser encontrada com muito trabalho. Para assegurar
que o esforo no foi em vo, boa prtica documentar o que est sendo feito, e como a
soluo foi encontrada. Quando todo o trabalho documentado voc assegura um
ocumento de referncia para o futuro. d

Bertolo Lio #01 Introduo ao VBA do Excel 10


Prtica #01: Introduo ao VBA do Excel
Bertolo Fase #1: Desenvolvendo Procedimentos VBA em Excel 11


Lio 2: Vocabulrio das Macros VBA do Excel
1
o universo do VBA do Excel (Macros) existe algum vocabulrio
(terminologia) que voc poder querer adotar de modo que outros
possam lhe entender e de modo que voc possa entender os outros. Isto
ocorre em qualquer linguagem de programao. Alguns dos termos so bem
conhecidos, e requerem pouca explicao. Outros so termos que voc no deve ter
encontrado antes. O que segue uma lista dos termos chaves do Visual Basic que so
cobertos nesta lio:
N

Objeto
Propriedade
Mtodo
Argumento
Colees
Procedimento
Subrotina
Funo
Macro
Declarao
Expresso

Esta lio dar uma explicao destes termos junto com ilustraes de modo que
quando voc encontrar estes termos nas outras lies voc no ficar confuso.
Tambm, voc encontrar que outras lies do uma cobertura em profundidade destes
termos.
O que uma
MACRO?
Macros do Excel: uma srie de passos que se armazenam e que podem ser ativados
com alguma tecla de controle (Ctrl) mais uma letra. Por exemplo, todos os dias
emprego freqentemente em minhas clulas os mesmos passos: Tamanho de Fonte
(Tamanho da letra), Negrito, Fonte (Tipo de letra) e Cor de Fonte (Cor de Letra). Para
no estar repetindo estes passos, posso armazen-los numa macro e, quando executar
esta macro, os passos antes mencionados se executaro quantas vezes eu desejar. Enfim,
uma macro uma srie de instrues realizadas pelo Excel, ao invs de voc.
As macros ou sub-rotinas comeam com a palavra Sub, seguida pelo nome da
macro. Elas terminam com as palavras End Sub.
O que segue um exemplo de uma subrotina ou macro:

Sub Al Mundo( )
MsgBox " Al Mundo"
End Sub


1
NOTA: Esta lio sobre o vocabulrio de programao. Se voc estiver procurando
cdigos (as palavras usadas para falar ao Excel em VBA) v para a seo de cdigo VBA (11
pginas deles)..

Bertolo Lio #02 O Vocabulrio das Macros VBA do Excel 12


PROCEDIMENTOS: So conjuntos de declaraes que realizam uma tarefa
especfica. Procedimentos podem ser ou macros ou funes. As Funes sero vistas
mais abaixo.
Eventos: Para um procedimento iniciar e ser executado, um evento deve acontecer. O
evento , portanto, a causa de uma ao (ou mtodo, como veremos abaixo). Um
evento que todo mundo conhece o clique (click) no boto. Outros eventos incluem
abertura de uma pasta, ativao de uma folha, modificao do valor de uma clula, etc.
Cdigo: Quando voc estiver escrevendo as instrues em VBA, diz-se que voc est
codificando, ou escrevendo cdigo. Mostre-me seu cdigo e eu lhe mostrarei a mina.
Todos os pedaos de cdigos esto aqui apresentados na fonte Courier New de tamanho
11.
Para escrever cdigo em VBA para macros voc usar 5 tipos de componentes:
objetos, propriedades, mtodos, funes e declaraes:
Componentes
dos Cdigos
O QUE SO OBJETOS ?
Antes de definir o que um objeto, observe os exemplos seguintes:
Televises
Carros
Objetos do dia a dia
Lmpadas
Mesas
Lpis
Computadores
No exatamente o que voc esperava ver? Objetos sua volta so as coisas
que voc pode ver, tocar, sentir ou mudar. Em Visual Basic, objetos so as mesmas
coisas. Eles so basicamente qualquer coisa que voc possa selecion-la. O que segue
so alguns dos objetos mais comuns do Visual Basic do Microsoft Excel:

Clulas
Planilhas
Pastas
Folhas de grficos
Grficos encaixados
Objetos do VBA
Qualquer coisa que voc desenhar numa folha
Linhas de um diagrama
Legendas de diagramas
Eixos X e Y num diagrama
Barras de ferramentas
Botes
Menus

Eles so os blocos de construo dos seus projetos Excel e, so (entre outros), o
Application (o prprio Excel), as Workbooks (Pastas), as Worksheets (Folhas de
Planilhas e/ou Graficos), as Clulas e os Intervalos (Ranges), os Charts, os
Desenhos, os Controles (botes de comando, caixas de texto, caixa de listagens, etc..).

13 Bertolo Lies de VBA do Excel

Voc deve ter notado que grandes objetos, freqentemente, incluem objetos
menores. Por exemplo, um objeto pasta contm objetos folhas de planilhas. Um
objeto planilha contm objetos clulas. Se voc olhar ao seu redor, o mesmo se aplica.
Um objeto casa contm objetos salas. E objeto sala contm objetos mveis e utenslios.
SOBRE COLEES...
Uma coleo um grupo de objetos que so todos do mesmo tipo. As colees
esto quase sempre no plural. Exemplos de colees so pastas, folhas de planilhas, e
diagramas. Os membros individuais de uma coleo podem ser referenciados
especificando a coleo e, da ento, ou o nome do membro, ou um nmero que indique
a posio do membro na coleo. Por exemplo, se a primeira folha de planilha na
coleo Sheets chamada Sheet1, uma das duas declaraes seguintes selecionar esta
folha e a tornar a folha ativa:

Sheet s( " Pl an1" ) . Sel ect

ou Sheet s( 1) . Sel ect
Coleo
Membro

Um dos modos principais que o Visual Basic funciona especificando um
objeto e da ento uma ao a ser imposta ao objeto. por isso que o Visual Basic
chamado de linguagem orientada ao objeto.
SOBRE AS PROPRIEDADES...
Se voc observar os objetos ao seu redor, voc ver que eles tm propriedades.
Por exemplo, uma casa tem uma propriedade endereo, uma pessoa tem uma
propriedade nome, uma sala tem uma propriedade cor, e uma televiso tem uma
propriedade ativa (ou est ligada ou desligada). Os objetos no Microsoft Excel tambm
tm propriedades. Por exemplo, uma clula tem uma propriedade endereo, uma
folha de planilha tem uma propriedade nome, e uma fonte tem uma propriedade cor.

Como os exemplos acima ilustram, as propriedades so caractersticas de um
objeto. Alguns objetos no Microsoft Excel tm muitas propriedades, outros tm muito
poucas. A maioria das propriedades dos objetos expressa como nmeros (tais como o
tamanho da margem), strings de textos (tal como um nome de uma folha), ou valores
Booleanos (True ou False).

Se voc observar os objetos ao seu redor, voc pode mudar algumas
propriedades de um objeto, mas nem sempre todas as propriedades. Por exemplo, voc
pode ligar e desligar sua televiso. E voc pode pintar uma sala para mudar sua cor.
Mas voc no pode mudar onde a sua casa est localizada. O mesmo se aplica ao
Microsoft Excel. Voc pode mudar quase todas as propriedades que voc encontrar,
mas existem umas poucas que voc no pode mudar. Por exemplo, voc pode mudar o
valor de uma clula (a propriedade Valor), mas voc no pode mudar o nmero de
clulas de uma folha.

O Visual Basic funciona muito do jeito que voc faz no Microsoft Excel. Se
voc quiser entrar com um valor numa clula, voc primeiro seleciona a clula da ento
Bertolo Lio #02 O Vocabulrio das Macros VBA do Excel 14


voc digita nela o valor. No Visual Basic, voc especificar a clula, digita um ponto,
especifica uma propriedade Valor, digita um sinal de igual e digita o valor para a clula.
Por exemplo:
Como entrar com
um valor numa
clula
Outra maneira
Exemplos de
Propriedade
Act i veCel l . Val ue = 5
Neste caso ActiveCell uma palavra-chave que se refere clula ativa, que a
clula destacada pelo cursor. Value uma palavra-chave que representa o valor da
propriedade de uma clula. Por favor, note que so muitas as maneiras de se referir s
clulas alm de ActiveCell. Estas maneiras sero cobertas, em detalhes, nas lies
posteriores.

Exatamente como voc especifica sua cidade, rua, e nmero da casa num
endereo, voc pode fazer o mesmo no Visual Basic para melhor identificar uma clula
particular:
Wor kbooks( " Cust o. Xl s" ) . Sheet s( " Fol ha1" ) . _
Range( " A1" ) . Val ue = 5
Neste caso, vrios objetos (uma pasta, uma folha de planilha e uma clula) so
juntados com pontos para identificar uma clula particular. Dai ento a propriedade
(Value novamente neste caso) ligada com um ponto. Finalmente um sinal de igual
entrado seguido por um nmero. A string acima diz ao Visual Basic que ajuste o valor
da clula A1 da folha de planilha Folha1 na pasta Custo.Xls para 5. Por favor, note que
clula A1 no tem que ser a clula ativa.

Se voc quiser encontrar o valor de uma propriedade em vez de mud-la,
especifique o objeto e a propriedade. Normalmente, o valor que retornado
armazenado numa varivel ou usado numa declarao. Por exemplo, a declarao
seguinte mostra uma caixa de mensagem que lhe diz o valor da clula ativa:
MsgBox Act i veCel l . Val ue
Outra maneira usar a janela local que ser discutida na lio sobre depurao
de suas macros.

A declarao seguinte armazena o nome da folha de planilha ativa numa
varivel chamada X, para uso posterior:
X = Act i veSheet . Name
Neste caso, ActiveSheet o objeto e se refere folha de planilha ativa. Name a
propriedade. A varivel nesta declarao chamada simplesmente de "X". Nomes
mais compridos e mais descritivos de varivel so permitidos.
Falar em propriedade pensar ento no verbo ser/estar ou ter.
A seguir, mostramos outros exemplos de propriedades de objetos do VBA:
Sel ect i on. Font . Bol d = Tr ue ..................A fonte est em negrito.
Sheet s( " Tal qual " ) . Vi si bl e = Tr ue.......A folha de planilha Talqual est
visvel
15 Bertolo Lies de VBA do Excel

Act i veWor kbook. Name ................................. A pasta ativa tem um nome
Act i vecel l . Val ue = 10 ou
Act i vecel l . For mul a = " =A1+B2" .... A clula pode ter um valor ou uma
frmula.
O conjunto de propriedades difere de um objeto para outro. Uma planilha no
pode ser negritada e uma pasta no pode ter uma frmula. Excel dir quando voc
estiver tentando usar uma propriedade que no existe para o objeto que voc est
trabalhando.
SOBRE OS MTODOS

Um mtodo um termo do Visual Basic para uma palavra-chave que representa
uma ao que voc quer impor a um objeto. Por exemplo, Copiar, Recortar, e Colar so
todos exemplos de mtodos do Visual Basic. Como uma ao est associada com um
objeto, o Visual Basic requer que voc especifique o objeto, um ponto e da ento o
mtodo. Um sinal de igual no usado. Na declarao seguinte,

Range( " B9" ) . Sel ect

o objeto a clula B9 e o mtodo a palavra-chave Select, que faz o ponteiro de clula
mover-se para esta clula.

Na declarao seguinte,

Act i veCel l . Copy
Ao = Mtodo
Exemplos de
Propriedade

ActiveCell a palavra-chave que identifica a clula ativa. Copy o mtodo. Esta
declarao diz ao Visual Basic copiar os contedos da clula ativa para o clipboard para
ser usado mais tarde.

O que segue um exemplo de uso do mtodo Copy sobre uma clula que no a
clula ativa:
Range( " A9" ) . Copy
Falar em mtodo pensar ento no verbo fazer. Voc poder querer fazer com
que um objeto feche, abra, seja copiado ou colado, etc.. (Act i veWor kbook. Cl ose,
Act i vecel l . Past e). Novamente, o Excel lhe dir quando voc estiver tentando usar
um mtodo que no se aplica ao objeto em uso.
Exemplo:
Sub pr oTest e ( )
Range( " A2" ) . Val ue= 2
Thi sWor kbook. Cl ose
Appl i cat i on. Qui t
End Sub
Estas quatro linhas constituem um procedimento (macro) chamado "proTeste".
Eu sempre nomeio minhas macros iniciando com o prefixo "pro" e a primeira letra
Bertolo Lio #02 O Vocabulrio das Macros VBA do Excel 16


maiscula para qualquer palavra significante compreendida no nome como proInfo,
proDadosBrutos, proSempreque. Voc ver mais tarde quo importante este prefixo e
letra maiscula costumam ser.

"Range("A2")", "ThisWorkbook" e "Application" so objetos, "Value" uma
propriedade e "Close" e "Quit" so mtodos.
Este procedimento VBA ser atribudo a um objeto boto (controle) e quando o
usurio clicar nele (o evento) o procedimento VBA rodar (o mtodo rodar ser
aplicado).
Este procedimento VBA diz ao computador que quando o usurio clicar no
boto, a clula "A2" recebe um valor 2 e o Excel fechado.

Aqui vo alguns cdigos muito comuns:
Trasladar-se a uma Clula
Range( " A1" ) . Sel ect
Escrever em uma Clula
Act i vecel l . For mul aR1C1=" Ber t ol o"
Letra em Negrito
Sel ect i on. Font . Bol d = Tr ue
Letra Cursiva (Itlico)
Sel ect i on. Font . I t al i c = Tr ue
Letra Sublinhada
Sel ect i on. Font . Under l i ne = xl Under l i neSt yl eSi ngl e
Centralizar o Texto
Wi t h Sel ect i on
. Hor i zont al Al i gnment = xl Cent er
End Wi t h
Alinhar esquerda
Wi t h Sel ect i on
. Hor i zont al Al i gnment = xl Lef t
End Wi t h
Bertolo Lies de VBA do Excel 17

Alinhar Direita
Wi t h Sel ect i on
. Hor i zont al Al i gnment = xl Ri ght
End Wi t h
Tipos de Letra (Fonte)
Wi t h Sel ect i on. Font
. Name = " AGar amond"
End Wi t h
Tamanho de Letra (Tamanho de Fonte)
Wi t h Sel ect i on. Font
. Si ze = 15
End Wi t h
Copiar
Sel ect i on. Copy
Colar
Act i veSheet . Past e
Cortar
Sel ect i on. Cut
Ordenar Ascendente
Sel ect i on. Sor t Key1: =Range( " A1" ) , Or der 1: =xl Ascendi ng,
Header : =xl Guess, _
Or der Cust om: =1, Mat chCase: =Fal se, Or i ent at i on: =xl TopToBot t om
Ordenar Descendente
Sel ect i on. Sor t Key1: =Range( " A1" ) , Or der 1: =xl Descendi ng,
Header : =xl Guess, _
Or der Cust om: =1, Mat chCase: =Fal se, Or i ent at i on: =xl TopToBot t om
Buscar
Cel l s. Fi nd( What : =" Bertolo" , Af t er : =Act i veCel l ,
LookI n: =xl For mul as, LookAt _
: =xl Par t , Sear chOr der : =xl ByRows, Sear chDi r ect i on: =xl Next ,
Mat chCase: = _
Fal se) . Act i vat e
Inserir Arquivo
Bertolo Lio #02 O Vocabulrio das Macros VBA do Excel 18


Sel ect i on. Ent i r eRow. I nser t
Eliminar Arquivo
Sel ect i on. Ent i r eRow. Del et e
Inserir Coluna
Sel ect i on. Ent i r eCol umn. I nser t
Eliminar Coluna
Sel ect i on. Ent i r eCol umn. Del et e
Abrir uma Pasta
Wor kbooks. Open Fi l ename: =" C: \ Meus document os\ video safe 3.xls"
Gravar um Pasta
Act i veWor kbook. SaveAs Fi l ename: =" C: \ Meus document os\ piscis.xls" ,
Fi l eFor mat _
: =xl Nor mal , Passwor d: =" " , Wr i t eResPasswor d: =" " ,
ReadOnl yRecommended: = _
Fal se, Cr eat eBackup: =Fal se
Esses seriam alguns cdigos muito comuns no Excel, mas se voc deseja pode
gerar mais cdigos de outras opes, uma questo de que os ocupe.


EXERCCIOS:
1. Escreva uma declarao para o Visual Basic colar o contedo do clipboard
na clula A21.
2. Escreva uma declarao para o Visual Basic selecionar a clula A10.
3. Escreva uma declarao para o Visual Basic escrever Bertolo na clula
ativa.
4. Identifique nos cdigos acima o objeto, a propriedade e os mtodos

19 Bertolo Lies de VBA do Excel


SOBRE AS FUNES...
Funes so conjuntos de declaraes que retornam um valor. Exemplos de
funes que so construdas no Microsoft Excel so a funo Soma() e a funo TIR().

As funes escritas por um usurio so chamadas User Defined Function
(UDF's). Tais funes so teis porque elas podem ser usadas nas clulas da planilha
para fazer clculos especializados no programados nas funes existentes no Microsoft
Excel. Tambm, voc pode usar funes para trocar complexas frmulas de clula SE.
Voc pode, tambm, usar funes em suas macros.
O que segue um exemplo de uma funo UDF:

Funct i on TamanhoDaCaixa(X, Y)
TamanhoDaCai xa = X * Y
End Funct i on

Esta funo calcula o tamanho de uma caixa e retorna com um nmero baseado nos
valores fornecidos para X e Y. Para us-la, voc dever digitar = TamanhoDaCaixa
(clula referncia, clula referncia) numa clula de uma planilha. Por
favor, note que as macros e as funes podem ser muito complexas e poderosas!
Voc pode, e voc vai usar todas as funes Excel dentro de seu cdigo VBA,
mas voc tambm pode usar as funes do VBA como UCASE, LCASE, NOW(), etc..
(Act i vecel l . Val ue=NOW( ) )
FORNECENDO ARGUMENTOS
Argumentos so valores que so passados s macros, aos mtodos, e s
funes. Para ilustrar o que um argumento, primeiro selecione uma clula e selecione
Editar, Copiar do menu da barra de ferramentas Padro do Excel.. Da ento, v a outra
clula e selecione Editar, Colar especial. Aparecer o menu seguinte:

Bertolo Lio #02 O Vocabulrio das Macros VBA do Excel 20



As diferentes selees que voc pode fazer neste painel representam os
argumentos para o comando colar especial. A declarao seguinte do Visual Basic
tem o mesmo efeito que as selees na caixa acima:

Act i veCel l . Past eSpeci al paste: =xl Val ues, _
Argumentos de
um Mtodo
operation: =xl None, _
skipBlanks: =Fal se, _
transpose: =Fal se

Nesta declarao, as palavras: paste, operation, skipBlanks e transpose so os
argumentos para o mtodo PasteSpecial. Os valores so atribudos a um argumento
por uma combinao de dois pontos e um sinal de igual. Neste caso os valores ou so
numricos, especificados pelas constantes do Visual Basic (xlValues e xlNone), ou so
valores Booleanos que so as palavras: Verdadeiro(True) ou Falso (False). As
constantes do Visual Basic so apenas nomes para nmeros. Usando nomes para
nmeros, torna as declaraes do Visual Basic mais fceis de entender e os valores mais
fceis de lembrar.

SOBRE AS EXPRESSES E DECLARAES

As macros, e as funes, so constitudas de declaraes, e estas declaraes
so constitudas de expresses. Na funo
TamanhoDaCai xa = X * Y
acima, X * Y uma expresso e TamanhoDaCaixa =X * Y uma declarao. Uma
declarao pode se estender por mltiplas linhas, ou apenas ser de uma nica linha de
tamanho. Na macro AlMundo, cada uma de suas linhas so declaraes.
Outros exemplos de declaraes so: IF..THEN, DO...LOOP, FOR...NEXT,
WITH...END WITH, EXIT FOR, EXIT DO, EXIT SUB que veremos em detalhes em
lies posteriores.

O PROJETO VBA
Um projeto VBA pode compreender 4 tipos de componentes: a pasta, as
planilhas, os mdulos e os userforms.
Componentes
de um Projeto

Workbooks (Pasta): A pasta um arquivo Excel (algo.xls) tambm chamado de
planilha. O objeto "ThisWorkbook" a pasta para a qual a macro foi criada. O cdigo:
Thi sWor kbook. Cl ose
um mtodo que fechar a pasta dentro da qual a macro ativa est rodando.
Worksheets (Planilha): Uma folha de planilha do Excel 2007 que pode ter
1.048.576 linhas e 18.278 colunas.
Mdulos: uma espcie de um arquivo no qual voc guarda a maioria de suas macros
(= sub-rotinas VBA). Mdulos so criados e nomeados no Visual Basic Editor.
21 Bertolo Lies de VBA do Excel

UserForms: So folhas de planilhas especializadas que voc cria para permitir o
usurio submeter parmetros (valores). So usados extensivamente em bancos de dados
(databases), contabilidade, produo e programas de vendas, porque no existem folhas
regulares nestes ambientes.
Os Controles so os botes de comando, as caixas de verificao, os rtulos, as caixas
de texto, as caixas de listagens, os botes de opo e outros utenslios que voc colocar
nas planilhas ou userforms.

REQUISITOS DE CONFIGURAO (SETUP) DE MDULO

Esta lio supe que esteja ativada a opo Mostrar erros de sintaxe. Para
confirmar isto no Visual Basic Editor, selecione Ferramentas, Opes, guia Editor, e
verifique esta configurao. Ns recomendamos tambm que medida que o seu nvel
de experincia no Visual Basic tenha aumentado que voc desligue esta opo ela
pode ficar bastante irritante.

Tambm, no Visual Basic Editor, selecione Ferramentas, Opes e v guia
Geral e certifique-se que a opo Interromper em erros no tratados esteja marcada.

SUMRIO

Esta lio introduziu a linguagem Visual Basic. Quanto mais voc usar o Visual
Basic, mais entendvel a linguagem se tornar. A informao nas lies seguintes
fornecer exemplos adicionais dos objetos, mtodos, propriedades, macros, e funes
do Visual Basic.
Bertolo Lio #03 O Gravador de Macros Excel


22
Lio 3: O Gravador de Macros Excel
om o gravador de macro Excel voc no pode desenvolver uma macro que
danificar o Excel ou seu computador. Quanto mais corajoso voc em suas
tentativas mais voc aprender.
Eu tenho desenvolvido macros por algum tempo, e uso o gravador de macro
Excel diariamente. No para aprender qualquer coisa, mas para escrever cdigo
(palavras e sentenas VBA) para mim. O gravador de
que vo
C
macro Excel o melhor professor
sto de sua vida de
desenv
passo a passo.
ntes de mais nada, caso esteja trabalhando com o Office 2007 procure ativar
(se voc ainda no fez) a guia Desenvolvedor. Para tanto v ao boto do Office
c pode ter e permanecer o melhor assistente para o re
olvedor de VBA. Pessoalmente, eu uso muito o gravador de macro Excel para
evitar em escrever cdigo e fazer erros de ortografia.
Imprima esta pgina e siga as suas instrues
A
>
Opes do Excel e marque a caixa de verificao



habilitadas para Lembre-se que no Office 2007 precisamos salvar as planilhas
macros. Assim,
Bertolo Lies de VBA do Excel


23

A seguir lhe mostro como gravar uma macro, e como execut-la:
Abra o Excel
Translade-se clula A1 e escreva o seu nome. Por exemplo, Bertolo e pressione
Enter
Regresse clula A1, porque quando destes Enter sob a clula A1, o ponteiro muda
para outra clula.
D um clique na Guia Desenvolvedor, a sua tela ficar assim:
Ativar-se-o .
Agora d um clique no boto Gravar Macro. O Windows ativa a caixa de
dilogo Gravar macro, a qual lhe permitir dar a ela um nome e qual tecla de atalho ser
usada para execut-la. A tecla de atalho se refere com qual letra se vai ativar a macro,
obviamente se ativar com a tecla Controle (Ctrl) e uma letra que voc queira, de








as ferramentas do Visual Basic
preferncia em minscula, porque se usar as maisculas a macro dever ser ativada
pressionando a tecla Shift + Controle + a letra que voc indicou.





Bertolo Lio #03 O Gravador de Macros Excel


24









Onde se diz Nome da macro j aparece o nome que a macro levar, neste caso

Macro1. Se desejares trocar este nome, escreva um novo, mas eu o recomendo que
deixes assim.
Na opo Tecla de atalho que aparece e que se ativar com a tecla Controle
(CTRL) + a letra que voc indicar, d um clique no quadradinho e ponha uma
tra. Para o propsito deste exerccio entre com A (maisculo) nesta caixa de texto.
oc ser capaz de rodar a macro apenas mantendo as teclas CTRL e um
HIFT e clicando em A
2
.
m "Armazenar macro em:" est uma lista de todas as pasta que esto abertas,
elecione "Esta pasta de trabalho" que a pasta na qual voc est realmente
abalhando.
Observe que existe uma opo drop down nesta caixa de dilogo. Se voc selecionar
Pasta de trabalho pessoal de macros, as instrues sero gravadas numa pasta
chamada "Pessoal.xls". Se esta pasta no existir, o Microsoft Excel a criar. Se o
Microsoft Excel a criar, a pasta inicialmente ser uma pasta oculta. Voc ter que
selecionar J anela, Reexibir para mostr-la. Quando voc salvar Pessoal.xls, ela ser
salva no seu diretrio XLSTART. Deste modo, quando voc abrir Microsoft Excel,
este arquivo automaticamente aberto e as macros que voc criou e armazenou nesta
pasta esto imediatamente disponveis. Se voc estiver executando o Excel numa
rede, voc deve precisar especificar um diretrio de incio alternativo no painel
Ferramentas, Opes, Geral e salvar o arquivo para este diretrio na primeira vez.
Usualmente a opo Esta pasta de trabalho melhor.
um clique no boto OK. O Windows comear a gravar todos os passos na
hamada daquilo que voc especificou e a anexou na pasta que voc est
abalhando, e aparecer na barra de Status o cone quadradinho Azul e chamar-
e- Parar gravao



le
Mais tarde v
S
E
s
tr
D
c
tr
s

2
NOTA: Sempre selecione a letra maiscula de modo que voc no desative importantes funes que
esto j anexadas a alguma letra minscula pelo Excel.
Bertolo Lies de VBA do Excel


25









Quando voc gravar a planilha que voc est trabalhando, a macro ser salva ao
mesmo tempo. Tambm significa que a Macro1 desaparecer do seu computador
quando voc deletar a planilha.
De agora em diante voc no pode errar, pois ser tudo gravado (inclusive os
rros).
#1. guir, clique no item de menu











e

Clique com o boto direito do mouse na clula e, a se
Formatar Clulas..., e aparecer o painel abaixo:


















Bertolo Lio #03 O Gravador de Macros Excel


26



Na
ou

Assim o Excel guarda os passos na Macro1 que se ativar pressionado a tecla
trl +a .
reva outro nome na clula C1 e pressione Enter, depois volte clula C1.
os os passos gravados
so o nome que esta em C1 ter as mesmas
ca ipo de letra, tamanho, negrito e a cor que indicastes
ao
III. e a macro que voc
cri lha de planilha em que ela foi
cri
IV 1" para as prximas lies e feche-a. Tente
dar a macro novamente. Ela no estar mais l, assim voc no

guia Fonte troque o tipo de letra na caixa Fonte:
#2. Troque o tamanho da letra na caixa Tamanho:
#3. Selecione Negrito na caixa Estilo da fonte
#4. Troque a cor da letra na caixa Cor:.
Lembre-se que todos estes passos esto sendo armazenados na macro que estamos
gravando e, tambm lembre-se que estes passos esto se efetuando na clula A1.
#5. Pressione o boto Parar gravao na barra de Status:
ento, no cone Parar Gravao na Guia Desenvolvedor.





C
I. Esc
II. Pressione a tecla Ctrl +Shift +A. O Windows efetuar tod
bre a clula C1, isto quer dizer que
racteresticas do que est em A1. T
gravar a macro
3
.
V para Plan2 e rode a macro novamente. Voc pode ver qu
ou rodar em qualquer folha de planilha enquanto a fo
ada estiver aberta
. Salve sua pasta como "VBATeste
ro pode rod-la se a tecla
do
Ex
passares lio seguinte. Trata-se de criar macros que armazenem passos como esses,
parar a gravao depois de que indicastes estes
passos. Repita este exerccio tantas vezes quanto desejares necessrio para apreend-lo


de atalho estiver livre.
Se voc fez isto, voc gravou sua primeira macro com o gravador de macro
cel e a usou, congratulaes. Agora recomendo que domines estes passos antes de
grave os passos que te indiquei, e
bem.

3
Cada vez que presisonares Ctrl + Shift + a, o Excel executar a macro e efetuar os passos na clula que
onde voc se encontrar. Podes gravar todas as macros que desejares.
Bertolo Lies de VBA do Excel


27

para a barra de menu
"Ferramentas/Macro/Parar gravao".
Teste a sua macro na Plan2, na Plan3,
Gerar as Macros seguintes:
Grav
, Ver
uitos pensaro que isto no nada mais do que veremos mais adiante quando mesclarmos os cdigos
ue fora gerado pelo Excel com os de Visual Basic. Isto ser pura Mentira.
RAVAO ABSOLUTA E RELATIVA
Quando voc estiver gravando uma macro, voc tem a opo gravar usando
ndereos de clula absolutos ou endereos de clula relativos. Alm disso, voc pode
udar esta opo quando voc estiver gravando uma macro. Qual opo escolher
uito importante em como opera a macro que voc gravou. Tambm, declaraes
iferentes do Visual Basic so gravadas.



Prtica I
1. Vamos agora gravar outra macro com o gravador de macro Excel:
Selecione clula A1 e entre com 34
Selecione clula A2 e entre com 55
Selecione clula A3 e entre com a frmula =A1 +A2
Selecione clula A2 e mude a cor da fonte para vermelha
Selecione clula A1 e mude a cor de background (padro) para azul
Selecione clula A3 e mude o tamanho da fonte para 24
Clique no cone no meio da tela para parar o gravador ou ir

. 2
e uma Macro que se ative com Ctrl+Shift+b e que esta macro lhe permita abrir um
arquivo
Grave uma Macro que se ative com Ctrl+Shift+c e que esta macro lhe permita inserir um
WordArt
3 Livros mais exerccios..............
M
q

G
e
m
m
d
Esta opo est disponvel no segundo boto na barra de ferramentas que
aparece quando voc comear a gravao de uma macro:


Se o boto estiver apertado, a gravao est no modo relativo. Se no apertado,
ento referncias de clula absoluta esto sendo usadas.. O execcio que segue ilustra a
diferena entre gravao relativa e absoluta.
Crie uma folha de planilha como a seguinte de modo que voc possa fazer este
exerccio.


1
2



3
4
Nmeros Frmulas
5
7
E
6
1234 1234
5678
A B C D


Bertolo Lio #03 O Gravador de Macros Excel


28


Coloque o ponteiro de clula na clula B3, a qual contm a palavra "Nmeros".
Voc no pode pre-definir a opo de gravao relativa/absoluta.
P almente, se voc configur-la aps comear a gravao. Se o boto

rincip relativo
uta. estiver apertado, ento a gravao relativa, caso contrrio, absol
Novamente selecione na Barrra de Status o cone Gravar Macro


Nomeie a macro como "GravaoAbsoluta" (sem as aspas duplas). Mude a
absoluta".

ape
bre esta macro mais tarde. O que eu preciso que
ar a gravao relativa.
com a palavra "Nmeros" de modo
o
o
pre avao relativa.
macros, uma chamada "GravaoAbsoluta", e uma
hamad
e voc executa a macro que o cursor vai para a clula
ecionou quando voc gravou a macro. Assim, gravao
ifica ir para as clulas que esto selecionadas, no
oque o ponteiro de clula na Clula A1

caixa de descrio para apresentar "Macro modelo para demonstrar gravao
Selecione o boto OK. Tenha certeza de que o boto gravao relativa no est
rtado.
At este ponto, suas aes estavam sendo gravadas. Selecione (usando seu
mouse) a clula D3, que contm a palavra "Frmulas".
Pare a gravao clicando no boto parar na Barra de Status.
O que voc tem feito foi gravar uma macro usando gravao de endereos de
clula absoluta. Eu explicarei mais so
voc faa agora gravar uma outra macro. Esta uma demonstr
Novamente selecione a clula B3, a clula
que voc esteja nesta clula quando voc fizer o prximo passo.
Selecione Gravar Macro na Barra de Status.
D macro o nome de "GravaoRelativa", e entrar com uma breve descri
na caixa de descrio. Selecionar OK. Clicar no boto gravao relativa para torn-l
ssionado, ligando assim a gr
Clique na clula D3 (a clula com a palavra "Frmulas") com o mouse.
Selecione Parar Gravao ( o boto ) na Barra de Status
At este ponto voc tem duas
c a "GravaoRelativa". Faa o seguinte para testar a macro GravaoAbsoluta:
Coloque o ponteiro de clula na Clula A1
Selecione Ferramentas, Macro, e execute a macro GravaoAbsoluta.
Repita o passo acima, mas primeiro coloque o ponteiro de clula em diferentes
clulas, Por exemplo, A5, C3, D7, etc..
O que acontece cada vez qu
D5. Esta a clula que voc sel
de endereo de clula absoluta sign
importa onde voc esteja na planilha.
Faa o seguinte para tentar a macro GravaoRelativa:
Col
Selecione Ferramentas, Macro, e d um duplo clique na macro
GravaoRelativa.
Repita o passo acima, mas com o ponteiro de clula nas clulas diferentes, Por
exemplo, A5, C3, D7, etc..
Bertolo Lies de VBA do Excel


29
O que acontece cada vez que voc rodar a macro e que o ponteiro de clula
move duas clulas para a direita. Isto o que voc fez quando voc gravou a macro
usando gravao relativa. Assim, gravao relativa de clula significa mover o ponteiro
da clula relativa para a clula ativa.
No importa qual meio de gravao voc escolheu, relativo ou absoluto, depende
da seleo de clula em atividade que voc quer gravar. Se a macro que voc est
em atividade, ento no faz diferena
qual co
ect
Sub

End
Microsoft Excel grava
e a macro for gravada usando gravao
col duas macros acima ilustram, declaraes diferentes
m do vrios comandos adicionais para ns
e de valor: Range, Select, e Offset. Este um dos benefcios
prin
discusso deles ser deixada
TA
V
a.
Se
acro.
o para atravesMeses
Fique certo de que o boto gravao
cione D2, e digite "Mar"
a pequena macro que entra com Jan, Fev, e Mar nas
C2, e D2 para voc. Vamos conferir a macro.
gravando no envolver qualquer seleo de clula
nfigurao est no lugar. Por exemplo, uma macro que apenas muda a estrutura
da pgina ou que imprime um arquivo no envolve selees de clula.
O que segue o que o cdigo de macro das duas macros acima se parece:
Sub Gr avacaoAbsol ut a( )
Range( " D3" ) . Sel
End Sub

Gr avacaoRel at i va( )
Act i veCel l . Of f set ( 0, 2) . Range( " A1" ) . Sel ect
Sub
Quando macros so gravadas usando gravao absoluta, o
as referncias de clula na macro que criada. S
relativa, ento gravada a distncia da clula destino em termos do nmero de linhas e
unas da clula ativa. Como as
tambm so gravadas, por exemplo, os mtodos Select e Offset.
As duas macros que gravamos tamb
qu provaro serem
cipais do gravador de macros - o fato que eles mostram a voc declaraes de
macros que provaro teis para voc em suas macros. A
por enquanto.
ARMADILHA DA GRAVAO ABSOLU
H uma armadilha com o uso de gravao absoluta que voc dever estar
consciente. Eu ilustrarei isto com o seguinte exerccio que insere Jan, Fev, e Mar como
ttulos de colunas.
para uma planilha em branco numa pasta
Selecione a clula B2
Verifique para ver se a gravao absoluta ou relativa. Faa isto examinando o
boto. Se ele no estiver apertado, ento a gravao est configurada para Absolut
ele estiver apertado, ento a gravao est configurada para Relativa. Clique o
boto se ele no estiver apertado
Selecione Ferramentas, Gravar Macro, Gravar Nova M
Defina o nome da macr
Selecionar OK para comear a gravao.
relativa no esteja pressionado.
Digite "Jan", selecione C2, digite "Fev", sele
Selecione B2, a clula contendo "Jan"
Parar gravao.
At este ponto voc tem um
clulas B2,
Bertolo Lio #03 O Gravador de Macros Excel 30


Apagar as B2, C2 e D2
Coloque o ponteiro de clula em B2
Execute a macro.
Como voc esperava, a macro escreve Jan em B2, Fev em B3, e Mar em B4.
Apagae a planilha e repeta o que est acim, mas coloca o ponteiro de clula em B5
antes de executar a macro. O que segue o resultado que voc obtm:
Note que Jan no est na clula B2, mas em B5. Se voc repetir o proceso mas
comeando numa clula diferente, por exemplo A1, a entrada de Jan termina naquela
clula. Por que isto aconteceu com a gravao absoluta ligada? Esperar-se-a a macro
colocar Jan na clula B2 como voc digitou-a pois a gravao absoluta estava ligada.
e
B2.
or mul aR1C1 = " Fev"
R
B era C2, e assim por diante. Se uma propriedade,
rmula tem R1C1 anexada nela, significa que voc deve
a. No nosso exemplo, estamos
eiro voc deve
gravador, e da digitar a entrada. Se a
r nela novamente com o mouse. Isto diz ao gravador
onar a clula. Se voc clicou na clula B2 mesmo que ela estivesse
selecio
vesMeses( )
Range( " B2" ) . Sel ect
Act i veCel l . For mul aR1C1 = " J an"
Range( " C2" ) . Sel ect
Act i veCel l . For mul aR1C1 = " Fev"
Range( " D2" ) . Sel ect
Act i veCel l . For mul aR1C1 = " Mar "
Range( " B2" ) . Sel ect
End Sub
Por favor, note que se voc estiver usando gravao relativa e j tiver o ponteiro
de clula onde voc quer comear suas entradas, voc no precisa selecionar a clula
primeiro.

O problema acima aconteceu porque a primeira ao que voc fez depois d
ligar o gravador foi digitar a palavra "Jan". Voc no selecionou primeiro a clula
O que segue o que a macro que voc gravou se parece:
Sub at r avesMeses( )
Act i veCel l . For mul aR1C1 = " J an"
Range( " C2" ) . Sel ect
Act i veCel l . F
ange( " D2" ) . Sel ect
Act i veCel l . For mul aR1C1 = " Mar "
Range( " B2" ) . Sel ect
End Sub
O R1C1 um resqucio da verso original do Excel. Nas verses anteriores do
Excel, macros trabalhavam se referindo s linhas e colunas por seus nmeros, por
exemplo, Coluna A era C1, coluna
neste caso a propriedade f
fornecer os endereos de clula numa frmula usando a notao R1C1. Se voc est
fornecendo apenas valores, ento no faz diferen
fornecendo valores.
Para gravao absoluta funcionar da maneira que voc quer, prim
selecionar uma clula, depois que voc ligou o
clula j estiver destacada, clica
para seleci
nada, sua macro ficar parecida com esta, e entrar com Jan em B2, etc..
exatamente como voc pretendia:
Sub at r a
Bertolo Fase #1: Desenvolvendo Procedimentos VBA em Excel 31


Lio 4: O
em, agora depois de praticar os diferentes exemplos ou seja, as Macros
desenvolvidas com o Gravador de Macros (GM), vamos, nas prximas lies,
observar os cdigos que foram gerados para elas. Recomendo a voc que salve o
Excel e volte a entrar, para que trabalhe limpo sem nenhuma macro, e comeando a
macro1 de novo.
Ambiente Amigvel do Visual Basic Editor do Excel
B
As observaes, testes e modificaes dos cdigos dos procedimentos VBA so
feitas numa ambiente de programao conhecido como Visual Basic Editor (VBE) do
Excel. um ambiente muito amigvel ao usurio. Nele tambm podemos escrever os
nossos procedimentos (macros e funes) a partir do zero, isto , sem a utilizao do
gravador de macros.
Os procedimentos VBA desenvolvidos no VBE, tornam-se parte da pasta na
qual eles foram desenvolvidos, e quando a pasta salva, os componentes do projeto
(macros, mdulos, userforms) so salvos ao mesmo tempo.
O Visual Basic Editor do Excel (VBE)
O VBE est integrado ao Excel e voc pode abr-lo de trs maneiras:
Selecione a guia Desenvolvedor, Visual Basic Editor, ou
Pressione ALT-F11, ou
Clique no cone na Barra de Ferramentas de Acesso Rpido do Excel.
O que segue com o que o Visual Basic Editor se apresenta. Seu editor deve
parecer ligeiramente diferente por causa das mudanas que voc fez ou porque
iferentes verses do Excel ter caractersticas diferentes: d

Bertolo Lio #04 O Visual Basic Editor - VBE 32




Do VBE voc pode ir para o Excel clicando no boto Excel no topo/esquerdo de
sua tela . Assim usando os dois botes voc pode navegar no VBE para o
Excel e, vice-versa.
Para inserir um mdulo usando os menus do Visual Basic, selecione (no editor
do VB) Inserir, Mdulo.



No inserir um mdulo de classe. Mdulos de classe so usados para
programao especializada de macros tais como indicar macros para serem rodadas
quando eventos tais como substituio de folhas ou pastas acontecerem. Um exemplo
de usar mdulos de classe encontrado numa lio posterior. O que segue ilustra um
mdulo que foi adicionado:
33 Bertolo Lies de VBA do Excel



O que est acima pode tambm parecer com o que segue se o mdulo de cdigo (a
janela do centro) for maximizada:
Bertolo Lio #04 O Visual Basic Editor - VBE 34



Project Explorer
J anela
de
Proprieda-
des
J anela de Cdigo

A janela esquerda superior chamada de janela Project Explorer. Ela mostra a
diferentes folhas de cada pasta aberta. A janela esquerda inferior a janela
Propriedades. Ela mostra as propriedades do objeto selecionado ou ativo. A janela do
lado direito chamada de janela de cdigo.

Para mudar o nome de um mdulo, clique no nome do mdulo na janela Project
xplorer. Da ento mostrar a janela Propriedades (pressione F4, ou selecione Exibir, E
J anela Propriedades, ou clique no boto que mostra a J anela de Propriedades na
barra de ferramentas padro). Na janela propriedades voc pode mudar o nome do
mdulo. Voc pode usar somente letras e nmeros para nomear os seus mdulos. No
deve ser usado espao ou caracterees especiais.
35 Bertolo Lies de VBA do Excel

NOMES DE PROJETOS

s folhas e mdulos associados com uma pasta dado o nome projeto. O nome
default "VBAProject". Se voc tiver mltiplas pastas abertas, ento voc poderia dar
a cada uma delas seu prprio nome de projeto. Isto lhe permite usar o Pesquisador de
Objeto (discutido mais tarde) para ver somente as macros de uma dada pasta. E, como o
Pesquisador de Objeto remove gradualmente nomes de projeto, nomes nicos so teis.
Para mudar o nome de projeto default de "VBAProject", selecione Ferramentas,
jeto, voc ver
xxx" no menu Propriedades, onde "xxx" o nome do projeto para o qual voc
parece:


Propriedades de VBAProject (Se voc j tiver mudado o nome de pro
"
mudou..) O dilogo que segue a



Voc pode ento mudar este nome para um novo nome contanto que o novo
nome no tenha espaos. O campo Descrio projeto do pode ser qualquer texto que
oc queira, e aparece no Pesquisador de Objeto quando o projeto selecionado. As
as posteriormente neste material. Se voc
Ajuda para uma explicao.
v
outras opes neste dilogo so discutid
stiver curioso agora, voc pode selecionar o boto e
Bertolo Lio #04 O Visual Basic Editor - VBE 36


ONDE COLOCAR AS MACROS

Voc pode colocar macros em qualquer pasta que voc queira. Muitos usurios
guardam suas macros numa pasta chamada PERSONAL.XLS. Esta pasta normalmente
encontrada no diretrio de inicializao do Microsoft Excel. Este diretrio chamado
XLSTART e quase sempre um subdiretrio de seu diretrio Microsoft Excel. O que
segue so os caminhos mais comuns para este diretrio:


C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\XLSTART

C:\EXCEL\XLSTART

C:\MSOFFICE\EXCEL\XLSTART

Se voc estiver rodando o Excel numa rede, voc deve precisar especificar um
diretrio de inicializao alternativo em Ferramentas, Opes, painel Geral

Para usurios da Apple e MacIntosh, a pasta de inicializao quase sempre
hamada "
vantagem de colocar macros na PERSONAL.XLS no seu diretrio de
icializao xcel
MENU DO VISU
DO SEUS MDULOS
:

c EXCEL STARTUP FOLDER" e normalmente uma pasta na pasta
SYSTEM:PREFERENCES.

A
in que este arquivo automaticamente ser aberto pelo Microsoft E
quando voc iniciar o Microsoft Excel. Deste modo, suas macros esto imediatamente
disponveis para o seu uso. E, quando voc gravar macros, voc pode especificar que a
gravao seja armazenada neste arquivo, como veremos na lio seguinte.

O AL BASIC EDITOR


O menu do Visual Basic Editor que estava no Excel 5 e 7 foi removido a partir do Excel
97. A personalizao de menu deve agora ser feita com o cdigo.

CONFIGURAN

No Visual Basic Editor, selecionando Ferramentas, Opes, mostra o seguinte dilogo
37 Bertolo Lies de VBA do Excel



O que est acima tambm mostra o setup (configurao) necessrio para os exerccios
da lio seguinte: Marque as caixas de verificao Auto-recuar , Autoverificar sintaxe e
Requerer declarao de varivel ue a
caixa de verificao, Interromper em erros no tr
. A seguir, selecione a guia Geral e certifique-se q
atados, est assinalada.


Se o seu setup nestas caixas for diferente, voc poder mud-los para este setup
para os exerccios iniciais da lio seguinte. O que segue explica em detalhes estas
opes:

Bertolo Lio #04 O Visual Basic Editor - VBE 38


Auto-recuar: Se o texto que voc est digitando recuado, quando voc dar um enter
ara ir prxima linha, a nova linha automaticamente ser recuada. Recuar o seu
digo ajuda juntar as declaraes relacionadas de modo que elas fiquem visivelmente
grupadas.
utoverificar sintaxe: Esta opo mostrar uma caixa de mensagem sempre que um erro
e sintaxe for detectado na declarao a ser editada e lhe dar uma breve mensagem
xplicando o problema da sintaxe. At este ponto, voc decidir qua a coisa certa a
zer desligar estas mensagens. No existe problema em se fazer assim. Entretanto,
icialmente deixe esta opo ligada, pois, as mensagens como voc ver sero parte da
o seguinte.
terromper em erros no tratados: Esta opo dever ser selecionada, ela far macro
arar de rodar sempre que ocorrer um erro no manipulvel. Fique certo de que esta
po esteja selecionada. Rotinas de manipulao de erros sero cobertas em detalhes
o captulo 10, Manipulando Erros. A seleo Interromper em erros no tratados
ncontra-se na ala Geral.
equerer declarao de varivel: Voc dever ligar esta opo. Quando esta opo
gada, a declarao Option Explicit do Visual Basic automaticamente colocada no
po de cada nova folha de mdulo. Esta declarao simplesmente diz ao Visual Basic
ue cada varivel deve ser declarada antes de funcionar a macro. Para declarar uma
arivel muito simples e ser coberto mais tarde.
fuso. E ela mantm a aparncia da capitalizao que voc der s variveis.
uaisquer declaraes que voc entrar num mdulo poder ser aps a declarao
Option
Os ajustes nas caixas de dilogo acim fazem o seguinte:
Recurs
de exibio de mdulo completo se esta opo est ligada, ento
das macros so visveis num mdulo em qualquer momento. Se ela estiver desligada,
sta opo, voc
ode ir a outras macros, clicando na caixa abaixo localizada na janela direita superior de
-las:
p
c
a

A
d
e
fa
in
li

In
p
o
n
e

R
li
to
q
v

Declarar variveis tem vrias vantagens. Ela ajuda a evitar erros acidentais e resultar
em con
Q
Explicit.

a

o de edio arrastar-e-soltar permite-lhe destacar texto e arrast-lo a uma nova
localizao no mdulo. Voc pode tambm arrastar texto aos painis imediatos ou de
viso (watch) (discutidos mais tarde)

Padro para modo
to
ento voc pode ver somente uma macro de cada vez. Se voc desligar e
p
um mdulo. Isto mostrar as diferentes macros, de modo que voc possa salt
39 Bertolo Lies de VBA do Excel
























Separador de Procedimentos Este desenha uma linha entre os diferentes mdulos
como ilustrado acima. muito til para ajud-lo separar visualmente uma macro da
utra. o

Clicando na ala Formato do editor (do dilogo Ferramentas, Opes) mostrar
o seguinte painel:

Bertolo Lio #04 O Visual Basic Editor - VBE 40



As opes deste painel controlam a aparncia do texto nos seus mdulos. A
fonte default Courier New. Entretanto, a fonte Fixedsys d uma aparncia mais
ousada e para muitos, mais fcil de ler que a Courier New. altamente recomendado
que voc mude sua fonte para Fixed sys. A tabela que segue mostra as cores de cdigo
Fundo
Aut Automtico*
nterrupo Automtico (preto) Amarelo
io Automtico (preto) Azul celeste
Texto de palavra-chave Violeta Automtico (branco)
Texto de identificador Automtico (preto) Automtico (branco)
Texto Normal Azul escuro Automtico (branco)
o de seleo significa aparncia de vdeo reverso.
copi-lo ou delet-lo. Deixando o ajuste em automtico em Primeiro plano e
no Plano de fundo, permite o Microsoft Excel, apresentar o texto selecionado texto na
aparnc o qu
que eu recomendo:

Tipo de Texto Frente (texto)

Texto de seleo omtico*
Texto de erro de sintaxe Vermelho Automtico (branco)
Texto de ponto de execuo Automtico (preto) Automtico (branco)
Texto de ponto de i
Texto de comentr

* Automtico em Text

Texto de seleo o texto que voc destacou com o cursor de modo que voc possa
recort-lo,
ia de vdeo reverso, o qual e a maioria dos processadores de textos fazem
quando voc seleciona texto.

Texto de erro de sintaxe o texto que Visual Basic no entende porque ele no est
escrito corretamente. Por exemplo, um parntese pode ter sido deixado de fora. Desde

Tex
iste um captulo mais tarde neste material
que
m desenha uma caixa ao redor da prxima declarao a ser executada.
lhe permitir depur-la interativamente. Isto lhe permite caminhar pelos
C n eiro plano p
torna-os bem mais legveis
t

Tex e para
oc coloca
que erros de sintaxe so ruins, colorir o texto em vermelho o melhor modo de destacar
o texto que deve ser corrigido. Este o ajuste default.
to de ponto de execuo a prxima declarao que ser executada se voc estiver
caminhando pela macro para depur-la. Ex
cobre a depurao de suas macros. O ajuste default maravilhoso quando o Visual
Basic tamb

Texto de ponto de interrupo uma entrada que voc pode fazer e que pausar sua
macro e
comandos, comeando no texto que foi destacado e declarado um ponto de interrupo.
o figurar o seu Prim ara automtico (preto) e seu Plano de fundo para
amarelo serve para enfatizar os pontos de interrupo, mas
que os ajustes default. (No se aborrea com os pontos de interrupo. Eles sero
tra ados em detalhes posteriormente. Apenas lembre-se que eles so teis).
to de comentrio qualquer texto que comece com aspas simples. Ele serv
umentar suas macros. Tenho percebido que usando um Plano de fundo verde d
os comentrios fora das declaraes reais do Visual Basic que so executadas.

41 Bertolo Lies de VBA do Excel

Texto de palavra-chave so palavras que o Visual Basic identifica como parte da
linguagem de programao. Alguns exemplos de tais palavras so If, Then, GoTo, And,
Next, e Error. Ajustando as palavras chave para um texto de cor azul escuro
erve para distinguir tais palavras melhor do que o ajuste default.
exto de identificador so os nomes de variveis que voc criou e muitos dos comandos
que voc usa. Por exemplo MsgBox um comando do Visual Basic que mostra uma
mensagem na tela. Ele tambm considerado texto identificador, muito do que voc
igitar ser assim. O ajuste automtico mostra MsgBox como texto negro.
xi entas
ro.
Is, Integer,
s

T
d

Texto normal so os nmeros, texto includos em aspas, e smbolos como =, +, *, -, ), e
(. Ajustando tais textos para azul escuro serve para distingu-los de outros textos.

BARRA DE FERRAMENTAS DO VISUAL BASIC A

stem vrias barras de ferramentas no Visual Basic Editor. A barra de ferram E
normalmente no topo do Visual Basic editor chamada de barra de ferramentas Pad
Ela se parece com o seguinte:

Se
ferr
s
voc mantiver o ponteiro do mouse sobre um boto, voc ver uma dica de
amenta que descreve a funo deste boto.
O primeiros trs botes, , fazem o seguinte:
Retornar ao Excel

Permite-lhe inserir um novo mdulo, procedimento (macro), ou a userform


(di logo). O pequeno tringulo direita deste boto mostrar uma lista drop down
destas escolhas.

Salvar o Arquivo
Os prximos trs botes, lhe permitem recortar, copiar, e colar textos.
boto binculos, O . Clicar nos binculos para mostrar uma caixa de dilogo
Localizar:

Bertolo Lio #04 O Visual Basic Editor - VBE 42


Os prximos dois botes, , ou o undo e o redo desfaz e refaz a ltima
ao de edio.
Os prximos trs botes nesta barra de ferramentas, lhe permitem fazer o
seguinte:
Rodar o procedimento ou mostrar o userform que voc est editando
Par

ar ou interromper uma macro que esteja rodando. Parar uma macro que est
rodando
O boto o boto modo de design (criao). Normalmente voc far muito
pouco uso deste boto, e pode ser ignorado.
Os prximos quatro botes na barra de ferramentas padro, lhe
ele estiver oculto. O Project Explorer a
nela no VB editor que mostra uma lista das diferentes folhas de planilhas de um
nela
orer
Mostrar o Pesquisador de Objeto (discutido mais tarde)

O
permitem fazer o seguinte:
Mostrar o Project Explorer se
ja
arquivo.
Mostrar a J anela Propriedades sempre que um objeto for selecionado na ja
Project Expl

Se num userform (dilogo), o ltimo boto mostra a caixa de ferramentas, que lhe
permite inserir objetos no formulrio.
ltimo boto na barra de ferramentas padro mostra o assistente de ajuda.

O Visual Basic Editor tem outras trs barras de ferramentas que voc pode tambm
usar:






Estas barras de ferramentas podem ser mostradas selecionando Exibir, Barra de
Visual Basic Editor. Uma curta descrio de cada boto
ostrada, se voc mantiver o cursor sobre o boto. Os botes da barra de ferramentas
mente se um deles estiver no Userform.
ferramentas dentro do
m
Userform esto ativos so

As caractersticas teis da barra de ferramentas Editar so:

Os botes recuar e no-recuar, que ajudam tornar seu cdigo mais fcil de ler.
43 Bertolo Lies de VBA do Excel

Os botes bloco de comentrio e bloco de no-comentrio, os quais mudam as
entrios e voltam novamente.
i b lmente cria um indicador
do criado um
b to executar, ue rod nar quaisquer teclas ou retornar
sua pasta.
rromp r, que
in e ste uma nica linha de cada
inspeo, que lhe perm
nhar a
DITANDO UM MDULO
oc tra c m o como num
er. Use o
ouse para andar pela folha de mdulo. Pressionando a tecla inserir indicadores entre
inserir
se, o seguinte menu pop-up aparecer:

declaraes do Visual Basic para com
O boto ndicador de ookmark (bandeiras), que rea
mark

(book ) para ajud-lo na navegao de seu cdigo. Uma vez ten


indicador, os outros botes lhe ajuda retornar para ela.

Os botes teis na barra de ferramentas Depurar so:

O o q a uma macro sem pressio
O boto inte e pra a sua macro.
Os bote que lhe permitem exe s step to p over cutar
vez.
Os botes de item examinar valores de variveis e outros
tens quando voc cami travs do seu cdigo

E

V en o texto numa folha de mdulo exatamente
processador de texto. Para adicionar linhas adicionais apenas pressione ent
m
e editar durante a digitao. Voc pode recortar, copiar, e colar usando os botes
nas suas barras de ferramentas, os menus de comandos Editar, ou as teclas (CTRL-X
para recortar, CTRL-C para copiar, e CTRL-V para colar). Tambm, se voc selecionr
texto e da clicar com o boto direito do mou


Bertolo Lio #04 O Visual Basic Editor - VBE 44


Se voc tiver destacado o texto, os itens de menu recortar e copiar estaro ativos.
seleo Definio (shift F2) em EXIBIR lhe permite saltar para macros (mais sobre
isto de variveis, e Inspeo de variveis
pida , so usadas na depurao de uma macro. A opo Indicadores, permite-lhe

r num mdulo o comando desfazer (undo). Este
ar, Desfazer, ou usando o boto desfazer na
rep mltiplas mudanas de edio. Voc pode tambm ligar o

uando voc digitar os comandos, voc poder digitar com letras minsculas. Isto
Se
soletradas corretamente, ou so palavras que o Visual Basic no reconhece.
Outra tcnica que til na edio de um mdulo recuar grupos de declaraes
relacio

Voc pode tambm usar o comando Substituir, disponvel selecionando
Substituir no menu Editar, para fazer as variaes. Entretanto, um cuidado: O ajuste
default para o comando substituir substituir todo o texto correspondente, se ele um
texto destacado texto ou no. Voc pode mudar estes ajustes e especificar qualquer um
do que segue:

Procedimento (a macro ou funo que voc est editando)

Mdulo

Todos os Mdulos

Texto Selecionado

Existem tambm vrias teclas de atalho que voc pode usar enquanto edita um
mdulo. O uso das teclas de atalho pode economizar tempo quando voc no tem de
manter o uso do mouse. O que segue so as teclas de atalho que eu acho mais teis:
A
, mais tarde). As selees Adicionar inspeo
r
inserir ou um ponto de interrupo ou um bookmark.
A tecla caracterstica de edita
est disponvel selecionando os menus Edit
Barra de Ferramentas Padro do Microsoft Excel. O comando desfazer pode ser usado
etidamente para desfazer
comando desfazer pressionando CTRL-Z no teclado.
Q
fornece os seguintes benefcios:

voc entrou com as declaraes corretamente, as palavras identificadas pelo
Visual Basic so convertidas para a case apropriada quando voc for prxima
declarao.

Quaisquer palavras que no forem convertidas para o case apropriado ou no so

nadas. Voc pode facilmente recuar sees de cdigo destacando-o e
pressionando a tecla Tab. Para remover recuos, pressione shift Tab. Linhas em branco
podem ser usadas para agruparem comandos relacionados. Isto os torna mais fceis de
leitura e seguir as macros. Voc ver muitos exemplos destas tcnicas atravs deste
material.

Bertolo Lies de VBA do Excel 45


Tecla de Atalho/Mouse Resultado

e Seleciona a palavra do cursor
RL-H me i par o top ulo
ulo
CTRL-down a ma macro abaixo
CTRL-up arrow a prxima macro acima

CTRL-F paine
CTRL-H Mostra

a por linha
Se voc mantiver apertada a tecla shift quando voc usar um dos comandos
reloca
oc pressionar CTRL-End, isto
elecionar todo o texto direita do cursor.
Duplo cliqu
CTRL-X Recorta o texto destacado para o clipboard
CTRL-C Copia o texto destacado para o clipboard
CTRL-V Cola o texto destacado do clipboard

Home
End Vai para o final da
Vai para o inicio da linha
linha

CT o Va a o do md
CTRL-End Vai para o final do md
rrow Vai para a pr xi
Vai para
Mostra o l localizar
o painel substituir
F1 Mostra ajuda de palavra destacada
F5 Roda a macro onde o cursor est localizado
F8 Caminha atravs de uma macro linh

o acima, isto selecionar todo o texto na direo que o cursor move. Por
exemplo, mantendo a tecla shift pressionada quando v
s
Bertolo Lio #04 O Visual Basic Editor - VBE 46


CARACTERSTICAS TEIS DE EDIO
Voc tambm tem as seguintes capacidades:

Recurso de edio de arrastar-e-soltar.
Qu inhas destacadas
so recuadas 4 espaos.
de ditar macro estiv o depurar. ENTRETANTO, isto
se sabe tem derrubado o Excel, tome cuidado.
SANDO TELAS SEPARADAS ENQUANTO EDITA

em de menu Dividir
ode ser mudado clicando e arrastando a barra de diviso. Voc pode tambm dividir as
a de rolamento.
PROT
ssoa.

Auto-complete - o Visual Basic editor sugere propriedades dos seus objetos para
voc. Pressionando a barra de espao, um ponto, parntese esquerdo, sinal de igual
ou tab inserir o nome sugerido.

ando voc destacar uma seleo e pressionar a guia Tecla, as l


Voc po e a enquanto er no mod

U
Se voc estiver fazendo uma poro de edio num mdulo, voc pode separ as
telas selecionando J anela, Dividir. Isto lhe permite trabalhar em duas sees separadas
de um mdulo. E, o tamanho das parties que foram criadas pelo it
p
telas clicando e mantendo-se sobre a barra de diviso logo acima da barr

EGENDO SUAS MACROS

Voc pode evitar os outros de acessarem o cdigo selecionando no Visual Basic
Editor Ferramentas, Propriedades de VBAProject. No dilogo que aparece, selecione a
ala Proteo e ajuste a proteo do jeito que voc quiser e, tambm, entre com uma
senha. Por favor, note que crackers de senhas existem e que extraem uma determinada
senha, assim tal proteo no impedir uma determinada pe


47 Bertolo Lies de VBA do Excel

OPERADORES MATEMTICOS E OUTROS OPERADORES
ntrada. Por exemplo,
so feitas a seguir, Tambm na ordem encontrada.
ntrolar a ordem dos clculos.
er resto fracionrio
o denominador so
fraes, eles primeiro sero arredondados para
antes da diviso ser feita.
od Retorna somente o resto inteiro de uma operao diviso. O numerador e

e 6.8 mod 3.4 = 1

Para fazer clculos numa macro, voc usa os operadores matemticos normais:
+, -, *, e /.
A multiplicao e diviso so feitas primeiro na ordem enco
10/2*5 25. Adio e subtrao
oc pode usar parnteses para co V
Alm dos operadores matemticos acima, voc pode tambm usar os seguintes
operadores, nas suas declaraes Visual Basic:
Operador Explicao / Exemplo
^ Exponenciao. 3^2 = 9
\ Diviso inteira.
Qualqu
descartado, deixando
um resultado inteiro. Por exemplo, 10 \ 3 = 3.
Se o numerador e
inteiro
M
o denominador so primeiro arredondados. Exemplos: 5 mod 2 =
1

Se voc tentar fazer clculos usando um valor que o Visual Basic considera ser
um texto string, ele dar a seguinte mensagem de erro:



Por exemplo, "Miami" * 3 pode no ser interpretado pelo Visual Basic assim a
nsagem de erro acima mostrada. Voc pode determinar qual dos valores numa
expresso matemtica causou um erro usando o modo depurar do Visual Basic para
examinar a expresso para texto strings, que qualquer valor entre aspas duplas.
Depurao ser
me
coberta no ltimo captulo.
Se o operador adio (o sinal de m is) usado e todos os valores a serem
dicion
a
a ados so textos, o Visual Basic no mostrar erro. Ao invs disso, ele
concatenar os valores.
Bertolo Lio #04 O Visual Basic Editor - VBE 48


Qualquer coisa, texto ou nmeros, entre aspas duplas considerado uma string
texto. Por exemplo, "3" + "5" + "2" torna-se "352", no o nmero 10. Se um dos valores
na expresso um nmero e os outros so textos, uma mensagem de erro do tipo
combin
binar duas strings de texto
juntas.
torna-s
strings, voc deve
colocar
ao mal sucedida ser mostrada.

USANDO & PARA CONCATENAR STRINGS

Existiro inmeras vezes em que voc precisar com
Isto poderia ser feito usando o operador de concatenao, o ampersand (&). Por
exemplo:

"Trabalho" & "E" & "Mais Trabalho"

e "Trabalho E Mais Trabalho"

Por favor, note que quando voc usar o & para combinar
um espao na frente dele e depois dele. Se voc no colocar, poder obter um
erro. Note que aspas duplas so usadas para cercar o texto. Isto indica que ela um
dado e no instrues para o Visual Basic.

1008 & 44 torna-se: "100844"

972 & " Main Street" torna-se "972 Main Street

Note que os resultados acima so agora considerados strings (representadas por
estarem entre aspas duplas). Se voc precisar converter uma string para um nmero,
ento a funo Val (discutida posteriormente) far isto: Val("100844") conduz 100844
a nmero. Val("972 Rua Principal") torna 972. O texto truncado.

SEPARANDO LINHAS COM O CARACTERE CONTINUAO

Se uma declarao Visual Basic muito longa par ser mais facilmente vista
numa nica linha, ento um espao
Voc pode tambm concatenar nmeros e texto. Por exemplo:

e um caractere sublinhado ( _ ) colocado no final
de uma linha para permitir a declarao continuar na prxima linha. Esta uma
conveno do Visual Basic padro, e que voc pode us-la quando escrever macros.
Voc pode usar at nove sublinhados numa declarao nica. Voc no precisa separar
nhas se voc no quiser. Eu tenho escrito linhas que so extremamente longas. A
il de l-las!
" I st o umexempl o de cont i nuao de uma decl ar ao. "
li
desvantagem de se fazer isto que mais difc

O que segue ilustra o uso de um caracteree de continuao:
MsgBox = _

Bertolo Lies de VBA do Excel 49

Em alguns lugares o caractere de continuao pode ser usado antes ou aps
sinal de igual, operadores matemticos (+,-, *,/), nomes de variv
o
eis, e seguindo o ponto
ue junta duas palavras chaves. Voc ver muito poucas ilustraes do caractere de
pois as linhas deste material so limitadas nos
omprimentos!

l onga mensagem"
Para separar corretamente esta mensagem, voc precisa usar a seguinte
abordagem:
gBo
separ ar
'. E, cada conjunto de palavras que estiver entre aspas duplas.

acr o
Pl as linhas de comentrios como discutido anteriormente neste

Um
'***************************************************
arar uma dada macro de outra, nas ilustraes deste
aterial. Voc pode usar a mesma abordagem nos seus mdulos. Linhas separadoras
o aut
imprimir seu cdigo.
E DE UMA MACRO OUTRA
ir que tm muitas macros. E que voc
o uma poro de tempo indo de uma macro a outra. Entretanto, existem
rias maneiras muito rpidas de ir de uma macro para outra. O modo mais simples
q
continuao neste material,
c
Se voc usar o caractere de continuao para separar o texto de uma longa
mensagem, como mostrado pelo que segue, voc obter um erro.
MsgBox = " I st o umexempl o de como no separ ar _
uma
Ms x = " I st o umexempl o de como separ ar " & _
" uma l onga mensagem"
Note que existe espao seguindo a palavra ' ' para separ-la da palavra
'uma

INHAS DE COMENTRIOS L
As linhas de comentrios nas macros comeam com uma aspas simples ( ' ).
Para enfatizar mais os comentrios nas vrias macros ilustradas neste material, eles so
negritados e so sublinhados. Por exemplo:
' I st o com o que se par ece uma l i nha de coment r i o numa m
dest e mat er i al
Embora voc no possa sublinhar comentrios num mdulo, possvel mudar o
ano de fundo e a cor d
captulo para atingir um efeito semelhante nos seus mdulos.
a linha de comentrio como a seguinte:


Freqentemente usada para sep
m
s omaticamente adicionadas tela entre macros. Se por alguma razo voc no
tiver estas barras separadoras, verifique as opes no VBA Editor. Linhas separadoras
no so impressas quando voc

MOVENDO-S

Mais cedo ou mais tarde, voc descobr
est gastand
v
usar CTRL-seta para cima ou CTRL-seta para baixo se as macros esto no mesmo
mdulo.
Bertolo Lio #04 O Visual Basic Editor - VBE 50


Outra abordagem para se mover de macro a macro usar o Pesquisador de
er oculta. Para
onseguir o Pesquisador de Objeto, voc pode clicar no boto Pesquisador de Objeto
Objeto. O Pesquisador de Objeto permite-lhe ver uma lista de macros em cada mdulo e
da ir diretamente a uma macro, mesmo se a folha de mdulo estiv
c
na barra de ferramentas Padro do Visual Basic. Ou, selecionar Exibir, Pesquisador
Ou, apenas pressionar a tecla F2. O que de Objeto enquanto voc estiver num mdulo.
segue aparece:


Na caixa Biblioteca/Pasta voc pode selecionar qualquer pasta aberta pelo nome
do seu projeto. O nome default para um arquivo "VBAProject". Uma vez tendo
selecionado um projeto, os mdulos daquele projeto/pasta sero listados na janela do
ado esquerdo. Quando voc selecionar um mdulo, as ma l cros e funes do mdulo
na caixa do lado direito. Se voc der um duplo clique sobre
o ir diretamente a ela clicando sobre o boto Show.
selecionado so mostrados
ma macro, voc pode ent u
O Pesquisador de objeto fornece, portanto, todas as classes disponveis no VBA
com suas respectivas propriedades e mtodos. Na janela Membros do objeto temos as
funes, os eventos e as propriedades daquele objeto. As funes so representadas pelo
pequeno tijolo em movimento. Os eventos so representados pelo raio e as
propriedades, pelo pequeno carto segurado por uma mo.
Alm dos objetos j instalados, o VBA ainda contm referncias a bibliotecas de
terceiros e da prpria Microsoft. Por exemplo, se desejarmos criar uma conexo a um
banco de dados Access, na biblioteca inicial no existe o objeto Database ou Recordset.
Porm, podemos adicionar referncias a outros objetos. Para adicionar referncias a
utros objetos, clique em Ferramentas/Referncia. o
Uma caixa de di
esejarmos criar conexe
logo contendo as referncias aberta. Como exemplo, se
s a banco de dados diretamente podemos utilizar a referncia
o Mic
d
a rosoft DAO 3.6 Object Library, como mostra a figura abaixo.
51 Bertolo Lies de VBA do Excel

Ao acrescentarmos a referncia a esta biblioteca temos nossa disposio todas
as classes da biblioteca adicionada. Isso facilita, em muito, a criao de objetos, como
formulrios, onde necessitamos de uma conexo direta ao banco de dados.
Na mesma lista da figura abaixo, ainda temos vrias outras referncias que no
foram selecionadas. O nmero de classes disponveis to grande que improvvel que
haja a necessidade de voc criar a sua prpria classe no VBA.


MOVENDO DE UM MDULO A OUTRO

Voc move de um mdulo a outro com duplo clique num mdulo ou userform listado
no Project Explorer:



Bertolo Lio #04 O Visual Basic Editor - VBE 52


Se o Project Explorer no est visvel, clicando no boto Project Explorer na
ramentas Padro ou pressionando Ctrl-R a mostrar.
RES
dulo.
Isto mais facilmente feito usando os botes na barra de ferramentas Editar. Voc pode
a
barra de
Editar
barra de fer

USANDO INDICADO

O Visual Basic Editor lhe d a habilidade de adicionar bookmarks a um m
ento saltar de bookmark a bookmark. Adicionando bookmarks e ir de bookmark
bookmark mais facilmente feito usando os ltimos quatro botes na
ferramentas :


Mantendo o ponteiro do mouse sobre um boto, ele descreve o que o boto faz.
Se esta barra de ferramentas no visvel, voc deve mostr-la s

elecionando Exibir,


Se voc tiver barras de ferramentas flutuantes numa pasta, quando voc indicar ao
o acontecer
clicando nela joga voc de volta ao Excel. Existem vrias maneiras de contornar:
lutuantes. Isto lhe permite usar a tecla Alt-
no ser uma
Us
lib
selecionar d
Use a Barra de Tarefas do Windows quando quiser permutar do Excel para o Visual
Basic Editor

UMA MACRO ILUSTRATIVA

Para ilustrar a edio num mdulo, a maior parte da formatao do texto acima,
e mostrar-lhe quo simples uma macro pode ser, crie uma nova folha de mdulo e entre
com as seguintes linhas nela.

Sub Al ( )
' Est a macr o di z al ao mundo
MsgBox " Al mundo! "
End Sub

Se uma caixa de erro aparecer quando voc estiver digitando esta macro e a linha estar
em vermelho, voc tem de redigitar a linha e ela precisa ser corrigida.
Barra de ferramentas de dentro do VBA editor.
PROBLEMAS DAS BARRAS DE FERRAMENTAS
Visual Basic Editor usando ALT-F11, as barras de ferramentas flutuantes do Excel
podem permanecer visveis. Isto um bug claro. E, ele n
consistentemente. Se a barra de ferramentas do Excel visvel no Visual Basic Editor,
Reduza todas as barras de ferramentas f
F11 para mover para trs e para frente. Entretanto, reduzir deve
abordagem aceitvel.
e ALT-TAB para ir ao editor. Se voc mantiver a tecla ALT apertada e no
er-la, voc pode confirmar que voc est indo para o editor, ou continue a
as aplicaes abertas pressionando a tecla ALT.
Bertolo Lies de VBA do Excel 53


As palavras Sub e End Sub so usadas pelo Visual Basic para indicar o comeo e o fi-
nal de uma macro. Al o nome da macro. O parnteses so exigidos.

A linha:
' Est a macr o di z al par a o mundo
uma linha de comentrio pois ela comea com aspas simples.
A linha:
MsgBox " Al mundo! "

diz ao Visual Basic mostrar a seguinte caixa de mensagem.


Assumindo que voc tenha modificado o esquema de cores no painel de formato
o mdulo pelas minhas recomendaes, voc ver que Sub e End Sub, estaro
coloridas em violeta indicando que elas so palavras chave para o Visual Basic. A linha
Esta macro diz al para o mundo" mostrada com um Plano de fundo azul celeste para
indicar que ela uma linha comentrio. A palavra MsgBox est em preto, pois ela

a el
duplas, e os parnteses so coloridos em azul escuro par indicar que eles so textos
normais em oposio a uma instruo ou comando.
coloque o cursor em qualquer
linha da macro e ento pressione a tecla F5 ou clique no boto da barra de ferramentas
e roda uma macro (o boto com o tringulo azul). Usando uma
s, v em frente e rode a macro acima.
lmente voc vai querer fazer trocar uma macro que
da vez que a macro for escrita em Ingls, trocar macros
a do arquivo contendo as macros.
o ou Francs, e a
ling Excel diferente, voc ainda poder trocar arquivos.
Entretanto, voc precisa ter arquivos especiais do Microsoft que lhe permitam rodar as
arquivos so chamados de arquivos biblioteca do objeto. Voc pode baixar
ivos do site de Internet da Microsoft ou contatar a Microsoft por eles.
Cer
d
"
uma palavra de identificao. Ela representa uma instruo para o Visual Basic dizendo
e para mostrar uma mensagem. Finalmente na frase "Al mundo! ", as aspas

Para rodar esta macro muito simples: apenas
do Visual Basic qu
destas duas abordagen

TROCANDO MACROS

Uma das coisas que fina
voc escreveu com algum. To
muito simples. Voc deve dar ao usurio uma cpi
Se a macro est escrita numa outra linguagem, tal como Alem
uagem da sua verso do
macros. Os
os arqu
tifique-se tambm de obter as instrues de instalao.

Bertolo Lio #04 O Visual Basic Editor - VBE 54


SU

tempo para digitar os exemplos, mesmo se elas so somente trs ou quatro linhas,
den
Basic e
mais voc usar o Visual Basic, mais simples ele se tornar.
M RIO DA LIO
Este material lhe fornecer muitos exemplos de macros. Voc poder levar
tro de um mdulo e test-los fora. Isto lhe dar experincia valiosa em usar Visual
em corrigir erros que vem dos erros de digitao! Voc encontrar que quanto
Bertolo Fase #1: Desenvolvendo Procedimentos VBA em Excel 55


Lio 5: Modificando Macros no Visual Basic Editor
o
Para ob
ear a gravao da Macro
amos comear esta lio criando uma macro e depois observando e modificand
seus cdigos:
servar os cdigos de uma macro devemos de seguir os seguintes passos:
1. Primeiramente translade-se clula A5 antes de com
2. Pressione o boto Gravar nova macro
V
na barra de Status do Excel:

O
macro
s
r para aceitar o
valor na clula
a gravao da macro pressionando o boto Parar gravao
Excel mostra a caixa de dilogo Gravar macro.
3. Na opo Tecla de atalho escreva a letra R (em maisculo), portanto a
er chamada com o Ctrl +Shift+R
4. Pressione o boto OK. O Excel inicia a gravao da Macro1
5. Mude-se para a clula A1 e escreva Bertolo, depois pressione Ente
6. Pare na barra de
Status do Excel.

O Excel ter gravado os passos e ter gerado um cdigo. Observemo-lo:
7. Pressione a tecla Alt +a tecla de funo F11 (Alt +F11). O Excel nos leva a
Editor de Visual Basic.
o
s:
u Exibir e escolha a opo Project Explorer
Exibir e escolha a opo J anela de propriedades
evem estar sempre ativadas j que delas dependem tudo que
8. Ative as seguintes caixas ou janela
D um clique no men
D um clique no menu
Estas duas opes d
vamos fazer.
Bertolo Lio #05 Modificando Macros no Visual Basic Editor

56





1. Na janela Projeto VBAProject d um duplo clique em Mdulos ou simplemente
se
sic o
t ol o( )
el ect
" Ber t ol o"
. Sel ect
s assombrados. A seguir damos-lhes uma

pressione o sinal de + que aparece na opo Mdulos. Sob as janelas de Mdulos
ativar a opo Mdulo1
2. D um duplo clique em Mdulo1. Ser mostrado no Editor de Visual Ba
cdigo da macro que gravamos, da seguinte forma:
Sub Ber
'
' Ber t ol o Macr o
'
' At al ho do t ecl ado: Ct r l +Shi f t +R
'
Range( " A1" ) . S
Act i veCel l . For mul aR1C1 =
Range( " A2" )
End Sub

O que significa isto, perguntaremos n
e fez o Excel: explicao do qu
Bertolo Lies de VBA do Excel 57

Sub e End Sub indicam o incio e o final do procedimento da Macro1
e aparecer com um apstrofe , indica que no se levar em conta, pois
,
").Select - Indica que a primeiro coisa que fizemos ao gravar a macro
screver na clula em
o valor de texto
Tudo o qu
somente texto ou comentrios e esses textos devem aparecer numa cor, ou seja
a cor verde.
Range(" A1
foi transladarmos clula A1.A ordem Range nos permite transladarmos a ( ou
ativar) uma clula
ActiveCell.FormulaR1C1 ="Bertolo" - Isto indica que se e
que se encontra (clula ativa), Bertolo. Tudo o que aparece
lor de texto. A ordem ActiveCell.FormulaR1C1
lula A2. Isto se
ve a que ao escrevermos o nome Bertolo em A1 pressionamos Enter e ao dar
b M
' Mac
'
' At al ho do t ecl ado: Ct r l +Shi f t +R
Ra " )
Ac
Range( " B1" ) . Sel ect
Act i veCel l . For mul aR1C1 = " Cat anduva, 07 de J ul ho de 2007"
Range( " C1" ) . Sel ect
Act i veCel l . For mul aR1C1 = " 31- 2- 47- 13"
Range( " D1" ) . Sel ect
Act i veCel l . For mul aR1C1 = " Fest a do Peo"
Range( " E1" ) . Sel ect
Act i veCel l . For mul aR1C1 = " FAFI CA"
End Sub
Assim terminada alterao do cdigo e quando voltares ao Excel e executares
a macro com Crtl + Shift + R, ters o seguinte:
Em A1 se escrever Bertolo
Em B1 se escrever Catanduva, 07 de Julho de 2007
Em C1 se escrever 31-2-47-13
Em D1 se escrever Festa do Peo
entre aspas sempre ser um va
nos permite escrever um valor na clula ativa.
Range(" A2").Select :Outra vez indicamos que se translade c
de
Enter pulamos para a clula A2.
Para compreender melhor, alteraremos o cdigo dentro do Editor de Visual Basic.
O que acreditas que se passar com nossa Macro?
Su acr o1( )
'
r o1 Macr o
' Macr o gr avada em7/ 7/ 2007 por Ber t ol o
'
nge( " A1 . Sel ect
t i veCel l . For mul aR1C1 = " Ber t ol o"
Bertolo Lio #05 Modificando Macros no Visual Basic Editor 58

Em E se escrever FAFICA 1
s ue no menu Arquivo e elegendo a opo
o deseja sair por completo, d um clique no boto Microsoft Excel
edi
As im que salvarmos do editor, dando um cliq
Fechar e voltar ao Microsoft Excel (Alt +Q).
Se n
que se encontra ativado na barra de ferramentas Padro, e quando desejar voltar ao
tor d um clique no boto Microsoft Visual Basic que se encontra na Barra de
Ferramentas de Acesso Rpido.
Agora j que saimos do Visual Basi
macro atravs de Ctrl + Shift + r e vejamos
Parece simples ou no? Claro, necessitamos prat
antes de passarmos adiante. Outra coisa, n
em tuas macros porque se enrolars, p
Prtica
Gere uma Macro que escreva um no
Cdigo.
Gere uma Macro que escreva um nome em uma clula e o Centralize. Observe
Gere uma Macro que escreva um nome em uma clula e troque o tamanho d
20 pontos. Observe o Cdigo.
Vejamos alguns cdigos muito comuns:
Trasladar-se a uma Clula
Range( " A1" ) . Sel ect
Escrever em uma Clula
Act i vecel l . For mul aR1C1=" Ber t ol o"
Letra em Negrito
Sel ect i on. Font . Bol d = Tr ue
Letra Cursiva (Itlico)
Sel ect i on. Font . I t al i c = Tr ue
Letra Sublinhada
Sel ect i on. Font
Central
c e estamos no Excel de novo executemos a
os resultados de nossa modificao.
icar bastante para dominar isto,
o trates de gerar cdigos muito complexos
ouco a pouco se chegar ao longe.
me em uma clula e o ponha em negrito e observe o
o Cdigo.
a letra para
. Under l i ne = xl Under l i neSt yl eSi ngl e
izar o Texto
Wi t h Sel ect i on
. Hor i zont al Al i gnment = xl Cent er
End Wi t h
Alinhar esquerda
Wi t h Sel ect i on
Bertolo Lies de VBA do Excel 59

. Hor i zont al Al i gnment = xl Lef t
End W
eita
A1" ) , Or der 1: =xl Ascendi ng,
Fal se, Or i ent at i on: =xl TopToBot t om
" A1" ) , Or der 1: =xl Descendi ng,
s, _
om: =1, Mat chCase: =Fal se, Or i ent at i on: =xl TopToBot t om
: =xl P
r t
i t h
Alinhar Dir
Wi t h Sel ect i on
. Hor i zont al Al i gnment = xl Ri ght
End Wi t h
Tipos de Letra (Fonte)
Wi t h Sel ect i on. Font
. Name = " AGar amond"
End Wi t h
Tamanho de Letra (Tamanho de Fonte)
Wi t h Sel ect i on. Font
. Si ze = 15
End Wi t h
Copiar
Sel ect i on. Copy
Colar
Act i veSheet . Past e
Cortar
Sel ect i on. Cut
Ordenar Ascendente
Sel ect i on. Sor t Key1: =Range( "
Header : =xl Guess, _
Or der Cust om: =1, Mat chCase: =
Ordenar Descendente
Sel ect i on. Sor t Key1: =Range(
Header : =xl Gues
Or der Cust
Buscar
Cel l s. Fi nd( What : =" Bertolo" , Af t er : =Act i veCel l ,
LookI n: =xl For mul as, LookAt _
ar t , Sear chOr der : =xl ByRows, Sear chDi r ect i on: =xl Next ,
Mat chCase: = _
Fal se) . Act i vat e
Inserir Arquivo
Sel ect i on. Ent i r eRow. I nse
Eliminar Arquivo
Sel ect i on. Ent i r eRow. Del et e
Inserir Coluna
Sel ect i on. Ent i r eCol umn. I nser t
Eliminar Coluna
Bertolo Lio #05 Modificando Macros no Visual Basic Editor 60

Sel ect i on. Ent i r eCol umn. Del et e
Abrir uma Pasta
Wor kbooks. Open Fi l ename: =" C: \ Meus document os\ video safe 3.xls
Gravar um Pasta
Act i veWor kbook. SaveAs Fi l ename: =" C: \ Meus document os
Fi l eFor mat _
: =xl Nor mal , Passwor d: =" " , Wr i t eResPasswor d: =" " ,
ReadOnl yRecommended: = _
Fal se, Cr eat eBackup: =Fal se
Esses seriam alguns cdigos muito comuns no Excel, mas s
gerar mais cdigos de outras opes, uma questo de que os ocupe

EXTERMNIO DO GRAVADOR DE MACRO
Um dos problemas com macros criados pelo gravador de macro
resultantes incluem muito mais declaraes do que voc pr
declaraes que voc no quer. O exerccio que
para re
"
\ piscis.xls" ,
e voc deseja pode
.
que as macros
ecisa. E, freqentemente
segue ilustra isto gravando uma macro
mover o cabealho e rodap:
Selecionar o boto Gravar nova macro na barra de Status do Excel. A
configurao de referncias relativa ou absoluta no afetar esta macro.
Especificar "mudarConfiguracao" como o nome

da macro e da selecionar OK
ilha e clicando na
para comear a gravao.
Selecionar a guia Layout da Pgina, o grupo Opes de Plan
setinha a janela Configurar Pgina aparece, nela sele
Cabealho/rodap
cionamos a ala

Bertolo Lies de VBA do Excel 61




sair do painel de configurao de
pg
vao
Mudar o cabealho do nome da folha para nenhum. (Ou, selecionar "(nenhum)"
na caixa pull down, ou selecionar cabealho personalizado e deletar o cabealho.
Fazer a memsma coisa para o rodap
Selecione OK para sair deste painel, e OK para
ina.
Selecionar o boto Parar gra na barra de Status do Excel. V macro
digo. Ele se parecer com o seguinte:
Set up. Pr i nt Ar ea = " "
PageSet up
= " "
Appl i cat i on. I nchesToPoi nt s( 0. 75)
ppl i cat i on. I nchesToPoi nt s( 1)
oPoi nt s( 0. 5)
n = Appl i cat i on. I nchesToPoi nt s( 0. 5)
. Pr i nt Not es = Fal se
que voc gravou e observe nela o c
Sub mudar Conf i gur acao( )
Wi t h Act i veSheet . PageSet up
. Pr i nt Ti t l eRows = " "
. Pr i nt Ti t l eCol umns = " "
End Wi t h
Act i veSheet . Page
Wi t h Act i veSheet .
. Lef t Header = " "
. Cent er Header = " "
. Ri ght Header
. Lef t Foot er = " "
. Cent er Foot er = " "
. Ri ght Foot er = " "
. Lef t Mar gi n = Appl i cat i on. I nchesToPoi nt s( 0. 75)
. Ri ght Mar gi n =
. TopMar gi n = A
. Bot t omMar gi n = Appl i cat i on. I nchesToPoi nt s( 1)
. Header Mar gi n = Appl i cat i on. I nchesT
. Foot er Mar gi
. Pr i nt Headi ngs = Fal se
. Pr i nt Gr i dl i nes = Tr ue
Bertolo Lio #05 Modificando Macros no Visual Basic Editor 62

. Pr i nt Qual i t y = 300
. Cent er Hor i zont al l y = Fal se
. Cent er Ver t i cal l y =
. Or i ent at i on = xl Por
Fal se
t r ai t
xl Paper Let t er
t omat i c

adores da Microsoft usam esta
mrica do Visual Basic. Por exemplo,
e voc executou o seguinte cdigo:
uma caixa de mensagem aparecer com o nmero 1 na caixa de
. Dr af t = Fal se
. Paper Si ze =
. Fi r st PageNumber = xl Au
. Or der = xl DownThenOver
. Bl ackAndWhi t e = Fal se
. Zoom= 100
End Wi t h
End Sub
No que est acima voc viu vrios valores tais como "xlPortrait" ou
"xlAutomatic" ou "xlPaperLetter". Os program
conveno quando se referem a uma constante nu
s
Sub ShowConst ant Val ue
MsgBox xl Por t r ai t
End Sub
Ento
mensagem.
Mesmo que voc faa somente duas mudanas em sua configurao de pgina, o
gravador de macro gerou 34 linhas de cdigo! Isto ocorreu porque o Microsoft Excel
grava todas as configuraes da pgina e no apenas aquelas que voc mudou. Estas
definies so as propriedades do objeto PageSetup. Quantidades semelhantes de
te que esta quantidade de
A maioria das macros que voc
macro gerar muito mais cdigo que voc
omandos que voc estava inconsciente deles! Por exemplo, a
ando With. O comando With evita voc de ter de digitar
em cada linha. Voc pode aprender mais sobre o
or na palavra With e pressionando F1. Isto o levar
omando tambm discutido em detalhes em
igo como resultado da gravao de uma macro,
que voc precisar. Por exemplo, o que segue
lhos e rodaps numa folha de
Set t i ngs( )
W
cdigo resultam com muitas outras gravaes. Por favor, no
cdigo em excesso provavelmente um caso extremo.
gravar no ser esta coisa feia.
Um lado positivo do gravador de
encontra freqentemente c
macro acima ilustra o com
novamente o nome PageSetup
comando With colocando o curs
ajuda Visual Basic deste comando. Este c
lies posteriores.
Quando voc obtiver muito cd
voc dever manter somente os pedaos
todo o cdigo que voc precisa a fim de deletar os cabea
planilha:

Sub Change
i t h Act i veSheet . PageSet up
. Lef t Header = " "
. Cent er Header = " "
. Ri ght Header = " "
. Lef t Foot er = " "
. Cent er Foot er = " "
. Ri ght Foot er = " "
Bertolo Lies de VBA do Excel 63

End Wi t h
End Sub
usada num exerccio Como a macro acima ser
excesso de cdigo de modo que sua
LIMPANDO O CDIGO DO GRAVADOR D
O que segue outra macro que foi gravada
colocar em vrias entradas de texto e colocar caixas ao re
entradas:
Sub Macr o1( )
seguinte, voc dever deletar o
macro se parea com a macro acima.
E MACRO
pelo gravador de macro. Sua tarefa
dor das clulas direita destas
( " A2" ) . Sel ect
Act i veCel l . For mul aR1C1 = " Descr i o de Caso: "
l ect
Sel ect i on. Bor der s( xl Lef t ) . Li neSt yl e = xl None
Sel ect i on. Bor der s( xl Ri ght ) . Li neSt yl e = xl None
Sel ect i on. Bor der s( xl Top) . Li neSt yl e = xl None
Sel ect i on. Bor der s( xl Bot t om) . Li neSt yl e = xl None
Sel ect i on. Bor der Ar ound Wei ght : =xl Thi n, _
Col or I ndex: =xl Aut omat i c
Range( " A4" ) . Sel ect
Act i veCel l . For mul aR1C1 = " Nome do Ar qui vo"
Range( " C4" ) . Sel ect
Sel ect i on. Bor der s( xl Lef t ) . Li neSt yl e = xl None
Sel ect i on. Bor der s( xl Ri ght ) . Li neSt yl e = xl None
Sel ect i on. Bor der s( xl Top) . Li neSt yl e = xl None
Sel ect i on. Bor der s( xl Bot t om) . Li neSt yl e = xl None
Sel ect i on. Bor der Ar ound Wei ght : =xl Thi n, _
Col or I ndex: =xl Aut omat i c
Range( " A6" ) . Sel ect
Act i veCel l . For mul aR1C1 = " Nome da Pl ani l ha"
Range( " C6" ) . Sel ect
Sel ect i on. Bor der s( xl Lef t ) . Li neSt yl e = xl None
Sel ect i on. Bor der s( xl Ri ght ) . Li neSt yl e = xl None
Sel ect i on. Bor der s( xl Top) . Li neSt yl e = xl None
Sel ect i on. Bor der s( xl Bot t om) . Li neSt yl e = xl None
Sel ect i on. Bor der Ar ound Wei ght : =xl Thi n, _
Col or I ndex: =xl Aut omat i c
End Sub
O que est acima consiste de 24 linhas de cdigo. Compare-o macro seguinte
que faz a mesma tarefa com somente 4 linhas de cdigo. Tambm, note que nenhuma
Selects foi usada, o que desacelera suas macros. Reduzindo o nmero de linhas de
cdigo torna suas macros mais legveis e mais rpidas.
Sub A_Shor t er _Macr o( )
Range( " A2" ) . For mul aR1C1 = " Descr i o de Caso: "
Range( " A4" ) . For mul aR1C1 = " Nome do Ar qui vo "
Range( " A6" ) . For mul aR1C1 = " Nome da Pl ani l ha "
Range( " C2, C4, C6" ) . Bor der Ar ound Wei ght : =xl Thi n
End Sub

Range

Range( " C2" ) . Se
Bertolo Lio #05 Modificando Macros no Visual Basic Editor 64

Outro Exerccio

muito importante esta lio. Recomendo que voc, atravs de sua criatividade,
invente vrias coisas para serem feitas no Excel usando o Gravador de Macros (GM) e
da interpretando os cdigos gerados. Acredito que assim que se aprende esse assunto.
Vamos agora modificar um procedimento VBA que voc criou com o gravador de
macro anteriormente. Abra o Excel, abra o pasta "VBATeste1.xls" e v para o Visual
Basic Editor (Alt +F11). D um duplo clique no Mdulo1 na janela de projeto do
VBA e o cdigo seguinte aparecer na J anela de Cdigo.
mdulo para referncia futura

er
mas
ro, vamos faz-lo mais simples. Voc pode trocar cada
ha de
t i veCel l . For mul aR1C1=" 34"

Excel para iniciar este
cedimento na clula A1 em vez disso, 34 ser entrado na clula que est selecionada
Clique na janela de cdigo e imprima o
"Arquivo/Imprimir/ Mdulo Atual"






















Imprima esta pgina e siga as instrues passo a passo.
O Gravador de Macros (GM) tem uma maneira muito especial para escrev
cdigos. O procedimento acima funciona de modo que poderamos deix-lo assim
apenas para torn-lo mais cla
lin cdigo por si mesmo ou copiar/colar por inteiro o novo procedimento abaixo
desta web page sobre o antigo procedimento no VBE
Quando eu iniciei o Gravador de Macros a clula A1 estava selecionada e eu
entrei com 34 nela. O GM escreve:
Ac
Eu nunca uso e voc nunca usar a propriedade FormulaR1C1. Em segundo
lugar adicionaremos uma linha de cdigo para dizer ao
pro
Bertolo Lies de VBA do Excel 65

quando iniciarmos o procedimento. A Clula A1 a ActiveCell e voc pode trocar esta
Act
Linha 2 e 3 do procedim
No
e
Ran
Lem no precisa selecionar uma clula para dar a ela um valor.
Ran
Novam a
edimento para ler como esta:
nge

ituao porque eu no sei como
ze
rna-se a Seleo)
ento para o ColorIndex 41 e a Pattern xlSolid. Aqui est
linhas 8 at 12 por isto:
nge( " A1" ) . I nt er i o
nge( " A1" ) . I nt er i or . Pat t er n = xl Sol i d
linha simplesmente por:
Range( " A1" ) . Sel ect
i veCel l . Val ue=34
ento para ler como esta:
Range( " A2" ) . Sel ect
Act i veCel l . For mul aR1C1 = " 55"
vamente evitaremos uma coisa como FormulaR1C1 e no selecionaremos uma clula
nas e lhe daremos um valor vamos ento trocar as l ap inhas 2 e 3 por esta:
ge( " A2" ) . Val ue=55
bre-se que voc
Troque as Linha 4 e 5 do procedimento para ler com esta:
ge( " A3" ) . Sel ect
Act i veCel l . For mul aR1C1 = " =R[ - 2] C+R[ - 1] C"
ente evitaremos a FormulaR1C1. Novamente no queremos selecionar um
clula apena entraremos com uma frmula vamos ento trocar as linhas 4 e 5 por esta:
Range( " A3" ) . For mul a=" =A1+A2"
As Linha 6 e 7 do proc
Ra ( " A2" ) . Sel ect
Sel ect i on. Font . Col or I ndex = 3
Aqui ns no selecionaremos a clula ns apenas especificaremos que ns queremos
dar a cor da fonte vamos ento trocar as linhas 6 e 7 por esta: mu
Range( " A2" ) . Font . Col or I ndex = 3
O trs est em vermelho. Eu sempre uso o GM nesta s
cdigos de cores. fa r para lembrar todos os
Linha 8 a 12 do procedimento para ler com esta:

Range( " A1" ) . Sel ect
Wi t h Sel ect i on. I nt er i or
. Col or I ndex = 41
. Pat t er n = xl Sol i d
End Wi t h

O GM usa um monte de "With..End With" mas eu no. O cdigo desenvolvido pelo GM
dever ler num Ingls simples: Selecione a clula A1 (clula A1 to
da Selection.Interior torne a
uma verso mais simples de trocar as

Ra
Ra
r . Col or I ndex = 41
Linha 13 a 25 do procedimento l assim:
Bertolo Lio #05 Modificando Macros no Visual Basic Editor 66

Range( " A3" ) . Sel ect
Wi t h Sel ect i on. Font
. Name = " Ar i al "
. Si ze = 24

With...End With
ara 24 vamos ento trocar as linhas 13 at 25 por isto:
:
ub Macr o1( )
' Mac
Range( " A1" ) . Sel ect
Ra
R
ste agora esta macro.

. St r i ket hr ough = Fal se
. Super scr i pt = Fal se
. Subscr i pt = Fal se
. Out l i neFont = Fal se
. Shadow = Fal se
. Under l i ne = xl Under l i neSt yl eNone
. Col or I ndex = xl Aut omat i c
End Wi t h

Novamente o GM usa " " e tambm modifica TODAS as
propriedades da fonte cada vez. Queremos apenas que o tamanho da fonte seja mudado
p
Range( " A3" ) . Font . Si ze= 24
O procedimento VBA, ou macro chamada "Macro1" agora se parece com isto
S
r o1 Macr o
' Macr o gr avada 27/ 5/ 2007 por Ber t ol o'

Act i veCel l . Val ue = 34
nge( " A2" ) . Val ue = 55
Range( " A3" ) . For mul a = " =A1+A2"
Range( " A2" ) . Font . Col or I ndex = 3
ange( " A1" ) . I nt er i or . Col or I ndex = 41
Range( " A1" ) . I nt er i or . Pat t er n = xl Sol i d
Range( " A3" ) . Font . Si ze = 24
End Sub

Te
Bertolo Fase #1: Desenvolvendo Procedimentos VBA em Excel 67

Lio 6: Escrevendo Macros no VBA do Excel
modo mais fcil para se comear a aprender o Visual Basic escrevendo uma
macro. Esta lio lhe ensinar muito do Visual Basic fazendo voc criar uma
macro que somar, subtrair, multiplicar ou dividir por qualquer valor que
eter erros! Voc
rque deste modo voc ganhar experincia
ente,
O primeiro passo que voc precisa fazer criar um mdulo novo. Abra o Excel,
renome
o que ns buscamos, primeiro comecemos tentando escrever
a macro estigmatizante que divida por 100. Voc sempre dever digitar minsculas
com a e
que se segue em seu mdulo
mo o primeiro passo para escrever esta macro:
Sub Di vi di r Por 100 ( )
al ue / 100
ulo.
entrar na primeira linha, o
udar isto de sub para Sub quando voc for para a prxima linha. Este
isual Basic falar para voc que ele reconheceu Sub como uma palavra
voc especificar. E, para ajud-lo a aprender, eu vou ter que com
aprender mais rapidamente com os erros, po
O
que lhe permitir controlar os seus prprios erros no futuro. E, esperanosam
evitar esses mesmos erros!
AS PRIMEIRAS DECLARAES DE MACRO

ie a folha de planilha Plan1 para Teste (clicar com o boto direito do mouse na
guia, escolher Renomeare digitar o nome nela). A seguir vamos criar um novo
mdulo. V para o editor de VB (ALT-F11) e Selecione Inserir, Mdulo.
Se voc ajustou anteriormente as opes do Mdulo Geral, a declarao Option
Explicit ser a linha de topo do novo mdulo. Se no, mude as suas opes ou digite
Option Explicit no topo do mdulo.
Para criar a macr
um
xceo de linhas de comentrios, que so linhas comeando com uma aspa
nica, e o nome da macro. O Visual Basic capitalizar palavras que ele reconhece, e
que no esto numa linha de comentrio. Entre com o
co


Est a macr o di vi de por 100
Act i veCel l . Val ue = Act i veCel l . V
End Sub

Se uma caixa de erro apareceu quando voc foi de uma linha para outra ou a
linha vermelha, voc digitou incorretamente a linha e precisa corrigi-la. O "End Sub"
icionado automaticamente quando voc entrar na primeira linha no md ad

A primeira linha no macro, Sub Di vi di r Por 100 ( ) , comea com o palavra
Sub. Todos as macros tm que comear com a palavra chave Sub seguida pelo nome
da macro. A palavra Sub para os programadores de computadores estabelece um
rocedimento sub-rotina". "p

Se voc digitar Sub em minsculo, quando voc
Visual Basic m
modo do V o
chave que ele conhece.

Imediatamente aps Sub est a entrada "Di vi di r Por 100 ( ) ". Este o nome
para a macro. Nomes de macro seguem as regras seguintes:


Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 68

Um nome de macro tem que comear com uma letra.
onter s letras, nmeros e o carter de sublinhado (_).
No
e deveria dizer-lhe o que o macro faz (por
exe
z de
esmo nome de um mdulo ou uma palavra
emplo, Act i veCel l ou MsgBox).
ser bastante longo, mais de 250 caracterees!
ome de macro so os dois parnteses ao trmino do nome da
a exigncia de Visual Basic. Voc no precisa adicionar os
parnte c
Antes de ns darmos uma olhada nas outras linhas dessa macro, cometamos
ente ir para a linha imediatamente prxima aps cada mudana:
e
contas, melhor saber que voc tem um erro do que no saber! Se voc no corrigir a
linha, voc ainda pode mover para outra linha. Porm, a linha vermelha permanece at
que o problema seja corrigido. Esteja seguro de corrigir a linha atrs para Sub
Di vi di r Por 100 ( ) seno sua macro no funcionar! Quando voc ganhar
experincia suficiente em escrever macros e no precisar destas advertncias, jogue fora
as exibies das opes das sintaxes erro em Ferramentas, Opes.

A segunda linha na que voc entrou,

' Est a macr o di vi de por 100
Um nome de macro dever c
use caracterees especiais como o ponto, asterisco, ponto de exclamao, ou
outros caracterees especiais (#, $,%, etc..).
Um nome de macro no pode incluir espaos.
Um nome de macro dever fazer sentido
mplo "DB100" realmente no carrega o mesmo significado que "DividirPor100").
Dever fazer sentido agora e daqui a seis meses.
Um nome de macro pode conter letras minsculas e maisculas juntas. As palavras
em maisculo em um nome de macro a torna mais legvel (DividirPor100 em ve
dividirpor100).
Um nome de macro no pode ser o m
chave do Visual Basic (por ex
Um nome de macro pode
Outra parte do n
macro. Esta um
ses, pois o Visual Basic os adicionaro automaticamente para voc quando vo
for para outra linha!

alguns erros no nome de macro. Volte e faa as mudanas seguintes ao nome de macro,
e t

Escreva o nome usando espaos ( ) Di vi da Por 100
Incluir pontos no nome (Di vi di r . Por . 100)
Comece o nome com um nmero (100Di vi di r )

Nunca se esquea da cor vermelha! Elas existem para ajud-lo. Afinal d


uma linha de comentrio. Linhas de comentrios so linhas que comeam com uma
aspa simples. A formatao em azul dos comentrios neste feita para enfatizar que a
linha uma linha de comentrio. Eles no so sublinhados em um mdulo. Nas linhas
Bertolo Lies de VBA do Excel 69

de comentrio voc fornece se a palavra maiscula ou minscula. O Visual Basic
capitalizar apenas as palavras que reconhecer e, que esto nas linhas de declarao
o linhas de comentrios).

te
ue o texto realado sempre no onde o problema est. Por exemplo, se voc digitou
a linha de comentrio corretamente, volte e mova a aspa simples e v para a prxima
ha. A linha ficar vermelha e o Visual Basic realar a palavra "divide" na linha de
com
mbm pode ser colocado direita de declaraes. O seguinte ilustra isto:

100 'divide por 100
End
ente as leituras de suas macros.
te:
t i veCel l over para outra linha, o "a" mudado de
me de
m cro, e texto includos em aspas duplas e em minscula. Deste modo, se o Visual
, voc sabe que foi digitado errado.

Para ilustrar isto, mude "Act i veCel l " para "act i vcel l " (torne-a minscula e
apague o e dentro de act i ve). Quando voc faz isto e vai para a prxima linha, a
palavra permanece minscula, e nenhuma mensagem de advertncia de qualquer
espcie aparece. Por que o Visual Basic no d uma mensagem de erro devido a
ortografia incorreta? O Visual Basic pensa que voc est criando que uma varivel
definida pelo usurio. Uma varivel definida pelo usurio usada para armazenar
valores ou outras informaes. Esteja seguro em mudar " act i vcel l " de volta para "
Act i veCel l ".

A palavra Act i veCel l diz ao Visual Basic que voc est se referindo clula
que realada pelo ponteiro de clula. A palavra Value depois do ponto diz ao Visual
(n

Se voc omitir a aspa no comeo de uma linha de comentrio, voc ganhar
uma mensagem de erro (a linha fica vermelha) quando voc tentar mover prxima
linha. Este modo Visual Basic de lhe falar que voc deu mancada! Por favor, no
q
re
lin
entrio, embora o problema seja a aspa simples perdida. Para consertar a linha de
comentrio, reponha a aspa simples de volta no comeo da linha.

Comentrio ta

Sub Di vi di r Por 100( ) ' Est a macr o di vi de por 100
Act i veCel l . Val ue = Act i veCel l . Val ue/
Sub ' Fi nal da macr o Di vi di r Por 100

Tambm, podem ser postas linhas em branco na macro em qualquer local.
inhas de espao em branco ajudam freqentem L

A prxima declarao em sua macro a seguin

Act i veCel l . Val ue = Act i veCel l . Val ue/ 100

Se voc digitou esta linha em minsculas, o Visual Basic capitalizou as palavras
que ele reconheceu. V para a macro e mude apenas a letra " A " na palavra
para minscula. Quando voc m Ac
volta para "A" pelo Vi sual Basi c.

A melhor aproximao digitar tudo, salvo linhas de comentrio, no
a
Basic no capitalizar a palavra
Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 70

Basic que voc est se referindo ao Valor daquela clula. Assim, Act i veCel l . Val ue
refere-se ao valor da clula ativa. O valor de uma clula uma das muitas propriedades
de clula que voc pode especificar. Como vimos em lio anterior algumas das outras
propriedades de clula que podem ser obtidas e modificadas so:

Propriedade de clula Retorno

Frmula frmula na clula com um sinal igual
Font.Name O nome da fonte
Font.Bold True se estiver em negrito, Falso se no estiver
NumberFormat Format da clula

Se a expresso Act i veCel l . Val ue est direita do sinal igual, diz ao Visual
Basic para retornar com o valor da clula ativa. Se a clula contiver um nmero, o
nmero retornado. Se a clula contiver uma frmula, o valor numrico da frmula
retornado. Se a clula contiver texto, ento texto retornado. Se a clula estiver vazia,
ento um valor nulo retornado. Um valor nulo tratado como um zero nos clculos.
Em equaes de texto, um valor nulo anunciado por "", duas aspas duplas no tendo
um espao entre elas.

Se a expresso que Act i veCel l . Val ue est do lado esquerdo de um sinal
dir ta
Valor atribudo Clula:
Act i veCel l . Val ue = 45 45
Act i veCel l . Val ue = 1/2 0.5
Act i veCel l . Val ue = "ABC" ABC

Note que Visual Basic avalia a expresso direita do sinal igual antes de atribu-
lo ao valor da clula ativa. Por exemplo, a entrada "1/2" se tornou "0.5".

Com este background, ns podemos entender o que faz a declarao
Act i veCel l . Val ue = Act i veCel l . Val ue / 100 em nossa macro. A expresso
Act i veCel l . Val ue direita do sinal de igual retorna o valor da clula. Ele ento
dividido por 100 e o valor resultante atribudo clula.

A ltima declarao em nossa macro a seguinte:

End Sub

A palavra chave End quando combinada com a palavra chave Sub diz ao Visual Basic
que este o fim da macro. Todos as macros tm que terminar com End Sub. Se voc
se esquecer do End Sub, um erro acontecer quando voc tentar rodar a macro. O
aticamente quando voc digitar a linha
igual, diz ao Visual Basic para atribuir para a clula o valor do que calculado
do sinal igual. Os exemplos seguintes ilustram isso:
ei

eclarao de macro: D

editor bsico visual adiciona um End Sub autom
de Sub.
Bertolo Lies de VBA do Excel 71


TESTANDO SUA MACRO

O prximo passo ao escrever esta macro testar as declaraes que voc
screveu. Voc deveria testar qualquer macro que voc escreve muito freqentemente.
problema, provvel que as linhas que acabaram de ser
mudadas que est causando o problema.

Quando voc testar uma macro, voc precisa testar todas as situaes diferentes
que podem acontecer quando a macro rodada. Nesta macro que ns queremos testar
as entradas de clula diferentes que se deveria rodar ao usar esta macro. Elas so:

Clulas contendo nmeros
Clulas contendo frmulas
Clulas contendo texto
Clulas em branco

Antes de voc poder testar esta macro, voc precisar ir para um planilha em
branco e fazer as entradas seguintes:


1234 D5 =B5
B6 5678 D6 =B5+B6

Por favor, note que foram entrados 1234 e 5678 sem os sinais de igual.
= B5+B6
e
Deste modo, se voc tiver um
Clula Entrada Clula Entrada

B3 " Nmer os" D3 " Fr mul as"
B5


Quando voc fizer isto, sua planilha dever se parecer ao seguinte:
B5 =
1
A B C D E
2
4
5
3 Nmeros Frmulas
6
7
8
5678 6912
1234 1234



O primeiro passo que voc dever fazer ante
rquivo. Isto muito importante. Se voc tiver um
s de testar uma macro salvar o seu
problema e a macro no funcionar
orretamente, voc pode restabelecer o arquivo re-carregando-o. Tambm, se por
a
c
Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 72

al razo uma determinada macro travar o Microsoft Excel (muito improvvel, mas
acontece), voc no perder as declaraes de macro que voc acabou de escrever.

Para testar a macro, primeiro selecione a clula B5. Esta a clula que
guma
contm o
mero 1234. Ento, selecione Ferramentas do menu da barra de Ferramentas Padro,
da M
n
e acro neste menu e depois Macros... no sub-menu que aparece. Voc tambm
pode exibir rapidamente este dilogo apertando ALT-F8. Isto exibe a caixa seguinte:



Se voc tiver outras macros, elas tambm ser
clicar uma vez no nome da macro, os botes cin
DividirPor
ac
o exibidas nesta lista. Quando voc
zentos ficam ativos. Realce a macro
100 e d um clique no boto executar. A tela piscar e uma de duas coisas
ontec
Se um arecer, significa que voc no digitou algo corretamente. A
mensagem de erro exata depende do que voc digitou! Para fixar, compare o que voc
digitou a listagem anterior da macro.

ATRIBUINDO UM BOTO NOSSA MACRO

Neste momento, voc tem uma macro que funciona bem com nmeros. Antes
minar os
assos de se selecionar Ferramentas, Macros, selecionar a macro e clicar em Executar
r a ma

er:
uma caixa de erro aparecer.
ou o valor 1234 em B5 ser trocado com 12,34.
a caixa de erro ap
de fazer uma prova adicional, montemos uma barra de ferramentas (toolbar) com um
boto nela que rodar esta macro sempre que o boto for clicado. Isto eli
p
toda vez que voc testa cro.

Bertolo Lies de VBA do Excel 73

Para criar uma barra de ferramentas com um boto para esta macro, selecione o
boto do Office e da Opes do Excel, e a seguir clique em Personalizar

Obteremos a janela seguinte:

Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 74

No menu drop-down que aparece em Escolher comandos em escolha Macros:

E obtenha a janela:


Clique no boto Adicionar e termos a macro na Barra de Ferramentas de Acesso
Rpido

Bertolo Lies de VBA do Excel 75

Para personalizar a barra de ferramentas do VBE, fazemos o seguinte
Exibir, Barra de Ferramentas, Personalizar


parecer a seguinte janela: A

Na guia Barras de ferramentas, selecione o boto Nova... para criar uma barra de
erramentas nova. Isto lhe permitir c f riar uma barra de ferramentas nova, em branco.
ntas, por exemplo, Na caixa de dilogo que aparece d um nome barra de ferrame
Botes de Teste". "


Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 76

Uma nova barra de ferramentas em branco aparecer:
A seguir, selecione a aba de Comandos e clique na categoria de executar:

Clique sobre a face do Executar e arraste-o barra de ferramentas nova .
Para mudar o boto a uma nova imagem, clique com o boto direito do mouse
sobre a imagem no boto e selecione Alterar imagem de boto.

A seguir, escolha uma nova imagem.
Por favor, note que o Excel freqentemente torna-se instvel quando voc criar
barra de ferramentas. Sempre que eu crio uma barra de ferramentas nova, eu saio
imediatamente do Excel e da, volto a abri-lo. Eu acho que se eu no fizer isso, o Excel
tende a cair mais cedo ou mais tarde.

TESTANDO NAS CLULAS DE FRMULAS

O prximo passo de teste de nossa macro test-la em clulas que contenham
frmulas. Antes de testar, primeiro tenha certeza de que voc reps os valores nas
clulas B5 e B6 de novo para 1234 e 5678. Os valores nas clulas D5 e D6 devero ser
respectivamente 1234 e 6912, e elas devero conter frmulas, no nmeros.

Bertolo Lies de VBA do Excel 77

Para testar uma frmula, clique sobre D5 e da clique no boto de teste que voc
acabou de criar. A notcia boa que o valor em D5 muda de 1234 para 12,34. A notcia
ruim que ela no mais uma frmula, mas um valor 12,34. preciso encontrar ento
uma maneira precisa que modifique as clulas com frmulas de modo que a frmula
seja retida.

CONSERTANDO A MACRO PARA CLULAS DE FRMULAS

Para descobrir qual a frmula que est em uma clula, voc precisa usar a
propriedade Frmula em vez da propriedade Valor. Assim, usando a expresso
Act i veCel l . For mul a em vez de Act i veCel l . Val ue lhe devolvido uma frmula
em vez do valor na clula. Mas o que acontece se a clula contm um nmero em vez
de uma frmula? Para descobrir o que voc obtm neste caso com
Act i veCel l . For mul a, criemos uma segunda macro que mostre a sada da expresso
Act i veCel l . For mul a. Usar pequenas macros, para obter informaes ou testar um
novo cdigo, uma tcnica muito til.

ntre vrias linhas abaixo da macro anterior DividirPor100 com esta outra macro que se
segue.
so macro.

Sub t est eMacr o( )
MsgBox Act i veCel l . For mul a
End Sub

A macro acima exibir uma caixa de mensagem na tela que contm a frmula da
clula ativa. V para sua planilha de teste e rode a macro de teste em vrias clulas. A
figura seguinte ilustra o que voc obter se voc clicar na clula D5 que contm a
frmula " =B5 " e rodar a macro de teste.
E
Esteja certo em digitar minscula, com a exceo da palavra "testeMacro" que
o nome da nos


Rode a macro de teste em clulas que contenham nmeros, numa que esteja em branco,
e em uma que contenha texto. O seguinte os resultados que voc adquirir:

Se a Clula Contm: ActiveCell.Formula Retorna:

Frmula Frmula com um sinal de igual
Nmero O nmero
Texto O texto
Nada Nada

Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 78

Assim, ns precisamos modificar a macro DividirPor100 para usar
Act i veCel l . For mul a em vez de Act i veCel l . Val or . Sua macro dever se parecer
com o seguinte quando voc tiver terminado:

Sub Di vi di r Por 100( )
' Est macr o di vi de por 100
Act i veCel l . For mul a = Act i veCel l . For mul a / 100
End Sub

gora volte para sua planilha de teste e teste-a. Teste-a primeiro em nmeros e
da em ula. Quando voc test-la em nmeros, ela funciona da mesma
aneira que antes. O nmero 1234 se torna 12,34, o nmero 5678 se torna 56,78.
orm, quando voc rod-la em uma clula de frmula, as coisas ficam de mal a pior!
caixa de erro seguinte aparece:
a
A
clulas de frm
m
P
A



Selecionando o boto Fim lhe devolvido a pasta, se voc executou a macro de
ma pasta de planilhas. Se voc executou a macro do editor de VB, ele retorna voc ao
ditor.
linha que est causando o problema, selecione o boto
epura

u
e
Para encontrar qual a
D r. Isto resultar na linha com o problema comear realada. Por favor, note que
isto o pe no modo DEPURAR no editor de VB. E, voc pode corrigir a declarao e
clicar no boto executar/continuar para retomar a macro de forma que voc possa
modific-la sem correr o risco de travar o Excel. Por ora, selecione do menu Executar,
Redefinir. Isto lhe permite parar a macro e ento voltar pasta de planilhas e recome-
la do princpio. Embora as correes de declaraes possam ser feitas enquanto estiver
no modo depurar, mais cedo ou mais tarde far o Excel e o editor visual basic travar.

Quando voc encontrar um erro numa linha de frmula, ele normalmente
significa que algo est errado do lado direito do sinal de igual. Neste caso, algo est
errado com Act i veCel l . For mul a/ 100. A frmula mostra-se bem. E, no est em
vermelho, o que indica que voc digitou algo erradamente.

Para descobrir o que est acontecendo, volte para a clula D5 que contm a frmula
sta vez,
is para
" =B5" e execute a macro novamente. Quando a caixa de erro se aparecer de
elecione Depurar. Da ento, selecione Exibir, J anela Inspeo de varive s
Bertolo Lies de VBA do Excel 79

fazer a janela inspeo aparecer. O seguinte ilustra o modo depurar com uma janela
Inspeo dentro e a linha que causadora do problema realada (sua janela de inspeo
pode estar no fundo ou flutuando no topo ela controlada pelo usurio):


Para usar as caractersticas do Depurar, primeiro certifique-se que o painel
Inspeo esteja mostrado. Depois, a poro realada Act i veCel l . For mul a/ 100 da
linha do problema. Dai clique na linha realada e v para o menu Depurar e procure o
item Inspeo de variveis rpida ou Depurar, Adicionar Inspeo de variveis.
Aparecer o seguinte, se confirmar sua ao e se voc clicar o boto de Inspeo
Rpida:



Se voc selecionar Depurar, Adicionar inspeo de va
seguinte:
riveis aparecer o
Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 80



Selecione OK na caixa de dilogo. Depois, selecione Act i veCel l . For mul a e
ita a
clula D5 da planilha:
rep s mesmas selees.
O seguinte o que a tela mostrar aps as inspees terem sido feitas com o
ponteiro na



Destas "inspees" voc v que quando o Visual Basic avalia o
Act i veCel l . For mul a que est rodando a frmula na clula, "=B5". Mas quando
este dividido por 100, o Visual Basic retorna "<Tipos Incompatveis>". Por que isto
est ocorrendo? O Visual Basic est dividindo o texto ("=B5") por 100, o que no pode
Bertolo Lies de VBA do Excel 81

ser feito. Da uma mensagem de erro, "Tipos Incompatveis", porque ele est fazendo
uma operao matemtica no texto.
B5) / 100" na clula. Para
zer isto acontecer, o que voc precisa fazer cercar o " / 100" com aspas duplas e
concate
ha colocado espaos na frente e aps o ampersand (&).

ara ordenar a macro, selecione Executar, Redefinir para sair do modo Depurar.
Ou, e ainda mais facilmente, clique no boto quadrado que o boto parar/redefinir
para retornar a edio normal e sair do modo depurar. Modifique ento a declarao na
macro para ficar como o que se segue:

Act i veCel l . For mul a = Act i veCel l . For mul a & " / 100"

uando voc digitar isto nela, tenha certeza de que voc colocou um espao
antes e outro depois do &. De outra forma, voc obter uma mensagem de erro, quando
o Visu
izer isto, voc obtm a frmula "=
e somar B5 e
que
m parnteses e ento adicionar os " / 100 ". Mude a
larao de forma que ela l:
a folha de planilha de teste e para clula D6, e corrija-a de novo a
sua frmula original, "=B5+B6 ". Agora experimente a macro. O resultado
ligeiramente diferente do que desejado: a clula termina com a entrada de texto

O que queremos que acontea terminar com "= (
fa
n-lo com Act i veCel l . For mul a usando um ampersand (&). Cercar / 100
com aspas duplas diz ao Visual Basic que isto texto em oposio expresso
matemtica que deveria executar. O texto pode ser concatenado usando um ampersand
(&). Certifique-se que ten
P
Q
al Basic no conseguir entender Act i veCel l . For mul a&. Tente isto sem o
espao de modo que voc tambm experimente este erro. Voc recordar dele quando
ele acontecer a voc no futuro. Tente tambm escrever a declarao sem o & para fazer
aparecer uma mensagem de erro.

MANIPULANDO CLULAS DE EQUAES COMPLEXAS

Voc est ficando mais ntimo! Volte para sua folha de planilha de teste e
experimente-a na clula D5 que contm a frmula "= B5". O resultado "= B5/ 100".
E se voc repetir isto em uma segunda vez nesta clula, voc adquire "=
B5/ 100/ 100". Isto est perfeito! Logo, experimente na frmula mais complexa em
clula D6 que "=B5+B6 ". Quando voc f
B5+B6/ 100". Isto no totalmente o que se deseja! A Microsoft Excel dividir o
alor de B6 primeiro antes do 100 e ento acrescentar isto a B5 em vez d v
B6 dividem junto e ento antes das 100. O que voc realmente deseja "=
( B5+B6) / 100". Se a equao existente no rodeada por parnteses, as respostas
mudam. Por exemplo, 5+100/100 so 5+1 = 6, enquanto (5+100)/100 so
105/100=1.05.
Para consertar este problema, voc precisa modificar a declarao de macro de
fo ma a cercar a frmula co r
ec d

Act i veCel l . For mul a = " ( " & Act i veCel l . For mul a & " ) / 100"

Volte para su
Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 82

"( =B5+B6) / 100" em vez de uma frmula. O que deve ser feito selecionar tudo da
frmula que retornada por Act i veCel l . For mul a com a exceo do sinal de igual.
Para fazer isto ns precisamos usar a funo Mid que devolver s parte do texto
especificado.

USANDO A AJUDA PARA ENCONTRAR COMANDOS

Se voc est desejando saber como eu propus a funo Mid, eu a achei na ajuda
do Microsoft Visual Basic. Selecione Ajuda no menu editor VB e o item de menu
"Ajuda do Microsoft Visual Basic. Da, ento, selecione a guia de ndice e digite em
"palavras chaves". Selecione "string manipulation" e procure a informao de ajuda
resultante.


Este texto apresentar muitas tais funes teis a voc para livr-lo de ter que
descobri-las.
L apareceu a seguinte informao:
Bertolo Lies de VBA do Excel 83




SAN


























U
Funo Mid
Retorna uma Variant (String) que contm um nmero especificado de caracteres de uma
seqncia de caracteres.
Sintaxe: Mid(string, start[, length])
Mid entos nomeados A sintaxe da funo tem os seguintes argum :
Descrio
string
Parte

Obrigatria. Expresso de seqncia da qual so retornados os caracteres. Se string
contiver Null, ser retornado Null.
start
Obrigatria; Long. A posio do caractere em string onde a parte a ser considerada
comea. Se start for maior que o nmero de caracteres existentes em string, a funo
Mid

retornar uma seqncia de caracteres de comprimento zero ("").
Long). Nmero de caracteres a ser retornado. Se omitido ou se
racteres do que os de length no texto (inclusive o caractere em start),
sero a partir da posio start at o final da seqncia de
length
Opcional; Variant (
existirem menos ca
retornados todos os caracteres
caracteres.
.............
............
Exemplo da funo Mid
O prime
seqncia de caracteres.
Di mMySt r i ng, Fi r st Wor d, Last Wor
MySt r i ng = " Demonst r ao da f uno Mi d" ' Cr i ar a seqn
Fi r st Wor d = Mid(MySt r i ng, 1, 3) ' Ret or na " Dem" .
Last Wor d = Mid(MySt r i ng, 17, 6
Mi dWor ds = Mid(MySt r i ng, 1)
iro exemplo usa a funo Mid para retornar um nmero especifico de caracteres de uma
d, Mi dWor ds
ci a de t ext o.
) ' Ret or na " f uno" .
' Ret or na " Demonst r ao da f uno Mi d" .
DO A FUNO MID

A informao de ajuda nos fala que a funo Mid precisa ser fornecida a um
texto string, um nmero indicando posio do caractere na string onde a parte a ser
considerada comea, e o nmero de caracteres a ser retornado. Neste caso o nmero
indicando a posio do caractere onde a parte a ser considerada comea 2, porque o
sinal de igual est na posio de caractere 1. Se ns no fizermos uma entrada para o
argumento de comprimento (lenght), o Microsoft Excel assumir que ns queremos a
poro restante do texto, isto o que ns queremos.

A outra
pri
mudana que ns precisamos fazer pr um sinal de igual na frente dos
meiros parnteses. Isto se faz para a entrada de uma clula de frmula em vez de
uma entrada de texto. A declarao de macro precisa se parecer com o seguinte depois
que voc modific-la:

Act i veCel l . For mul a = _
" =( " & Mi d( Act i veCel l . For mul a, 2) & " ) / 100"

Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 84

Na declarao anterior voc v um espao e um sublinhado (_) depois do
primeiro sinal de igual, e que a declarao continua na prxima linha. A combinao de
um espao e um sublinhado permite-se continuar uma declarao na prxima linha em
z de fazer a declarao estender alm da rea visvel. Se voc tem espao em sua tela
voc p
de teste e esteja certo
de que as entradas em D5 e D6 so respectivamente "=B5" e "=B5+B6". Quando voc
rodar a macro em cada destas clulas, voc obtm as frmulas que ns buscamos:

Clula Frmula Era: Frmula Tornou-se:

D5 =B5 =( B5) / 100
D6 =B5+B6 =( B5+B6) / 100

t aqui tudo bem! Mas, ns fizemos muitas modificaes desde que ns
testamos a macro por ltimo em uma clula que contm apenas um nmero em vez de
a frmula. V para a clula B5 que contm o nmero 1234 e rode a macro. Os
resultad
ntrolar nmeros somente em clulas que contm nmeros, e
ar a declarao que possa controlar frmulas somente em clulas que contm
frmul
examina clulas que contm nmeros ao invs de frmulas, voc v que
iferena fundamental o sinal de igual. Se o primeiro carter for um sinal igual,
ento n
ma clula de frmula. Nesta funo, voc especifica o
ve
ode digitar tudo isso em uma linha. Mas se voc fizer assim, esteja certo de
remover o sublinhado. A razo que eu escrevi declarao anterior em duas linhas em
vez de uma que a rea de impresso neste texto no larga o bastante para exibi-la em
uma linha.

TESTANDO A MACRO MODIFICADA

hora de testar novamente! Volte para a folha de planilha



A
um
os so ligeiramente diferentes do que ns queremos. Nossa macro removeu o
"1" de "1234" e entrou a a frmula "= (234/100).

USANDO IF E A FUNO LEFT

At este momento ns escrevemos uma declarao que possa controlar nmeros
mas no pode controlar equaes, e ns escrevemos uma declarao que pode controlar
equaes mas no pode controlar nmeros. O que ns precisamos fazer usar a
declarao que possa co
us
as. Duas coisas so necessrias para se fazer isto:

Uma maneira de distinguir entre clulas que contm nmeros e clulas que contm
frmulas.
E, uma maneira para dizer a nossa macro que conjunto de instrues usar.

Se voc
a d
s usaremos a frmula existente que fica depois do sinal de igual. Se o primeiro
carter no for um sinal igual, ento dever ser um nmero.

Ns podemos usar a funo Left(texto, nmero) do Visual Basic para extrair
apenas o primeiro carter de u
Bertolo Lies de VBA do Excel 85

texto e depois o nmero de carter para retornar. Se o texto uma equao (Ex:
"=B5+B6"), e o nmero de carter para devolver apenas um, ento um sinal de igual
tornado.
Para satisfazer a segunda exigncia, um modo de dizer nossa macro que
eguinte ilustra a
en)
um nmero
licadas em detalhes em numa lio
o modificada para
eCel l . For mul a, 2) & " ) / 100"
sto desde que a clula contenha um nmero
-se continuar uma declarao nas prximas linhas ao
vs de fazer a linha estender alm da rea visual. Voc no pode dividir palavras
clulas de teste esto
xadas novamente s condies originais delas (B5 e B6 so os nmeros 1234 e 5678;
" e "=B5+B6"). Os resultados, em clulas que
rmulas exatamente o que ns queremos! A clula que contm o
1234 se torna " = (1234)/100 " e a frmula "=B5+B6" se torna "=
duas clulas, os
re

conjunto de instrues usar, ns usaremos uma declarao If. O s
simples declarao If que ns usaremos:

o (Th Se (If) o sinal igual for encontrado Ent
use a declarao para uma frmula
Seno (Else)
Use a declarao para
Fim do If

Como informao, as declaraes If sero exp
posterior.

Nossa nova macro se parece com o seguinte depois de ter sid
ter a funo Left () e os testes If adicionados a ela.

Sub Di vi di r Por 100( )
' Esta macro divide por 100

If Left( Act i veCel l . For mul a, 1) = " =" Then
'Faa isto desde que a clula contenha uma funo
Act i veCel l . For mul a = _
" =( " & Mi d( Act i v
Else
'Faa i
Act i veCel l . For mul a = _
" =" & Act i veCel l . For mul a & " / 100"
End If
End Sub

Embora ns mencionamos o sublinhado anteriormente, voc pode ter perdido o
pargrafo dele. Na macro anterior voc v duas declaraes onde eu pus um espao e
um sublinhado (_) e que a declarao continua na prxima linha. A combinao de um
espao e um sublinhado permite
in
usando o sublinhado a menos que voc goste de mensagens de erro!

hora de testar novamente! Fique certo de que suas
fi
as clulas e so as frmulas "=B5 D5 D6
c nmeros e f ontm
mero n
( B5+B6) / 100". Se ns rodarmos isto em uma segunda vez nestas
Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 86

resultados so "= ((1234)/100)/100" e "= ( ( B5+B6) / 100) / 100", tambm o que ns
uma clula em branco ns encontraremos uma mensagem
erro como a seguinte:



s a testarmos em uma clula que contm uma entrada de texto, ns
btemos uma frmula sem sentido. Por exemplo, teste o macro em clula que
contm
O que ns precisamos de um modo de dizer se uma clula contm nmeros e
u est vazia. Acontece que existe uma funo Visual Basic
clula numrica. A funo Visual Basic IsNumeric
u uma frmula numrica, ela retorna com o
o, retorna com o valor Falso (False).
ela, um teste If, ns poderemos distinguir
ER)
o usando o
comandos.
ir, Pesquisador de
de Objetos
queramos!

MANIPULANDO TEXTO E CLULAS EM BRANCO

At agora, quando ns testamos a macro, ns s testamos em clulas numricas.
Estas so as clulas que contm nmeros ou frmulas que avaliam a um nmero. Mas
se ns rodarmos a macro em
de







E, se n
o B3
a palavra "Nmero". O resultado a equao " = ( Nmer o) / 100" . O que ns
queremos que a macro ignore clulas que esto em branco ou tm texto.


equaes em vez de texto o
que nos diz se uma clula uma
(valor). Se a clula contiver um nmero o
valor Verdadeiro (True). Caso contrri
Modificando a macro para usar este teste n
entre clulas numricas e clulas no-numricas.

USANDO O PESQUISADOR DE OBJETO (OBJECT BROWS

Antes de fazermos uso do IsNumeric, lhe mostremos como ach-l
jetos. O Pesquisador de Objetos til para procurar por Pesquisador de Ob
Para fazer isto, v para o mdulo Visual Basic e selecione Exib
Voc ver o Pesquisador Objetos (ou F2 ou clicando no boto-cone ).
exibido da seguinte maneira:
Bertolo Lies de VBA do Excel 87



Selecione VBA na caixa de listagem de cima esquerda e Information na caixa de
listagem de baixo lista direita. Uma descrio curta do item destacado aparecer no
fundo deste painel.


Na caixa Membros de Information, na janela acima, voc ver as diferentes
jeto Information da
iblioteca
propriedades e mtodos que podem ser usados para esta classe de ob
b VBA. Se voc clicar sobre uma pr
squerdo superior do painel acima, a Ajuda do Visual Basic sobre
mtodo ou propriedade selecionada ser mostrada. Freqentemente a ajuda fornecer
ropriedade selecionada.
Destaque a palavra IsNumeric na caixa Membros de Information e clique
o ponto de interrogao para mostrar a informao de ajuda.
opriedade e da clicar no ponto de
interrogao no canto e
o
vrios exemplos usando o mtodo ou p
sobre o bot

Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 88





Como voc pode ver da informao de ajuda (Comentrio), ela retorna True se a
clula for nu
e a ser usad
mrica e False se no for. Tambm, a informao de ajuda fornece a sinta-
a. x

Voc pode deixar o Pesquisador de Objetos ativo e simplesmente selecionar
J anela no menu do editor VB e selecionar a janela que voc gostaria de ativar. Voc
pode tambm fechar o Pesquisador de Objetos clicando no boto fechar no canto
direito superior da janela.

USANDO IsNumeric NA MACRO

Bertolo Lies de VBA do Excel 89

O que se segue macro DividirPor100 modificada para incluir o teste
IsNumeric. Note que o uso de identaes para agrupar declaraes relacionadas.
Tambm, linhas em branco so usadas para melhorar a facilidade de leitura da macro, e
comentrios foram colocados no final de cada declarao If.

Sub Di vi di r Por 100( )
' Esta macro divide por 100

If IsNumeric( Act i veCel l . Val ue) Then
'Faa isto desde que a clula seja numrica
If Left( Act i veCel l . For mul a, 1) = " =" Then
'Faa isto desde que a clula contenha uma equao
Ac
ula ativa com a funo
rmula da clula ativa,
rnado Falso desde que frmulas so entradas de
xto.
teste Falso isto indica que a clula no contm uma entrada numrica.
stes
End Sub,
acro pra.

o funciona
im. Declaraes de comentrio so apenas aquelas de comentrios. Quando voc
escreve
o, como a
lavra " Frmula " na nossa planilha de teste, ela funciona exatamente como ns
uerem

t i veCel l . For mul a = _
" =( " & Mi d( Act i veCel l . For mul a, 2) & " ) / 100"
Else
'Faa isto desde que a clula contenha um nmero
Act i veCel l . For mul a = _
" =" & Act i veCel l . For mul a & " / 100"
End If 'Fim do teste Se Left
End If 'Fim do teste IsNumeric
End Sub

Note que ns testamos a propriedade de Valor da cl
IsNumeric. Se ns tivssemos testado a propriedade de F
clulas que contm frmulas teriam reto
te
Quando o teste de IsNumeric for True, so executadas as declaraes
imediatamente seguintes. Estas so as instrues que dividem nmeros ou frmulas por
100. Se o
Ne casos, a macro pula o bloco de declaraes para a declarao End IF que o fim
do teste If de IsNumeric. Como a prxima declarao depois deste End IF
a m

Tambm note que ns pusemos declaraes de comentrio em cada uma das
linhas de declarao End If. Sempre que voc tem muitas declaraes If numa macro
melhor documentar as declaraes End If com um comentrio que lhe conte com qual
declarao If elas esto associadas. Como ilustrado anteriormente, isto muito fcil
fazer. Por favor, note que isso s porque voc rotula End If com uma declarao de
comentrio que diz que o fim de uma particular declarao Se, isto n
ass
r macro mais complexa, voc poder achar que no tem mais que atarraxar s
suas declaraes If os comentrios.

Quando ns testamos nossa macro em uma clula que contm text
pa
q os- ela no faz nada. Isto porque IsNumeric( Act i veCel l . Val ue) retorna o
valor Falso quando uma clula contm texto. Isto faz nossa macro pular as declaraes
Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 90

que modificam a clula. Quando ns testarmos em clulas que contm um nmero ou
uma frmula, ela tambm funciona perfeitamente, modificando estas clulas a serem
divididas por 100. Mas quando ns testamos o macro em uma clula em branco
temos umas outras das caixas de erro infames do Visual Basic:

teste IsNumeric(Act i veCel l . Val ue) em uma
o Verdadeiro (True), no Falso (False). Voc pode
rmente para confirmar isto. O IsNumeric
uma clula em branco em Microsoft Excel
ob










Por que isto aconteceu? O
clula em branco deve ter retornad
usar as tcnicas de depurar ilustradas anterio
retorna True numa clula em branco porque
tratada como sendo igual a zero. E desde que z
retorna True. Para provar isto, v para a planilha
seguinte na clula B12: " =B5*B10" . A clula B5 contm um
uma clula em branco. O resultado
branco como um zero.

Assim, ns tambm precisamos de um teste para ver se um
branco ou no. V para o mdulo Visual Basic, selecione E
Objetos. A opo << todas as bibliotecas >> dever ser selecionada, e
selecionada no painel Classes. Olhe as vrias propriedades. Voc
propriedade chamada IsEmpty. Selecio
para descobrir mais sobre ela. Voc acha
est vazia.

Co
c
ero um nmero, o teste IsNumeric
de teste e entre com a frmula
nmero, e clula B10
zero, que consistente com o tratar uma clula em
a clula est em
xibir, e da Pesquisador de
Information
achar uma
ne-a e d um clique no ponto de interrogao
r que o teste IsEmpty retorna True se a clula
nsiderando que ns queremos somente rodar as declaraes que modificam os
onted
uso dos parnteses com a funo Not opcional.
os de clulas quando a clula no estiver vazia, ns precisamos "sacudir" a res-
posta que ns queremos. O Microsoft Excel no faz isto para ns. Por exemplo, o teste
Not retorna True se o teste falso, e Falso se o teste verdadeiro. A declarao
seguinte na tabela ilustra isto:

IsEmpty(ActiveCell) Not(IsEmpty(ActiveCell))

Clula Contm Retorna Retorna

Entrada Qualquer False True
Nenhuma Entrada True False

O
Bertolo Lies de VBA do Excel 91

Baseado nisto modificamos a macro para ler:
ub Di vi di r Por 100( )
acro divide por 100
If Not IsEmpty(Act i veCel l ) then
'Faa isto se a clula no estiver vazia
If IsNumeric(Act i veCel l . Val ue) Then
If Left( ) = "=" Then

Act i veCel l . For mul a = _


Quando testarmos as modificaes acima ela funciona para todos os casos!

DIVIDINDO TODAS AS CLULAS DE UMA SELEO POR 100

At este estgio, a nossa macro funcionou somente numa nica clula por vez.
Se tivermos 50 clulas para processar, teramos que rodar a macro 50 vezes. Seria muito
melhor selecionar um intervalo contendo as clulas que queremos dividir por 100 e
rodar a macro somente uma vez.

necessrio ento declaraes

S
' Esta m



'Faa isto desde que a clula seja numrica
Act i veCel l . For mul a, 1
'Faa isto desde que a clula contenha uma equao
Act i veCel l . For mul a = _
" =( " & Mi d( Act i veCel l . For mul a, 2) & " ) / 100"
Else
'Faa isto desde que a clula contenha um nmero

" =" & Act i veCel l . For mul a & " / 100"
End If 'Fim do teste If Left
End If 'Fim do teste IsNumeric
End If 'Fim do teste Not IsEmpty
End Sub

do Visual Basic que circule por todas as clulas
de nossa seleo e rode as declaraes em cada uma delas. A declarao For
Each...Next do Visual Basic faz isto, e tem a seguinte estrutura:

For Each i t em In uma col eo
declaraes
Next

Este comando tambm ser coberto em detalhes em lies posteriores.

A coleo que ns desejamos processar so as clulas no intervalo que ns
realamos. As clulas selecionadas na planilha ativa so identificadas pela de palavra
chave Selection do Visual Basic. O comando For Each circular por cada uma das
clulas que foram selecionadas e rodar as declaraes que esto entre o For Each e o
Next. A declarao Next diz ao Visual Basic para voltar ao topo do lao (loop), onde a
declarao For est, e processar a prxima clula. Isto continua at todas as clulas
serem processadas.
Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 92


A clula que est sendo atuada identificada por qualquer nome de varivel que

O que segue a estrutura bsica para uma macro que faz um lao atravs de uma
eleo de clulas e executa uma srie de declaraes nelas:
or Each cl ul a In Sel ect i on
declaraes
ext cl ul a
Mudemos nossa macro para usar as declaraes anteriores de forma que ela
b D
la no est vazia
If IsNumeric( Act i veCel l . Val ue) Then
que a clula seja numrica
If Left( Act i veCel l . For mul a, 1) = " =" Then
Act i veCel l . For mul a = _
" =( " & Mi d( Act i veCel l . For mul a, 2) & " ) / 100"
e
Act i veCel l . For mul a = _
" =" & Act i veCel l . For mul a & " / 100"

ns usarmos depois das palavras For Each. O nome que eu prefiro usar o nome
"clula", em minscula.


s


F

N

atuaro nas clulas mltiplas. Sua macro deveria se parecer com o que se segue. (as
nicas mudanas so a terceira linha do topo e o segunda linha de baixo para cima).

Su i vi di r Por 100( )
'Esta macro divide por 100
For Each cl ul a In Sel ect i on
If Not IsEmpty( Act i veCel l ) Then
'Faa isto se a clu

'Faa isto desde

'Faa isto desde que a clula contenha uma equao


Els
'Faa isto desde que a clula contenha um nmero


End If 'Fim do teste If Left
End If 'Fim do teste IsNumeric
End If 'Fim do teste Not IsEmpty
Next cl ul a
End Sub
Agora v testar a planilha e selecione B5 at D6:


Agora rode a macro com todas estas clulas selecionadas. Em vez da macro funcionar, a
seguinte mensagem de erro aparece:
Bertolo Lies de VBA do Excel 93



E a palavra "cl ul a" na linha "For Each cl ul a In Sel ect i on" destacada.



O que aconteceu que voc no declarou no topo da macro que a varivel
cl ul a seria usada na macro. E, desde que a declarao Option Explicit est no topo
do mdulo, o Visual Basic pra a macro, mostra a mensagem de erro, e destaca a
varivel no declarada.
Se isto no aconteceu, clique no menu pop up do VB onde est atualmente
DividirPor100 e acesse o item (Declarao). Se a declarao Option Explicit no
stiver l, aquela mensagem no aparecer e e a macro encontrar valores absurdos como
resultado.



Declarar uma varivel mu

D ivel

No topo de uma macro. Neste caso

Dim clula

ito fcil. Adicione apenas a declarao
im nome da var
,
Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 94

Seria a declarao para declarar a varivel clula. Dim a
Dimension, que era usada nas ling

A macro ficaria agora com a seguinte a

Sub Di vi di r Por 100( )
' Esta macro divide por 100
Dim cl ul a
'restante do cdigo da macro
End Sub

Depois
clulas B5
frmulas n
mudana no
Each est selecionando cada clula no intervalo de seleo, a macro s
ActiveCell. H s uma clula ativa em uma seleo. Neste caso que
eclarao
breviao da palavra inglesa
uagens antigas de programao.
parncia:
que voc fizer a correo anterior, volte planilha de teste, realce as
at D6 e rode a macro. Voc notar que s a frmula em B5 muda. As
as outras clulas no mudam, embora os valores exibidos mudem devido
valor de B5. H uma razo simples para isto. Embora a declarao For
est agindo na
clula B5. A
For Each no muda a clula ativa quando ela circula pelas clulas. Para
modifique a macro mudando cada ocorrncia de ActiveCell palavra "Cell ".
a se parece agora com o seguinte:
100
Dim cl ul a
For Each clula In Selection
If Not IsEmpty(cl ul a) Then
'Faa isto se a clula no est vazia
If IsNumeric(cl ul a.Val ue) Then
'Faa isto desde que a clula seja numrica
If Left( cl ul a. For mul a, 1) = " =" Then

End If 'Fim do teste IsNumeric
Nex
End
ula numrica na seleo
Nesta fase voc tem uma
Tambm, por favor, note que a macro anterior no
d
consertar,
A macro corrigid

Sub Di vi di r Por 100()
'Esta macro divide por







'Faa isto desde que a clula contenha uma equao
cl ul a.Formula = _
"=(" & Mid( cl ul a. For mul a, 2) & " ) / 100"
Else
'Faa isto desde que a clula contenha um nmero
cl ul a.For mul a = _
" =" & cl ul a. For mul a & " / 100"
End If 'Fim do teste If Left

End If 'Fim do teste Not IsEmpty
t cl ul a
Sub

Quando voc tentar esta macro, voc ver que toda cl
dividida por 100 e as clulas no-numricas no so mudadas.
ferramenta bastante poderosa.
Bertolo Lies de VBA do Excel 95

seleciona nenhuma clula nem m
voc deveria tentar seguir em tod

TORNANDO SUA M

Realmente seria agradvel se a m
muito mais que dividir por 100. Pode haver casos on
ou algum outro nmero. Ou, voc pode querer fazer multiplicao, adio, ou
em vez
modific
uda a clula ativa. Esta aproximao aquela que
as as suas macros.
ACRO SUPER PODEROSA
acro que h pouco voc escreveu pudesse fazer
de voc quer dividir por 10, 1000,
subtrao
de diviso. Um modo para resolver isto seria fazer cpias deste macro e
ar o que ela faz. Ento, voc ter uma macro para cada tarefa que voc quer.
mente resultaria em muitas macros fazendo tarefas semelhantes. Outra
roxim
cados para incitar a
ntribu
ecisam ser acrescentadas ao topo da nossa
acro
Isto, obvia
ap ao seria editar a macro sempre que voc quisesse fazer algo diferente. Mas
isso na verdade no muito eficiente, e perigoso, pois se voc pensar que a macro que
foi ajustada para fazer uma coisa agora ajustada para fazer algo diferente de fato. Isto
especialmente importante, pois no existe capacidade de se desfazer (undo) com
macros.

Felizmente, o Visual Basic fornece vrios signifi
co io do usurio. O mais simples destes a funo InputBox (). Esta funo
permite uma macro mostrar uma caixa de entrada onde o usurio pode digitar em
resposta solicitao.

O que segue so as declaraes que pr
m (direitamente abaixo da declarao "Dim cl ul a):

Dim aodesej ada
aodesej ada = _
InputBox("Entre com uma ao matemtica (Ex: / 100)")
If aodesej ada = "" Then Exit Sub

A varivel aodesej ada uma nova varivel de usurio e a primeira letra
no maiscula. Esta uma conveno que freqentemente usada para nomear
variveis.

Estas declaraes fazem aparecer a seguinte caixa de entrada na tela:


Quando estas declaraes so rodadas, a entrada na caixa atribuda
de usurio aodesej ada. Se o boto Cancelar selecionado,
varivel
ento a
aodesej ada fixada igual a "". A varivel aodesej ada tambm fixada para
Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 96

"" se nada posto na ca
destas duas situaes acontecer, ento a macro precisa c
exatamente o que a declarao If aodesej ada = "" Then Exit Sub faz.
ixa de entrada e o boto de OK selecionado. Se qualquer uma
onferir isto e parar. Isso

a para este valor. Ento, quando ns
sic substitui o
.
acro substituir o " / 100 "
ubstitudas -
er exatamente um nmero, e um para o caso em que a
ula, os parnteses fechados
agora se parece. Note que a varivel
da macro foi
e o macro faz.
usurio
0)")
( )
l ul a. For mul a = _
" =( " & Mid( cl ul a. For mul a, 2) & _

Se o usurio entra com uma ao de matemtica, por exemplo "/ 100", ou "* 5",
ento a varivel aodesej ada fixad
referenciarmos a aodesej ada mais tarde em nossa macro, o Visual Ba
vel aodesej ada para o nome da varivel que est armazenado na vari

c precisa fazer em sua m A outra modificao que vo
com a varivel aodesej ada. H duas ocorrncias que precisam ser s
uma para o caso da clula cont
clula contm uma frmula. Naquele contendo a frm
precisam ser mantidos.

O que segue o que a macro modificada
aodesej ada no est inclusa em aspas duplas. Tambm, o nome
mudado para AesMatemticas para indicar melhor o qu

Sub AesMat emt i cas()
' Esta macro modifica clulas baseadas em aes matemticas entradas pelo
Dim cl ul a
Dim aodesej ada
aodesej ada = _
InputBox("Entrar com uma ao matemtica (Ex: / 10
If aodesej ada = "" Then Exit Sub
For Each cl ul a In Selection
If Not IsEmpty cl ul a Then
'Faa isto se a clula no estiver vazia
If IsNumeric(cl ul a. Val ue) Then
to desde que a clula seja numrica 'Faa is
If Left( cl ul a. For mul a, 1) = " =" Then
'Faa isto desde que a clula contenha uma equao
c

" ) " & aodesej ada
Else
'Faa isto desde que a clula contenha um nmero
cl ul a. For mul a = _
" =" & cl ul a. For mul a & aodesej ada
End If 'Fim do teste If Left
este IsNumeric End If 'Fim do t
End If 'Fim do teste Not IsEmpty
Next cl ul a
End Sub

Bertolo Lies de VBA do Excel 97

Se voc mudar a capitalizao
declarao de variveis (Dim aodese
na macro quando voc se mover para fora da linha Dim. Mude a capitalizao e mova-
se para fora da linha para ver isto acontecer.

Se voc no salvou o seu arquivo, por favor,
deveria adquirir o hbito de salvar muito freqen

ANTES DE VOC TESTAR,
oto d
da varivel aodesej ada em seu comando
j ada), a capitalizao muda em todos lugares
faa-o ento neste momento! Voc
temente o seu trabalho.
voc precisa mudar o macro atribuindo-a a seu
a barra de ferramentas. Se voc no fizer a seguinte caixa de erro vai estourar na
desde que o nome de DividirPor100 foi mudado para AesMatemticas.
Exibir, Barra de ferramentas, Personalizar
Sel
entrar com "*100 - 456".
b
sua frente








Tente seu boto - o que est acima aparecer! Para consertar faa o seguinte:

Selecione
Clique com o boto direito do mouse sobre o boto de sua macro. Selecione
'Atribuir Macro' do painel que aparece.
ecione a macro "AesMatemticas" e feche todas as caixas.

Uma vez tendo feito as mudanas anteriores, voc pode voltar planilha de teste e
testar a macro nova melhorada. Voc a achar bastante poderosa. Voc no s pode
entrar com aes de matemtica como " / 100 " ou " * 5 ", como tambm voc pode
entrar com aes complexas. Por exemplo, voc poder

Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 98

MANIPULANDO ERROS

la chamada de armadilha de erros. Quando um deles ocorrer, a declarao
ente executada. Neste caso a declarao "GoTo
ere o controle para a

Se voc entrar com uma ao de matemtica complexa incorreta (Ex: "*/*456"), sua
macro explodir com a mensagem de erro seguinte:










Tambm explodir se voc tentar modificar uma clula que contm uma frmula e
esquecer de pr nela o operador de matemtica (Exemplo: 1000 em vez de em * 1000).

Seria muito melhor se exibisse uma mensagem que mostrasse a ao de
matemtica que fora entrada nela e uma mensagem que diga que o Microsoft Excel no
pode modificar clulas que usam aquela entrada de ao de matemtica. Para fazer isto,
duas mudanas tm que ser feitas na macro. Primeiro, adicione a linha seguinte logo
acima da linha For Each.

On Error GoTo er r oMsg

E, coloque a seguinte declarao aps a declarao "Next cl ul a".

Exit Sub
er r oMsg:
MsgBox "No pode modificar clulas usando " & aodesej ada
Exit Sub

A frase On Error uma declarao do Visual Basic que monitora sua macro por
erros. E
que segue On Error imediatam
er r oMsg". GoTo uma declarao do Visual Basic que transf
localizao especificada aps a palavra GoTo. Neste caso, o Visual Basic procurar um
rtulo (label) na macro chamado "er r oMsg: ". Um rtulo consiste de um nome seguido
por

dois pontos. Assim, dois pontos so exigidos n
grupo de declaraes que esto sendo adicionadas.
o final de "er r oMsg" no segundo
car os dois pontos aps o nome de rtulo , voc obter a
seguint
Se voc esquecer de colo
e mensagem de erro quando voc rodar a macro:





Bertolo Lies de VBA do Excel 99







Nenhum erro ocorrer se voc colocar os dois pontos aps o nome de rtulo quando
voc se referir a ele numa declarao GoTo.

A primeira das duas declaraes Exit Sub pra a macro se nenhuma mensagem
de erro ocorrer. A segunda Exit Sub pra a macro se ela saltar o rtulo er r oMsg: . A
macro ser sempre parada pela linha End Sub, voc dever tambm colocar uma linha
Exit Sub aps rotinas de erros. Esta exatamente uma boa tcnica de programao.
MsgBox uma funo do Visual Basic que mostra mensagens na tela. O texto a ser
mostrado deve estar entre aspas duplas. Se voc estiver combinando texto e variveis,
ento eles so concatenados usando um smbolo &. Note que espaos so exigidos de
cada lado do smbolo &. Caso contrrio um erro poder ocorrer. Tambm, nomes de
variveis no ficam entre aspas duplas.

O que segue o que a macro modificada se parece:

Sub AesMatemticas ( )
' Est a macr o modi f i ca as cl ul as baseada em uma ao
mat emt i ca que o usur i o ent r a

Dim cl ul a
Dim aodesej ada

Obtenha uma entrada do usurio
aodesej ada = _
I nput Box("Entrar com uma ao matemtica (Ex: / 100)")
If aodesej ada = " " Then Exit Sub

On Error GoTo er r oMsg

For Each cl ul a In Sel ect i on
If Not IsEmpty(cl ul a) Then
'Faa isto se a clula no estiver vazia
If IsNumeric(cl ul a. Val ue) Then
'Faa isto desde que a clula seja numrica
If Left(cl ul a. For mul a, 1) = " =" Then






Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 100

'Faa isto desde que a clula contenha uma equao
cl ul a. For mul a = _
" =( " & Mi d( cl ul a. For mul a, 2) & _
" ) " & aodesej ada
Else
'Faa isto desde que a clula contenha um nmero
cl ul a. For mul a = _
" =" & cl ul a. For mul a & aodesej ada
End If 'Fim do teste If do sinal de igual
End If 'Fim do teste IsNumeric
End If 'Fim do teste Not IsEmpty
Next cl ul a

Exit Sub

er r oMsg:
MsgBox "No pode modificar clulas usando " & aodesej ada
Exit Sub

End Sub

V agora testar a planilha e testar a macro. Desta vez, coloque a entrada "* /
100" na caixa de entrada ao invs de "/ 100". Quando voc fizer isso, a seguinte caixa
de mensagem aparecer:







Finalmente, volte e teste o macro em todos os tipos diferentes de clulas. Voc
achar que ela funciona exatamente como ns queramos, com uma exceo: Se uma
clula contm um nmero e voc entra em um nmero sem um operador de matemtica
(+. -. *, /), a macro combinar os dois nmeros em um: Por exemplo, se a clula que
modificada contm o nmero 1234 e voc entra em 100 (no /100) na caixa de entrada,
voc obtm 1234100. No totalmente a resposta certa. Para resolver este problema,
ns precisamos testar a entrada na caixa de entrada e ver se o primeiro carter um
operador de matemtica. O cdigo a seguir realiza esta tarefa:

Private Sub Checar Pr i mei r oCar act (ent r adaPar aChecar )
Dim pr i mei r oCar act
'checar texto para ver se a entrada um operador matemtico

pr i mei r oCar act = Left(LTrim(ent r adaPar aChecar ), 1)
If pr i mei r oCar act = "+" Or _
pr i mei r oCar act = "-" Or _
Bertolo Lies de VBA do Excel 101

pr i mei r oCar act = "*" Or _
pr i m
pr i m
Exit S
End If
End Sub

a macro separada que ser chamada pela macro
acro que chamada por outra macro chamada sub-rotina.
Pondo a palavra chave Private na frente da declarao de Sub desta macro
Checar Pr i mei r oCar act , esta no se apresentar quando voc selecionar
Ferramentas, Macro dos menus. Isto normalmente feito em sub-rotinas, pois elas
somente so rodadas quando forem chamadas por uma macro.

Para chamar a sub-rotina anterior, insira a seguinte declarao na macro de
AesMatemticas imediatamente acima da declarao On Error:

Checar Pr i mei r oCar act aodesej ada

Esta declarao diz ao Visual Basic para ir macro chamada
Checar Pr i mei r oCar act e passar a ela o valor da varivel aodesej ada. A macro
ento a
funo LTrim e a funo Left para encontrar qualquer branco na frente do texto
armazenado na varivel Ent r adaPar aChecar e obter o primeiro caracteree. A macro
ento verifica se aquele primeiro caracteree um smbolo +, -, *, / ou ^ . Se for, o
controle retornado macro AesMatemticas. Se no for, uma caixa de mensagem
aparece dizendo que a entrada est incorreta. Ela ento usa a declarao End que por si
s pra toda a atividade de macro. Se uma declarao Exit Sub tivese sido usada na
sub-rotina em vez da declarao End, o controle teria retornado para a
AesMatemticas, e a macro AesMatemticas teria continuado.

O que se segue so as macros finais. Note que os comentrios foram
adicionados para facilitar a documentao das macros:

Sub AesMat emt i cas( )
' Est a macr o modi f i ca as cl ul as baseadas nas aes mat emt i cas
ent r adas pel o ' usur i o
Dim cl ul a
Dim aodesej ada
' Obt enha a ao mat emt i ca que o usur i o quer i nt r oduzi r
ei r oCar act = "/" Or _
ei r oCar act = "^" Then
ub
Else
'Mostrar mensagem e parar a macro
MsgBox "Sua ent r ada no comea " & _
" com+, - , * ou / . At i vi dade i nt er r ompi da. "
End
O anterior de fato um
AesMatemticas. Uma m
Checar Pr i mei r oCar act guarda o valor que passado pra ela numa varivel
chamada Ent r adaPar aChecar . A macro Checar Pr i mei r oCar act usa
Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 102

aod
' Ence
a sub- r ot i na par a conf i r mar que o pr i mei r o car act er ee
umoper ador ' mat emt i co
Checar Pr i mei r oCar act aodesej ada
' ver i f i car se na ao i nt r oduzi da se ocor r eu umer r o
On Err r GoTo Er r or Msg
' ci r c
If Le
cl ul a. For mul a = _
" =( " & Mi d( cl ul a. For mul a, 2) & _
" ) " & aodesej ada
Else
' Faa i st o desde que a cl ul a cont enha umnmer o
cl ul a. For mul a = _
" =" & cl ul a. For mul a & aodesej ada
End If ' Fi mdo t est e de si nal de i gual
End If ' Fi mdo t est e I sNumer i c
End If ' Fi mdo t est e Not I sEmpt y
' r et or ne no c r cul o e f aa na pr xi ma cl ul a
Next cl ul a
' t er mi nar a macr o quando t odas as cl ul as f or empr ocessadas
Exit Sub
venha aqui se exi st i r umer r o quando a f or mul a escr i t a er r ada
Er r or Msg:
MsgBox "No se pode modificar a clula usando" & aodesej ada
Exit Sub
End Sub

'******************************************************

Private Sub Checar Pr i mei r oCar act ( ent r adaPar aChecar )
' est a sub- r ot i na chamada pel a AesMat emt i cas par a conf i r mar se
umoper ador ' mat emt i co o pr i mei r o
' car act er e no t ext o que ent r ado.
Dim pr i mei r oCar act
' checar o t ext o par a ver se a ent r ada umoper ador mat emt i co
pr i mei r oCar act =Left(LTrim(ent r adaPar aChecar ) , 1)
If pr i mei r oCar act = " +" Or _
pr i mei r oCar act = " - " Or _
esej ada = _
InputBox("Entrar com ao matemtica (Ex: / 100)")
r r ar se nenhuma ao f or ent r ada o se sel eci onar Cancel ar
If aodesej ada = " " then Exit Sub
' chamar
o
ul e at r avs de cada cl ul a na sel eo
For Each cl ul a In Sel ect i on
' f aa as aes segui nt es se a cl ul a no est i ver vazi a
If Not IsEmpty(cl ul a) then
' Faa i st o se a cl ul a no est i ver vazi a
If IsNumeric(cl ul a. Val ue) Then
' Faa i st o desde que a cl ul a sej a numr i ca
ft(cl ul a. For mul a, 1) = " =" Then
' Faa i st o desde que a cl ul a cont enha uma equao
Bertolo Lies de VBA do Excel 103

pr i mei r oCar act = " *" Or _
pr i mei r oCar act = " / " Or _
pr i mei r oCar act = " ^" Then
Exit Sub ' r et or na macr o que a chamou
End
End If

End Sub

'******************************************************
RESUMO DA LIO

Nesta lio, voc criou no s uma macro muito poderosa e til, voc tambm
aprendeu bastante a respeito do Visual Basic e de como escrever macros. Por exemplo,
voc sabe descobrir o que est em uma clula agora e como mud-la. Mais adiante,
voc viu como escrever uma macro que trabalhar em todas as clulas que voc
selecionou e no em s numa nica clula. E, voc viu como perguntar ao usurio pelas
entradas e exibir mensagens de volta a ele.

Se voc s leu esta lio e no fez os exerccios, voc precisa voltar e fazer os
exerccios. S fazendo voc ir aprend-los verdadeiramente.

Finalmente, voc encontrar algumas tcnicas e comandos adicionais mais tarde
que vo
Else
' Most r a uma mensageme pr a a macr o
MsgBox "Sua entrada no comea " & _
"com +, -, * ou /. Atividade parada"
c poder usar para agilizar e melhorar a macro anterior. Prossiga e faa isto. A
macro anterior foi escrita de modo a ilustrar as declaraes do Visual Basic ao invs de
ser um conjunto bem eficiente de declaraes para fazer a tarefa. Por exemplo, voc
pode querer substituir o InputBox com um userform. Ou, voc pode querer modificar a
macro de forma que ela se lembre da ltima entrada.

Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 104

OUTR
trar com os 10 primeiros
nomes
os agora criar um novo mdulo. V para o VBE e clique com o boto
direito do mouse no projeto "VBATeste1" entro da J anela VBA project e selecione
"Inserir/Mdulo". Voc agora tem um novo mdulo. Na janela de propriedades, d um
duplo c or
esenvolver uma macro.
Escreva "Sub proTeste2 ()" e clique "Enter". O VBE adiciona uma linha "End
Sub". Ns escreveremos nosso cdigo entre estas duas linhas, assim crie alguma coisa
para ela
as pessoas possam
entrar em contato comigo se elas tiverem problemas com meus procedimentos VBA.
Clique "Enter" novamente par inserir uma vazia linha. No hesite em inserir
linhas v
R
D
Sel ect i on. Of f set ( 1, 0) . Sel ect
Loop
Range( " A1" ) . Sel ect
As primeiras 2 linhas dizem ao VBA onde comear o procedimento. Se voc no
mencion-las o VBA comear o procedimento de qualquer clula que estiver
selecionada na sua pasta.
As linhas 5 at 7 a tarefa real que voc quer que o VBA realize. Voc est
dizendo: de alguma coisa para o valor da clula 2 colunas esquerda da clula
O EXEMPLO
Vamos agora criar uma outra macro mais simples. Abra o Excel, abra a pasta
"VBATeste1.xls" aquela que voc criou na lio.... . Adicione uma folha de planilha
sua pasta e renomeie-a "Teste2" (clicar com o boto direito do mouse na guia, escolher
"Renomear" e digitar nela o nome). Na clula A1 a A10 en
de algumas pessoas e nas clulas B1 at B10 entrar com os 10 ltimos nomes
daquelas pessoas.
Vam
d
lique na caixa da propriedade "(Name)" e entre com "modTeste2". Temos ag a
um novo mdulo com um novo nome.
Na janela VBAProject d um clique na folha de planilha chamada "Teste2". Na
janela de propriedades d um duplo clique na caixa de propriedade "(Name)" e entre
com "folTeste2". Voc agora tem uma folha de planilha com um caption lendo "Teste2"
e com o nome "folTeste2".
Na janela VBAProject d um duplo clique sobre "modTeste2"" e v para a janela
de cdigo para d
definindo o cursor no final de "End Sub" e clicando "Enter" umas poucas vezes.
Logo abaixo de "Sub proTeste2()" escreva seu nome precedido por uma
apstrofe (') ' Luiz Bertolo e clique "Enter". Note que a fonte na linha que voc acabou
de escrever verde. Por causa da apstrofe o VBA considerar o texto como um
comentrio (remark -REM) e no se incomodar com ele. Voc pode adicionar um
nmero qualquer de linhas REM em qualquer lugar para tornar o seu cdigo inteligvel.
Eu geralmente sempre comeo meus procedimentos com trs linhas Rem (meu nome,
meu nmero de telefone e o endereo do meu website) de modo que
azias em qualquer lugar para tornar seu cdigo mais facilmente legvel.
Aqui esto as 6 linhas de cdigo que voc estar escrevendo (ou copiar/colar
daqui):
f ol Test e2. Sel ect
ange( " C1" ) . Sel ect
o Unt i l Sel ect i on. Of f set ( 0, - 2) . Val ue = " "
Sel ect i on. Val ue = Sel ect i on. Of f set ( 0, - 2) . Val ue & " " &
Sel ect i on. Of f set ( 0, - 1)
Bertolo Lies de VBA do Excel 105

selecion zio (aspas duplas). Com a clula s ada em va
por ltimo a tarefa encerrar. Se houver um primeiro nome voc faz outra vez
p (ltima linha da declarao).
Qual a tarefa: torne o valor da clula selecionada igual ao valor da clula a 2
colunas esquerda, (&) um espao (espao entre duas aspas duplas) (" "), e o valor da
clula a 1 coluna q
elecionada uma linha aps onde
estava
seu loo
sso a passo na prxima lio.
es uerda da clula selecionada. Da mova-se para baixo uma clula.
Quando a tarefa tiver sido efetuada v para a clula A1.
Agora volte ao Excel v para "Ferramentas/Macro/Macros" selecione a macro
"proTeste2" e clique "Executar". Apague a coluna C e faa isto novamente. Adicione o
primeiro e o ltimo nome de pessoas sua lista e faa isto novamente.
Congratulaes por voc ter criado o seu primeiro procedimento VBA.
Ns o testaremos pa
Bertolo Lio #06 Escrevendo Macros no Visual Basic Editor do Excel 106

PRTICA
Bertolo Fase #1: Desenvolvendo Procedimentos VBA em Excel 107

Lio 7: Testando Macros no Visual Basic Editor para Excel
asso
pasta na

o
ei as
qui est uma maneira muito interessante de testar uma macro passo a p
enquanto voc a acompanha trabalhando na pasta Excel.
Feche cada um dos programas do seu computador. Abra o Excel e a
qual voc criou a macro. Abra o Visual Basic editor. Na barra de status do Window no
fundo de sua tela voc pode ver que o Excel est aberto e o VBE tambm. Clique com
boto direito do mouse na barra de status no espao vazio onde onde eu adicion
estrelas laranjas:
A

O menu seguinte aparece:






Clique em "J anelas lado a lado verticalmente" e a tela se parecer com isto:
Bertolo Lio #07 Testando Macros no Visual Basic Editor 108

A pasta Excel ocupa metade da tela e o VBE ocupa a outra metade. Torne a
" na linha acima. Clique na pequena seta, segure e arraste
e. Voc
ser. Voc
a macro passo a passo voc pode parar a
nte clicando no boto parar na barra de ferramentas.
J anela de Cdigo mais larga no VBE de modo que voc possa ver todo o cdigo.
Clique em qualquer lugar dentro da macro e pressione a tecla F8 no topo do seu
teclado. A primeira linha de cdigo torna-se amarelo e a pequena seta aparece na
margem.




Clique novamente em F8 at toda a macro ter sido executada. Apague os valores
da coluna B do Excel e inicie a macro novamente. Pare quando a linha "Do" for
destacada. Mude "B1 para B5
a seta de volta para a nova linha "Range("B5").Select". Pressione F8 novament
v que se voc modificar o cdigo e pode voltar um passo sempre voc qui
e testar somente parte do procedimento. pode mesmo pular certas linhas de cdigo
Enquanto voc estiver rodando
execuo em qualquer insta
Bertolo Fase #1:Desenvolvendo Procedimentos VBA em Excel 109

Lio 8: Eve
uando a macro inicia? Qu
dispara a m
Do Menu
No Excel v
"Ferramentasl/
ntos VBA No Excel
Q
ando um EVENTO acontece. O evento aquilo que
acro VBA do Excel.
oc pode rodar uma macro VBA do Excel indo ao menu
Macro/Macros.." da selecionar a macro na lista e clicar "Executar".

Abra muitas pastas com macros nelas. Quando voc for ao menu
ros.." voc notar que voc tem acesso a todas as macros de
oc pode armazenar TODAS as suas macros
myMacros.xls) e tenha acesso a elas enquanto
ver aberta. Digamos por exemplo que voc tenha projetado a macro que
multipl
Excel de qualquer clula de qualquer outra pasta que esteja aberta.
das as suas pastas apenas abra
rimeiro voc precisa programar uma tecla. Para fazer isto v a
"Ferramentas/Macro/Macros.." da selecione uma macro da lista. Clique nas "Options"
e siga as instrues. Uma sugesto, atribua s suas macros teclas maisculas ("Shift/A"
em vez de "Shift/a por exemplo) para garantir-se de que voc no usa uma das muitas
teclas m nsculas que j so usadas pelo Excel.
Clicando numa caixa de texto na planilha
80% da de
"Ferramentas/Macro/Mac
todas as pastas abertas. Isto significa que v
el numa nica pasta (chame-a teis do Exc
a pasta esti
ica o contedo de uma clula por 2. Se "myMacros.xls" est aberta voc pode
chamar esta macro
No precisa copiar suas macros essenciais em to
myMac . e coloque-as para trabalhar. ros xls
Clicando numa Tecla do seu Teclado
P
i
s macros Excel que eu desenvolvi so disparadas por um clique numa caixa
texto localizada sobre uma planilha.
Bertolo Lio #08 Eventos VBA no Excel 110

Eu prefiro usar caixas de texto ao invs de botes de comando VBA porqu
so muit
e elas
o mais fceis de manter e permitir muito mais criatividade no design. Voc
pode usar the fonte que voc gosta e a cor de fundo (background) que ajuste s suas
necessidades. Se voc for um pouco criativo, voc pode adicionar efeitos 3D, bordas
especiais e as preferncias.
Umas poucas notas sobre as caixas de texto do Excel:
Eu mantenho sempre a barra de ferramentas de desenho visvel no fundo da
minha tela

Voc cria caixas de texto clicando com o boto esquerdo do mouse no cone ,
da v planilha clique com o boto esquerdo do mouse, segurar e esticar a caixa de
texto. Quando a borda da caixa de texto ativa for feita de linhas em diagonal voc pode
trabalhar o texto dentro da caixa de texto. Se voc clicar novamente na borda ela torna-
se um conjunto de pontos e voc pode ento trabalhar a prpria caixa de texto. D um
clique com o boto direito do mouse na borda em qualquer dos dois estados e voc ver
que os menus so diferentes. no segundo estado que voc pode atribuir uma macro
caixa de texto.
Voc pode atribuir uma macro VBA para uma caixa de texto e tambm para um
WordArt, uma figura ou qualquer outra forma da barra de ferramentas de "Desenho".
Sempre que a um boto (imagem, a palavra arte ou caixa de texto) tiver sido atribuida
oc precisa selecion-lo com um clique com o boto
direito
uma macro ou um hyperlink v
do mouse para modific-lo.
Download um destes botes (clicar com o boto direito do mouse nele no seu
browser e escolher "Save imagem as"). Salve-os no seu desktop:


Inserir a imagem que voc tiver importado na primeira folha de planilha
rquivo/Desktop/..........gif". Uma vez a imagem tendo sido
ouse na imagem,
ro da lista. Clique "OK".
m.
todas espcies de botes da Internet ou criar seu prprio da
seus procedimentos VBA.
"Inserir/Figura/Do A
adicionada folha de planilha, clicar com o boto direito do m
selecione "Atribuir Macro" e selecione uma mac
Agora clique na image
Voc pode "copiar"
rra de ba ferramentas "Design" e us-los para disparar
Bertolo Fase #2: Desenvolvendo Procedimentos VBA em Excel 111

Lio 9: Segurana e Proteo VBA no Excel
lgumas vezes quando voc nvia uma pasta com macros nela a um
colega e ele no consegue trabalhar com elas provavelmente porque
a est em "High". Logo lhe direi como mud-la
m "Fe
e
ode desenvolver procedimentos VBA
acro ente. Ento defina o
e cada
logo



ados a Emails.
o clique em
inteiramente protegido. Voc pode observar a pasta
as os ode ir para quaisquer
s m ction" significa que o
s do Microsoft Windows
digo
para
e a caixa e submeta um
m algum lugar que voc se lembrar
otegendo a Pasta
o que voc pode configurar para a pasta.
rimeir am
Para fazer isto no Excel v ao "Arquivo/Salvar como" e clique em
A
e
sua definio de seguran
e rramentas/Macros/Segurana".
Um arquivo Excel (.xls) no pode ser infectado por um destes vrus qu
aparecem regularmente na Internet mas algum p
(m s) que possam danificar seus dados e seu computador seriam
nvel de segurana do Excel para "Medium" (Ferramentas/Macro/Segurana)
vez que voc estiver tentando abrir uma pasta que contenha macro a janela de di
seguinte aparecer.









Adotar a mesma atitude quando voc tiver com documentos anex
Se voc conhece a origem do arquivo voc pode habilitar as se n
"Desativar macros" e voc estar
m procedimentos VBA (macros) no so operacionais. Voc p
do dulos ou outros elementos da pasta que voc ver " PI Fun A
programador est tentando acessar seu computador atrav
SPEITO. ISTO SU
Protegendo o cdigo
Como um Desenvolvedor VBA-Excel voc poder querer proteger seu c
de modo que ningum deva modific-lo. No VBE editor v
"Ferramentas/VBAProject Propriedades/Proteo". Marqu
password. Verifique se voc salvou o password e
porque crackear passwords VBA muito custoso.
Pr
Existem muitos nveis de prote
P o voc deve querer proibir qualquer um de abrir a pasta a menos que eles saib
o password.
"Ferramentas/Opes Gerais".
Ocultando Planilhas
Bertolo Lio #09 Segurana e Proteo no VBA do Excel 112

Numa de suas pastas voc poder querer ocultar uma folha de planilha que
e outros parmetros). Se voc apenas ocultar
ib-las. Existe uma maneira no VBA para
a pasta inteira. Para ver a folha de planilha
isual Basic Editor e mudar a propriedade da folha de planilha. Se o
m a folha de
do.
eryHidden.
mediata
s ver o cdigo sendo executado e o
e
o imediata para ver os resultados
contenha informao confidencial (salrios
a folha de planilha os usurios podem reex
ocultar uma folha de planilha sem proteger
tem-se que ir ao V
seu cdigo estiver protegido, ele tambm precisa de um password. Assi
planilha muito hidden e somente voc pode obt-la para modificar seu conte
Selecione a folha de planilha na janela VBAProject e configure a propriedade visible
como xlV
A Janela de Verificao i
Na de Verificao imediata (Crtl +G) podemo
que retornado pelo cdigo. Veja a figura abaixo.
Ela mostra, passo a passo, os resultados para um loop, por exemplo, conform
eles ocorrem. Neste caso usamos a janela de Verica
de um loop que vai encontrado os valores de Y de uma funo quadrtica (3x
2
+ 2x +
5), para x variando de 1 a 5.












o cdigo sendo execut mos pressionar a
m modo de depurao inha a ser executada precisamos
travs da tecla F8. Est orm, pode ser muito eficiente.
mplo acima enha sido avaliado e os
o corretos. No precisamos executar o loop passo a
s, colocamos um ponto de i na parte que desejamos avaliar.
ente interrompido no ponto por ns definido.
nha e v em Depurar/Ativar ou desativar pontos de interrupo
(F9)







Para vermos ado linha por linha, pode
tecla F8 para entrar e
acionar a execuo a
. Para cad l
e mtodo, p
Vamos supor que neste exe
clculos/frmulas so dados com
o loop j t
passo. Ao inv
Todo o cdigo anterior executado e som
nterrupo
Para isso, selecione a li

Fase # 2: Cdigo VBA do Excel (macros)
alavras e sentenas (cdigo Lio 1: P ) em VBA do Excel - Lio 2:
Trabalhando com o Application - Lio 3: Trabalhando com Workbooks -
Lio 4: Trabalhando com Worksheets - Lio 5: Trabalhando com
Clulas e Ranges - Lio 6: Trabalhando com Caixas de Mensagens -
Lio 7: Trabalhando com Caixas de Entrada - Lio 8: Trabalhando com
Erros
Lio 1: Palavras e sentenas (cdigo) em VBA do Excel
Umas poucas notas e dicas teis ao se escrev VBA.
Applicati
er cdigo
Lio 2: Trabalhando com o on
O objeto "Application" o Excel, o prrio programa. Como congelar a tela enquanto a
evitar mensage Um arquivo j existe com este
nome, voc quer fazer....", como desativar e reativar clculos, como modificar o
en" ou "SaveAs" nelas de dilogos etc..
hando com Workbooks
macro estiver rodando, como ns como "
ponteiro, para abrir o "Op e outras ja
Lio 3: Trabal
Propriedades e mtodos da "ThisW
folha de planilha onde a
orkbook" "ThisWorkbook" a
macro est voc acabou de fech-la com o cdigo
qual ele reside com
om Worksheet
e de outras pastas.
ThisWorkbook.Close e voc pode encontrar o diretrio no
ThisWorkbook.Path
Lio 4: Trabalhando c s
Trabalhando com planilhas ativando
planilha...
-as, impr a outra folha de
rabalhando com Clulas e R
imido-as, copiando-as num
Lio 5: T anges
Movendo-se entre clulas e ranges, valores,
Contando o nm
frmulas e outras propriedades e mtodos.
ero de linhas e colunas para definir os limites de seus loops
(For...Next, Do...Loop, etc..).
Lio 6: Trabalhando com Caixas de Entrada
A ferramenta bsica a exigir um pedao de informao nico do usurio. Quando voc
move para os userforms (a parte divertida do VBA)
Lio
concretizar seus limites voc
7: Trabalhando com Caixas de Mensagens
Um modo fcil para comunicar-se com o usurio.
Lio 8: Trabalhando com Erros
Quando um erro ocorre voc no quer que seu usurio fique preso mensagem de erro
do VBA . Voc quer dizer-lhe o que est errado e dizer-lhe como fixar o problema. Voc
no quer que seu procedimento apenas EXPLODA.

Bertolo Fase #2: Cdigo VBA do Excel (Macros) 114

Lio
mo criar procedimentos VBA (macros) numa lio anterior.
voc encontrar muitos deles, pequenos, ilustrando os diferentes
acontec e
as dicas gerais. No hesite em usar o
esso. Escrever seu cdigo em letras
insculas. Se a ortografia estiver correta, o VBE colocar em maisculas as letras
ecessrias. Se no, verifique sua ortografia. Note:Aspas dentro de aspas devem ser
dobradas por exemplo:
MsgBox " Meu nome Ber t ol o" est OK e resultar em: Meu nome Bertolo
Mas se voc quiser o nome Bertolo fique entre aspas voc no pode escrever:
MsgBox " Meu nome " Ber t ol o" "
voc deve dobrar as aspas:
MsgBox " Meu nome " " Ber t ol o" " "
Nomeie TODAS
1: Dicas Gerais do Cdigo VBA
oc aprendeu co
Nesta lio
objetos, mtodos e propriedades que voc pode usar para fazer as coisas
erem no VBA do Excel. Voc descobrir tambm declaraes, funes
variveis.
V
Vamos iniciar por meio de umas pouc
gravador de macro para evitar erros de impr
m
n
as clulas e ranges que voc usar no seu cdigo de modo que
se os seus endereos mudarem (adicionando ou deletando colunas ou linhas, etc...), seu
cdigo no fica invalidado.
Nomeie todas suas folhas de modo que se um usurio mudar o ttulo (caption)
seu cdigo no fica invalidado. Na janela de projetos do VB Editor, quando voc
selecionar uma folha a J anela de propriedades lhe permite mudar ambos o nome a usar
no procedimento "(Name)" e no caption "Nome" da folha que usado na guia da folha.
Sempre use o "(Name)" para desenvolver seus procedimentos. Por exemplo:
Sheet 1. Sel ect ou f ol Pr ogr amacaoNome. Sel ect
ainda funcionaro mesmo se o usurio mudar o caption da folha na guia.
Sheet s( " pl an1" ) . Sel ect
ser invalidada se o usurio mudar o nome da folha na guia.
Sempre ativar a "Option Explicit". Embora, voc seja forado declarar
variveis, existem muitas outras vantagens. Se voc tiver um erro de ortografia para a
sua varivel, o VBE lhe dir. Voc deve sempre garantir que suas variveis so
consideradas pelo VBE. Voc pode usar Shift/Space para chamar suas variveis num
menu contextual e dar duplo clique nelas para ajust-las.
Declare todas suas variveis, (Dim), no comeo do procedimento, ele
simplificar o teste do seu cdigo.
Bertolo Fase #2: Cdigo VBA do Excel (Macros) 115


Lio 2: Cdigo VBA do Excel para o Objeto Application
bjeto Application
O Application um objeto VBA, ELE O PRPRIO EXCEL. Sempre que

voc quiser que o Excel faa alguma coisa ou se voc quiser mudar as
propriedades do Excel, voc usar o objeto Application. Atravs dele, ento,
podemos configurar o Excel em termos de visualizao, execues e outras
funcionalidades.
Este objeto importante possui muitas propriedades e mtodos. Vejamos algumas
delas:
O
Propri
ta na qual existem um monte de
frmulas e voc quiser desativar temporariamente os clculos voc usar:
l cul at i on = xl Manual (No esquea do xl antes de Manual)
e
Appl i
o do procedimento voc quiser que uma nica folha seja
CutCo
Copiar/Colar, voc dever esvaziar o clipboard com a
a ficar seguro de que a memria do computador no
e
Appl i
mostrar quaisquer das janelas de dilogo do Excel voc usar o seguinte
cdigo
xl Di al ogOpen) . Show
o voc digitar esta sentena, to logo voc abrir os parnteses o
VBE lh
migo VBE lhe oferece outra lista para voc escolher
scolhido Show.
edade Calculation
Quando voc estiver trabalhando com uma pas
Appl i cat i on. Ca
CERTIFIQUE-SE de que no final do procedimento voc adicionou esta linha d
cdigo:
cat i on. Cal cul at i on = xl Aut omat i c
Se durante a execu
calculada voc usar:
Act i vesheet . Cal cul at e
pyMode
Aps cada operao
seguinte linha de cdigo par
sobrecarregou.
Act i veSheet . Past
cat i on. Cut CopyMode=Fal se
Dilogos
Para
(exemplo):
Appl i cat i on. Di al ogs(
Note que quand
e oferece a lista de todas as janelas de dilogo do Excel.







Aps digitar o ponto o a
dentre os itens. Neste caso foi e
Bertolo Lio #02 Cdigo VBA do Excel para o objeto Application 116

Neste exemplo ser mostrada a janela d
abaixo:
e dilogo ABRIR, como mostrado



s Propriedade DisplayAlert
Habilita ou desabilita a exibio de mensagens de aviso como resposta de vrias
aes no Excel. True habilita as mensagens e False as desabilita.
Quando voc no quiser que o Excel lhe pergunte coisas como "Um arquivo j
c quer salvar este arquivo..." voc usar o seguinte linha de cdigo
procedimento VBA.
Sub E
s = Fal se
Appl i cat i on. Wor ksheet s( pl an3) . Del et e
LAN3 f oi excl u da semnenhuma
e pl ani l ha PLAN2 f oi excl u da comuma

existe....." ou "Vo
no comeo do seu
Appl i cat i on. Di spl ayAl er t s = Fal se
E da ento no final:
Appl i cat i on. Di spl ayAl er t s = Tr ue
Vamos a um outro exemplo:
xcl ui r Fol ha( )
Appl i cat i on. Di spl ayAl er t
ani l ha P
mensagem. . .
MsgBox A f ol ha de pl
Appl i cat i on. Di spl ayAl er t s = Tr ue
Appl i cat i on. Wor ksheet s( pl an2) . Del et e
MsgBox A f ol ha d
mensagemde avi so. . .
End Sub
Bertolo Lies de VBA do Excel 117


Neste exemplo anterior aparece
excluso da PLAN2:
r a seguinte mensagem de aviso quando da

Propriedade DisplayFormulaBar
:
Publ i
Fal se

gBox A bar r a de f r mul a acaba de ser habi l i t ada


da

te de maximizar a aplicao.
= Tr ue

gBox A t el a vol t ou ao modo nor mal
mos ou excluimos linhas ou
ores:
Appl i
Exibe ou oculta a barra de frmulas do Excel como mostra o exemplo a seguir
c Sub Bar r aDeFor mul a ( )
Di mRespost a As VbMsgBoxResul t
Appl i cat i on. Di spl ayFor mul aBar =
MsgBox A bar r a de f r mul as est agor a desabi l i t ada
Respost a = MsgBox ( Voc quer habi l i t - l a novament e?,
vbYesNoCancel Or vbQuest i on, Habi l i t ao da bar r a de
f r mul as)
I f Rspost a = vbYes Then
Appl i cat i on. Di spl ayFor mul aBar = Tr ue
Ms
novament e
El seI f Respost a = vbNo Then
MsgBox Voc cl i cou emNo. A bar r a de f r mul as
cont i nuar desabi l i t a
El se
MsgBox Voc cl i cou emCancel ar . A bar r a de f r mul as
cont i nuar desabi l i t ada
End Sub
Propriedade DisplayFullScreen
Exibe o Excel em tela cheia, diferen
Publ i c Sub Tel aChei a ( )
Appl i cat i on. Di spl ayFul l Scr een
MsgBox A t el a est no modo de Tel a Chei a
Appl i cat i on. Di spl ayFul l Scr een = Fal se
Ms
End Sub
Propriedade EnableAnimations
Essa propriedade ativa animao quando inseri
colunas de uma planilha. Podemos ter os seguintes val
cat i on. Enabl eAni mat i ons = Tr ue
Appl i cat i on. Enabl eAni mat i ons = Fal se

Propriedade EnableAutoComplete
Bertolo Lio #02 Cdigo VBA do Excel para o objeto Application 118

Esta propriedade habilita ou desabilita o recurso de AutoCompletar textos j
conhec

que mostra uma tecla ou combinao de teclas que serviro
de atalh
A exibe a caixa de dilogo Abrir
desabilit-la:
Appl i
binao de teclas. Para tanto,
ra designar
lista de teclas especiais para o Microsoft Excel. As teclas
t, Ctrl e Alt usam os seguintes prefixos:
idos:
Appl i cat i on. Enabl eAut oCompl et e = Tr ue
Appl i cat i on. Enabl eAut oCompl et e = Fal se
Propriedade EnableSound
Habilita ou desabilita a emisso do beep dentro do Excel.
Appl i cat i on. Enabl eSound = Tr ue
Appl i cat i on. Enabl eSound = Fal se
Mtodo OnKey
O mtodo OnKey o responsvel pela atribuio de teclas de atalho para
procedimentois especficos. Esse mtodo sempre acionado para designar teclas de
atalho no momento de criao (design) de uma macro, quando configuramos essa
opo.
Sua sintaxe :
Appl i cat i on. Onkey( Tecl a, Pr ocedi ment o)
Tecla uma string
o para um determinado procedimento Sub.
Vamos a um exemplo. O atalho de teclado Crtl +
dentro de uma pasta de trabalho. Vamos
cat i on. OnKey ^a,
Para fazer com que o atalho volte sua funo normal, fazemos o seguinte:
Appl i cat i on. OnKey ^a
O argumento Tecla pode assumir qualquer com
designamos as letras como atalho direto e temos teclas especiais pa
combinaes ou outras teclas no-diretas.
Vejamos a seguir uma
combinadas com Shif
Teclas Cdigo
Shift + (sinal de mais)
Ctrl ^ (circunflexo)
Alt % (porcentagem)
Backspace (retorno) {BACKSPACE} ou {BS}
Break (interrupo) {BREAK}
Caps Lock (letras maisculas) {CAPSLOCK}
Bertolo Lies de VBA do Excel 119


Clear (limpar) {CLEAR}
Delete ou Del (apagar) {DELETE} ou {DEL}
Down Arrow {DOWN}
End {END}
Enter (entrar) {ENTER}
Esc (sair) {ESCAPE} ou {ESC}
Help (ajuda) {HELP}
Home (ponto inicial) {HOME}
Ins (inserir) {INSERT}
Left Arrow (seta a esquerda) {LEFT}
Num Lock (bloqueio numrico) {NUMLOCK}
Page Down (pgina abaixo) {PGDN}
Page Up (pgina acima) {PGUP}
Return (retorno) {RETURN}
Right Arrow (seta a direita) {RIGHT}
Scroll Lock (bloqueio de rolagem) {SCROLLLOCK}
Tab (guia para tabulao) {TAB}
Up Arrow (seta para cima) {UP}
F1 a F15 {F1} a {F15}
Mtodo GoTo
Para selecionar uma certa clula voc pode usar
Appl i cat i on. Got o Ref er ence: =Range( " V300" )
ou mais simplesmente
Range( " V300" ) . Sel ect
se voc quiser que esta clula seja sele Mas
topo/esquer
cionada e fique como a clula do
do na sua tela, voc usar
Bertolo Lio #02 Cdigo VBA do Excel para o objeto Application 120

Appl i cat i on. Got o Ref er ence: =Range( " V300" ) , Scr ol l =Tr ue
Mtod
Excel no geral.
Appl i t i on
Scree pda
uand a as aes do seu procedimento VBA,
voc in ia e te nas:
Appl i t i on
Appl i t i on

o Quit
Esse mtodo encerra o Microsoft Excel e d os procedimentos comuns antes da
finalizao, com uma caixa de mensagem perguntando se o usurio deseja salvar a
aplicao.
A seguinte linha de cdigo fecha
ca . Qui t
nU ting
Q o voc no quiser ver sua tela sig
ic rmina seu cdigo com as seguintes sente
ca . Scr eenUpdat i ng = Fal se
= Tr ue ca . Scr eenUpdat i ng
Bertolo Fase #2: Cdigo VBA do Excel (Macros) 121


Lio 3: Procedimentos (Procedures) VBA para Pastas (Workbooks)
m objeto Workbook representa uma pasta de trabalho aberta. Cada objeto
Workbook armazenado em uma coleo Workbooks, que faz parte das
colees do objeto Application, visto na lio 2.
Como um objeto Workbook representa uma pasta de trabalho, podemos acess-
aneira: Workboobs(1) ou pelo
o).
Para voc perceber a diferena entre o objeto Application e o objeto Workbook,
i f er enaDeObj et os ( )

DES do objeto Workbook:
os que uma pasta chamada Nome.xls
om o seguinte:
me.xls
mesmo diretrio
e Th ar o diretrio default "Abrir" com esta linha de
m para ficar seguro de que eu abri ou saveAs
ook
b p
mv
U
lo como um ndice da coleo Workbooks da seguinte m
nome do arquivo Workbooks(nome do arquiv
monte o seguinte cdigo:
Publ i c Sub D
MsgBox Appl i cat i on. Name
MsgBox Wor kbooks( 1) . Name
Retorna o nome da
= o nome-arquivo)
pasta.XLS (ou
End Sub
ThisWorkbook
"ThisWorkbook" um objeto VBA. a pasta dentro da qual os procedimentos
odam. r

Vejamos agora alguma PROPRIEDA
Propriedade FullName
Retorna o Path e o Name do objeto. Digam
fosse salva em C:\Meus Documentos. A declarao:
Wor kbooks( 1) . Ful l Name
Retornar c
C:\Meus Documentos\No
Propriedade Path
Retorna o caminho onde est salva a pasta de trabalho desejada. Digamos que
uma pasta de trabalho chamada Nome.xls fosse salva em C:\Meus Documentos. A
declarao:
Wor kbooks( 1) . Ful l Name
Retornar com o seguinte:
C:\Meus Documentos
Quando voc trabalhar com pastas diferentes que esto todas no
qu isWorkbook voc pode mud
cdigo:
var Pat h= Thi sWor kbook. Pat h
Mas eu prefiro a seguinte abordage
rio que ThisWorkb outras pastas no mesmo diret
Su r oTest e( )
Di ar Pat h as St r i ng
Bertolo Lio #03 Procedimentos (Porcedures) VBA para Pastas (Workbooks) 122

Wor kbooks. Open " past a1. xl s"
var Pat h=Thi sWor kbook. Name
r kbo a1. xl s"
pasta de trabalho j est salva ou no. Se esta propriedade retornar
ue a pasta j foi salva.
e trabalho possui uma senha de acesso. Em caso positivo,
True.
alguns MTODOS deste objeto Workbook:
s do Windows.
r i t es
Close tem alguns
ro
True.
trrio, perguntar ao usurio se deseja salvar a pasta de
kbooks( 1) . Cl ose
ar a pasta ativa, basta:
har a pasta ativa voc escreve:
Wor kbooks. Open var Pat h & " / " & " past a1. xl s"
Wo oks. SaveAs var Pat h & " / " & " past
End Sub
Propriedade Saved
Indi
True, porq
ca se a
Se voc quiser fechar ThisWorkbook sem salv-la:
Thi sWor kbook. Saved = Tr ue
Thi sWor kbook. Cl ose
Propriedade HasPassword
Verifica se a pasta d
seu retorno
Vejamos agora
Mtodo Activate
Este mtodo torna uma pasta de trabalho ativa. Por exemplo,
Wor kbooks( 1) . Act i vat e
Ou
Thi sWor kbook. Act i vat e
Mtodo AddToFavorites
Adiciona um atalho para a pasta de trabalho no menu Favorito
Thi sWor kbook. AddToFavo
Mtodo Close
Este mtodo fecha a pasta de trabalho desejada. O mtodo
parmetros que, se omitidos, vo garantir que o funcionamento da ao seja pad
Windows. O mtodo vai verificar se a propriedade Saved do objeto Workbook
Se for, fechar a pasta; caso con
o. trabalh
Wor
Para fech
Thi sWor kbook. Cl ose
Mtodos Close e Saved atuando juntos
Como vimos acima see voc quiser fec
Act i veWor kbook. Cl ose
Se voc quiser fechar a pasta ativa sem salv-la:
Bertolo Lies de VBA do Excel 123


Act i veWor kbook. Saved = Tr ue
Act i veWor kbook. Cl ose
Se voc no quiser dificultar o cdigo com o nome do arquivo, voc pode usar
or kbooks( var Fi l eName) . Cl ose
os endereos de uma clula na qual voc entrou com o nome do arquivo ou uma
varivel na qual voc armazenou o nome do arquivo.
Wor kbooks( Range( " A1" ) . Val ue) . Cl ose
W
Note a ausncia de aspas duplas nas ltimas duas sentenas.
Mtodo PrintOut
Imprime toda a pasta de trabalho desejada, ou parte dela, se for especificado.
:
for configurado para True, voc obter o
so. ActivePrinter designa o nome da impressora
de salvar uma pasta que esteja aberta mas no ativa com:
dificultar o cdigo com o nome do arquivo, voc pode usar
na qual voc entrou com o nome do arquivo ou a varivel na
SaveAs
Quando voc quiser salvar a pasta ativa sob um outro nome ou num outro
diretrio, voc usar o seguinte cdigo:
Act i veWor kbook. SaveAs " t al qual . xl s" or
Act i veWor kbook. SaveAs " C: / t al qual . xl s"
Se voc no quiser dificultar cdigo do nome do arquivo voc pode usar os
endereos de uma clula na qual voc entrou com o nome do arquivo ou a varivel na
qual voc armazenou o nome do arquivo.
Voc tambm pode aplicar o mtodo "saveAs" numa pasta que est aberta mas
no ativa:
Sua sintaxe
Wor kbooks( 1) . Pr i nt Out ( Fr om, To, Copi es, Pr evi ew,
Act i vePr i nt er , Pr i nt ToFi l e, Col l at e)
Sero impressas as pginas que estiverem no intervalo de From at To, com o
nmero total de cpias Copies. Se Preview
recurso de visualizao antes da impres
ativa, enquanto que PrintToFile solicita o nome de um arquivo para ser base da
impresso. Collate marcado como True intercala mltiplas cpias.
Mtodo Save
Este mtodo salva quaisquer mudanas na pasta de trabalho.
Voc geralmente salva a pasta que est ativa, ento aqui est o cdigo:
Act i veWor kbook. Save
Mas voc tambm po
Wor kbooks( " Past a1. xl s" ) . Save
Se voc no quiser
os endereos de uma clula
qual voc armazenou o nome do arquivo.
Wor kbooks( Range( " A1" ) . Val ue) . Save
Wor kbooks( var Fi l eName) . Save
Note a ausncia das aspas duplas nas ltimas duas sentenas.
Bertolo Lio #03 Procedimentos (Porcedures) VBA para Pastas (Workbooks) 124

Wor kbooks
Se voc quiser que o usurio escolha um diretrio e crie um nome do arquivo na
janela de dilogo regular
Appl i cat i o
Abrindo O
( " Past a1. xl s" ) . SaveAs " C: / t al qual . xl s"
"SaveAs" voc escreve este cdigo:
a, as funcionalidades "Abrir", "Salvar" e
a o diretrio na qual reside a pasta que voc acabou
Windows Explorer as funcionalidades "Abrir" e
ual reside a pasta que voc acabou de
mo" aponta para o diretrio default
s Documentos"). Lembre-se desta realidade quando voc iniciar
"abertu
sa especificar um diretrio (path) se a segunda pasta reside no
Workbook"
go com o nome do arquivo (de modo
e modificar o cdigo). Entre com o nome do arquivo
na clula "A1" da plan1 por exemplo e escreva isto:
me
o usurio escolha um arquivo da janela de dilogo regular
"Abrir"
s. Open " C: \ t al qual . xl s"
note qu
n. Di al ogs( xl Di al ogSaveAs) . Show
utras Pastas (Workbooks) e Arquivos
NOTA IMPORTANTE: Existem duas maneiras para abrir manualmente a pasta. Voc
clica no seu nome no Windows Explorer ou voc abre o Excel e ento na barra de menu
"Arquivo/Abrir" voc a encontra e abre a pasta. Se voc abrir o Excel e ento com o item
de menu "Arquivo/Abrir" voc seleciona a past
"Salvar como" todas apontam par
de abrir. Mas se voc abre uma pasta do
"Salvar" apontam amabas para o diretrio na q
abrir. MAS, mas a funcionalidade "Salvar co
(usualmente "Meu
ra", "salvamento" ou "salvando como" de pastas e outros arquivos nos seus
procedimentos VBA.
Abrindo Workbooks
Para abrir um outro arquivo (pasta) Excel com um procedimento VBA voc
simplesmente escreve (note que "Workbooks" plural):
Wor kbooks. Open " t al qual . xl s"
Voc no preci
mesmo diretrio que "This
Voc poder no querer dificultar o cdi
que se ele mudar voc no tem qu
Wor kbooks. Open Sheet s( " pl an1" ) . Range( " A1" ) . Val ue
O modo que eu prefiro fazer armazenar o nome do arquivo numa varivel do
tipo string como isto:
Sub pr oTest e( )
Di mvar NomeAr qui vo as St r i ng
var NomeAr qui vo=Sheet s( " pl an1" ) . Range( " A1" ) . Val ue
Wor kbooks. Open var Fi l eNa
End Sub
Se voc quiser que
voc escreve este cdigo:
Appl i cat i on. Di al ogs( xl Di al ogOpen) . Show
Se voc quiser especificar o diretrio escreva:
Wor kbook
e voc usa a linha inclinada \ e no a linha inclinada /.
Quando voc somente entrar com o path e o nome do arquivo numa clula, voc
pode escrever:
Bertolo Lies de VBA do Excel 125


Wor kbooks. Open Sheet s( " pl an1" ) . Range( " A1" ) . Val ue
e escrever o path numa clula e o nome do arquivo numa
outra c
eis para o path e o nome do arquivo
Wor kb
SV ou qualquer outro tipo de arquivo,
macro para faz-lo e obter algo como este:

o
voc quiser mover de uma para a outra voc
i vat e e Wi ndows( " Out r aPast a. xl s" ) . Act i vat e
te declaro uma varivel na qual eu
armaze
est
Test ( )

Act i vat e
r kbook) . Act i vat e

Voc tambm pod
lula:
Wor kbooks. Open Sheet s( " pl an1" ) . Range( " A1" ) . Val ue &
Sheet s( " pl an1" ) . Range( " A2" ) . Val ue
Voc tambm pode trabalhar com 2 variv
como mostrado acima:
ooks. Open var Pat h & var NomeAr qui vo
Abrindo Outros Arquivos
Quando eu preciso abrir um TXT, C
geralmente eu uso o gravador de
Wor kbooks. OpenText Fi l ename: = _
" C: \ Past a1. t xt " , Or i gi n: =xl MSDOS, _
St ar t Row: =1, Dat aType: =xl Del i mi t ed,
Text Qual i f i er : =xl Doubl eQuot e, _
Consecut i veDel i mi t er : =Tr ue, Tab: =Tr ue, Semi col on: =Fal se,
Comma: =Fal se, _
Space: =Tr ue, Ot her : =Fal se, Fi el dI nf o: =Ar r ay( 1, 1) ,
Tr ai l i ngMi nusNumber s _
: =Tr ue
Se eu no quiser que o path e o nome do arquivo seja difcil de codificar, eu uso
a mesma abordagem como mostrada acima para Workbooks.Open usando endereos ou
variveis.
Eu ento deleto o TrailingMinusNumbers:=True porque certas verses antigas d
Excel no entendem este argumento.
Movendo-se pelas Workbooks
Quando duas pastas esto abertas e
usar Thi sWor kbook. Act
Quando eu trabalho com duas pasta geralmen
no o nome da segunda pasta e movo de uma para outra com
Thi sWor kbook. Act i vat e e Wi ndows( var That Wor kbook) . Act i vat e. Aqui
um exemplo:
Sub pr o
Di mvar That Wor kbook as St r i ng
Wor kbooks. Open " past a1. xl s"
var That Wor kbook=Act i veWor kbook. Name
' e da eu movo de uma par a out r a at eu f echar a out r a
past a
Thi sWor kbook.
Wi ndows( var That Wo
Wi ndows( var That Wor kbook) . Cl ose
End Sub
Bertolo Lio #03 Procedimentos (Porcedures) VBA para Pastas (Workbooks) 126

EXEMPLO
No exemplo que segue, vou dar uma amostra de coisas simples que podemos
Esse um procedimento que faz uma anlise de alguns
Di mWb As Wor kbook
Di mWs As Wor ksheet

Wb = Act i veWor kbook
Quant i dade)
nt i dade
Pl an( i ) = Wb. Sheet s( i ) . Name
ast a de t r abal ho se chama & Nome &
Chr ( 1
ensagem= Mensagem& Seus nomes:
orkbook. Lembrando que um
go que acontece (causa) com um determinado objeto e que dispara um
eja uma ao neste objeto. claro, portanto, que de acordo com o
(que no fundo um bloco de cdigos ou
e cdigo, uma Sub)
dos a ele.
lo em EstaPasta_de_Trabalho, que est no seu Projeto na J anela
mbinao (combobox) situada no canto superior esquerdo da
aparecendo a opo Geral, tambm chamada de caixa dos objetos),

fazer com o objeto Workbook.
detalhes da pasta de trabalho ativa e nos d algumas informaes sobre ela e suas
planilhas.
Publ i c Sub Anal i se ( )



Di mQuant i dade As Byt e
Di mPl an( ) As St r i ng
Di mNome, MensagemAs St r i ng
Set
Nome = Wb. Name
Quant i dade = Wb. Sheet s. Count
ReDi mPl an( 1 To
For i = 1 To Qua
Next i

Mensagem= Essa p
3)
Mensagem = Mensagem & Nel a h & Quant i dade &
pl ani l has& Chr ( 13)
M
For i = 1 To Quant i dade
Mensagem= Mensagem& Chr ( 13) & Pl an( i )
Next i
MsgBox Mensagem, vbExcl amat i on, Anl i se
End Sub
Vejamos agora alguns EVENTOS do objeto W
evento al
mtodo (efeito), ou s
evento que ocorrer ser executado um mtodo
procedimento) apropriado.
O objeto Workbook tem uma srie de eventos (em termos d
que podem ser aplica
Para acessar os eventos de um Workbook dentro de um ambiente VBA, d um
clique dup
VBAProject. Com isso vai aparecer uma janela de cdigo parecida com a do mdulo.
Clicando na caixa de co
janela (na qual est
poderemos encontrar o objeto Workbook .

Bertolo Lies de VBA do Excel 127




Clicando no objeto Workbook, temos:

Caixa de Eventos
(Procedimentos)

Abrindo a caixa de eventos pode-se ver o nome de todos os eventos que o objeto
Workbook pode sofrer.
Olhemos alguns mais usados para descobrir o que podem fazer.
a ativa. Isso pode ocorrer de duas
o ser aberta ou aps alternarmos a pasta de trabalho
s do menu J anela, ou da barra de tarefas.
t e( )

r - se at i va
Evento Activate
Ocorre sempre que a pasta de trabalho se torn
maneiras: aps a pasta de trabalh
com outra pasta atrav
Para testar, inclua o seguinte cdigo no evento Activate, da pasta de trabalho, e
tente alternar a janela ou reabrir o arquivo.
Pr i vat e Sub Wor kbook_Act i va
Di mNome As St r i ng
Nome = Thi sWor kbook. Name
MsgBox A past a de t r abal ho & Nome & _
acaba de t or na
End Sub
Bertolo Lio #03 Procedimentos (Porcedures) VBA para Pastas (Workbooks) 128

Evento BeforeClose
Ocorre antes que a pasta de trabalho seja fechada. O evento BeforeClose possui
s Boolean. Este argumento serve para cancelarmos o evento
aborar a nossa prpria mensagem de sada da pasta
.
k_Bef or eCl ose( Cancel As Bool ean)


al var Per sonal i zado)
MsgBox Tchau, vbExcl amat i on
eI f Respost a = vbCancel Then
End I f
corre sempre que uma folha desativada. Como
alho:
vada" , vbI nf or mat i on,
r a f ol ha"
como argumento uma varivel , do tipo Object, que vai ser
ma re tro do cdigo como um
o nome da planilha que
has e solicitamos que o
te um novo nome.
um argumento: Cancel A
caso achemos necessrio. Para fazermos isso, simplesmente dizemos que Cancel =
True.
Para testarmos, podemos el
de trabalho. Na pasta de trabalho, crie o cdigo que segue e salve a pasta com um nome
qualquer. Feche-a e veja a mensagem. Em seguida, reabra o arquivo, faa algumas
alteraes de texto e torne a fechar. Isso pode ser bem interessante
Pr i vat e Sub Wor kboo

Di mWS As Wor kbook
Di mRespost a As vbMsgBoxResul t

Set WS = Thi sWor kbook
I f WS. Saved = Fal se Then
WS. Saved = Tr ue
Respost a = MsgBox( Gost ar i a de sal var as al t er aes& _
nest a past a de t r abal ho?, vbYesNoCancel Or _
vbQuest i on, S
I f Respost a = vbYes Then
WS. Save

El s

El se
MsgBox Tchau, vbExcl amat i on
End I f
End Sub
Evento Deactivate
o oposto do Activate. O
exemplo, podemos colocar uma mensagem antes de fechar a pasta de trab
Pr i vat e Sub Wor kbook_Deact i vat e( )
MsgBox " A f ol ha est sendo desat i
" Desat i va
End Sub
Evento NewSheet
Ocorre quando uma nova folha criada ou inserida dentro de uma pasta de
trabalho.
Esse evento tem Sh
u ferncia para a planilha criada e pode ser utilizada den
elemento Worksheet.
No exemplo que segue, colocamos em uma mensagem
criada, movemos esta para o final da lista de planil est sendo
usurio digi
Bertolo Lies de VBA do Excel 129


Pr i vat e Sub Wor kbook_NewSheet ( ByVal Sh As Obj ect )
D
l ha " & Sh. Name
eet s. Count )
a o exemplo a seguir:
i on, " Aber t ur a da past a"
r uma das folhas contidas na coleo Worksheets da
or kbook_Sheet Act i vat e( ByVal Sh As Obj ect )



tos na prxima lio
da prpria planilha, mas que pode ser expandido facilmente para
vento Sheet.calculate
i mRespost a As St r i ng

MsgBox " O nome da nova f o
Sh. Move , af t er : =Thi sWor kbook. Wor ksheet s _
( Thi sWor kbook. Wor ksh
Respost a = I nput Box( " Qual o novo nome da f ol ha a ser
cr i ada?" )
Sh. Name = Respost a

End Sub
Evento Open
Ocorre quando a pasta de trabalho aberta. Esse o evento padro de
Workbook, ou seja, quando selecionamos o objeto em sua janela de cdigos, esse
evento que se torna ativo. Sej
Pr i vat e Sub Wor kbook_Open( )
MsgBox " A past a de t r abal ho " & Thi sWor kboob. Name & _
" acaba de ser aber t a. " , vbExcl amat
End Sub

Para poder ver o exemplo acima em funcionamento, voc deve salvar a pasta de
trabalho, fech-la e tornar abr-la.
Evento SheetActivate
Ocorre quando qualque
pasta de trabalho for ativada. Esse evento tambm possui o argumento Sh, que
representa a planilha que acaba de ser ativada. Mais um exemplo:

Pr i vat e Sub W
MsgBox A f ol ha & Sh. Name & _
acaba de ser at i vada. , vbI nf or mat i on
End Sub

Os outros eventos so relacionados s planilha e sero vis
com o escopo unitrio
o escopo global. Vejamos quais so eles:
Evento SheetBeforeDoubleClick
Ocorre no momento em que dado um duplo clique em alguma planilha, antes da ao
padro de duplo clique.
Evento SheetBeforeRightClick
Ocorre no momento em que o boto direito do mouse clicado em alguma planilha,
antes da ao padro de clique com o boto direito.
E
Bertolo Lio #03 Procedimentos (Porcedures) VBA para Pastas (Workbooks) 130

Ocorre aps qualquer uma das planilhas ser recalculada ou qualquer mudana de dados
ser feita em algum grfico.
Evento Sheet.change
D-se quando executado algum tipo de alterao em qualquer clula das
planilhas.
Evento SheetSelectionChange
Ocorre quando muda a seleo de clulas em qualquer planilha.
Bertolo Fase #2: Cdigo VBA do Excel (Macros) 131


Lio 4: Cdigo VBA do Excel para Planilha (WorkSheet)
.
scura quando voc clicar num nome de folha na janela
ual Basic Editor (VBE) ela tem duas propriedades
amad
n2....). Assim voc pode ativar Plan1 "cujo
m
ar, se voc, ou seu usurio, sempre mudar o caption da folha, no h
dade para rever e corrigir seu cdigo de acordo. A nica desvantagem que o
no claro e fcil para ler (O que "Plan1"?). por isto que eu renomeio
ol Bal anco. Sel ect
Propriedades da Worksheet
Quando a folha for selecionada na janela VBAProject voc pode ver 11
propriedades da planilha na J anela de propriedades do VBE, propriedades para as
quais voc pode definir um valor default para comear com ele e que voc pode
modificar pelo procedimento VBA sempre que voc quiser.
Existem 3 propriedades que voc usar freqentemente: a Name (nome dentro
de parnteses), a Name (sem parnteses) que de fato o caption aparecendo na guia da
folha no Excel e a propriedade visible.
Propriedades (Name)
Como explicado acima voc pode mudar a (Name) se voc estiver
desenvolvendo uma pasta para outros que possam modific-la no Excel. Voc no pode
mudar o (Name) de uma folha programaticamente.
Deve-se tomar cuidado de no se usarem caracteres especiais tais como: :, /,
?e *.
Para mudar o caption voc pode faz-lo na janela propriedade do VBE, ou no
Excel, clicando com o boto direito do mouse na guia e da selecionando "Renomear".
Programaticamente voc pode mudar o caption de uma folha com o seguinte cdigo:
objeto WorkSheet representa uma planilha especificada da coleo
WorkSheets
O
Por alguma razo ob
VBAProject do Vis
ch as Name. Uma entre parnteses e outra no. Uma planilha tem dois nomes,
aquele um que aparece na sua guia no Excel (vamos chamar este de propriedade
"caption") e aquele um que tem como objeto VBA na janela VBAProject do Visual
Basic Editor (VBE) (por default: Plan1, Pla
caption "Balano"" com ambas declaraes:
Sheet s( " Bal ano" ) . Sel ect
Wor ksheet s( " Bal ano" ) . Sel ect
no esquecer os parnteses e as aspas duplas ou
Pl an1. Sel ect
Eu prefiro o segundo mtodo por 2 razes. Pri eiro h menos para teclar nele e
em segundo lug
necessi
cdigo VBA
as folhas no Visual Basic Editor (eu seleciono a folha na J anela Project e modifico o
seu nome (aquele um com parnteses) na J anela Propriedade). No exemplo abaixo o
nome da folha (quando objeto VBA) "folBalanco" quando para o caption, realmente
eu no tomo cuidado:
f
Bertolo Lio #04 Cdigo VBA do Excel para Planilha (Worksheet) 132

Sheet s( " P
Proprieda
A p
valores dife
l an1" ) . Name= " Bal ano"
des Visible
ropriedade "Visible" controla a visibilidade de uma planilha e pode tomar 3
certa
Pl an1" ) . Vi si bl e= Tr ue
se
estiver
t-la:
e= Tr ue
Range
ropriedade "Visible" pode tomar muito interessante.
Uma fo Hi dden" .
e quando
alor xlVeryHidden pode
soment ue
BA podem exibir esta folha. Se seu cdigo estiver protegido
om o password pode acessar o cdigo e modificar
sar este valor da propriedade "Visible" para ocultar
inform
rentes. Os primeiros dois so True ou False significando que uma
folha est ou no est visvel que ela est oculta ou no.
Sheet s( "
Sheet s( " Pl an1" ) . Vi si bl e= Fal
Lembre-se que frmulas em clulas so calculadas mesmo se a folha
oculta mas que antes voc pode fazer algo programaticamente na folha voc ocul
Sheet s( " Pl an1" ) . Vi si bl
Sheet s( " Pl an1" ) . Sel ect
( " A1" ) . Val ue=6
Sheet s( " Pl an1" ) . Vi si bl e= Fal se
O terceiro valor que a p
lha pode ser very hidden " Sheet s( " Pl an1" ) . Vi si bl e= xl Ver y
Neste estado no somente a folha est oculta mas voc no pode ver seu nom
no Excel voc for para "Formatar/Planilha/Reexibir". O v
e ser variado programaticamente. O que significa que somente usurios q
tenham acesso ao cdigo V
por um password somente usurios c
o valor "xlVeryHidden". Voc pode u
ao confidencial como salrios e preos ou ocultar parmetros que voc
quer que sejam
no
modificados pelo usurio.
so calculadas mesmo se a folha est very
referindo-se s clulas de uma folha
hidden ha estiver hidden ou very hidden.
uitas folhas ao mesmo tempo voc usar o seguinte
. Sel ect
si bl e = Fal se
nte, ocultar
or
Lembre-se que frmulas nas clulas
hidden mas que antes voc pode fazer qualquer coisa programaticamente na folha voc
deve reexib-la:
Sheet s( " Pl an1" ) . Vi si bl e= Tr ue
Sheet s( " Pl an1" ) . Sel ect
Range( " A1" ) . Val ue=6
Sh l e= xl Ver yHi dden eet s( " Pl an1" ) . Vi si b
Lembre-que frmulas nas outras folhas
ou very hidden funciona mesmo se a fol
Se voc quiser ocultar m
cdigo:
Sheet s( Ar r ay( " Pl an1" , " Pl an2" ) )
Sheet s( " Pl an1" ) . Act i vat e
Act i veWi ndow. Sel ect edSheet s. Vi
Os valores xlSheetHidden e xlSheetVisible permitem, respectivame
ou exib-la novamente.
Propriedades ScrollArea
Essa propriedade limita a rea de rolagem e atuao de uma planilha. P
exemplo:
Bertolo Lies de VBA do Excel 133


Act i veSheet . Scr ol l Ar ea = A1: D20
no intervalo delimitado.
Propriedades CodeName
planilha, que substitui a declarao
( 1) . Cel l s( 1, 1) . Val ue = 10
Permite-nos trabalhar apenas
Retorna o nome de cdigo de uma
Worksheets(index). Podemos usar:
Pl an1. Cel l s( 1, 1) . Val ue = 10
Ao invs de :
Wor ksheet s
Vejamos agora alguns MTODOS do objeto Worksheet:

Mtodo Deletar
Voc poder querer deletar folhas. Aqui est o cdigo para fazer isto:
el et e
ount ) . Del et e
o VBA
jo caption "Balano" e cujo nome shBalance:
ub p

dd bef or e: =f ol Bal anco
st e( )
( " Bal ano" ) , Count : =3
plas quando usar a
Sheet s( " Bal ano" ) . D
Ou
Wor ksheet s( wor ksheet s. c
Mtodo Add
Voc poder tambm querer adicionar uma folha. Se voc usar o seguinte cdigo
adicionar uma nova folha antes da planilha ativa.
Sheet s. Add
Se voc quiser ser mais preciso como para onde e quantas voc usar em cada
um dos seguintes procedimentos:
Inserindo uma folha aps a folha cu
S r oTest e( )
Sheet s. Add bef or e: =Sheet s( " Bal ano" )
End Sub
Sub pr oTest e( )
Sheet s. A
End Sub
Inserindo trs folhas aps a folha cujo caption "Balano":
Sub pr oTe
Sheet s. Add af t er : =Sheet s
End Sub
Inserindo uma folha no comeo da pasta. Note a ausncia de aspas du
posio (rank) da folha:
Sub pr oTest ( )
Sheet s. Add af t er : =Sheet s( 1)
End Sub
Bertolo Lio #04 Cdigo VBA do Excel para Planilha (Worksheet) 134

Finalmente se voc quiser adicionar uma nova folha no final da pasta voc
precisa contar a

s folhas com Sheets.Count e usar este valor quando a posio da folha
voc quiser adicionar a nova folha:
o sobre o Activate
planilhas ao mesmo tempo (poderia ser com o
exclu-las).

fiel da planilha
gum
aps a qual
Sub pr oTest e( )
Sheet s. Add Af t er : =Sheet s( Sheet s. Count )
End Sub
o Select Mtod
Este mtodo seleciona uma planilha. A vantagem deste mtod
que ele serve para selecionar vrias
propsito de
Mtodo Copy
Serve para criar uma cpia fiel de uma determinada planilha, em uma posio
especfica na coleo Worksheets. Por exemplo para criar uma cpia
ativa como a ltima da coleo Worksheets:
Act i ve. Copy Af t er : =Wor ksheet s( Wor ksheet s. count )
Algumas vezes voc quer fornecer uma nica planilha de uma pasta para al
mas voc no quer que todas as frmulas vo juntas. Aqui est o cdigo para copiar
ma fo
ect
y
on. Copy
a muitas folhas, voc repete o procedimento ou
" ) ) . Copy
Past eVal ues, Oper at i on: =xl None,
ne,
As " novaPast a. xl s"
u lha de uma pasta numa nova pasta, trocar as frmulas pelos valores e salve a
nova pasta:
Sheet s( " Pl an3" ) . Sel
Sheet s( " Pl an3" ) . Cop
Cl ul as. Sel ect
Sel ect i
Sel ect i on. Past eSpeci al Past e: =xl Past eVal ues, Oper at i on: =xl None,
Ski pBl anks _
: =Fal se, Tr anspose: =Fal se
Act i veWor kbook. SaveAs " novaPast a. xl s"
Se voc quiser fazer a mesma coisa par
escreve:
Sheet s( Ar r ay( " Pl an1" , " Pl an2" ) ) . Sel ect
Sheet s( " Copi a2" ) . Act i vat e
Sheet s( Ar r ay( " Pl an1" , " Pl an2
Sheet s( " Pl an1" ) . Sel ect
Cl ul as. Sel ect
Sel ect i on. Copy
Sel ect i on. Past eSpeci al Past e: =xl
Ski pBl anks _
: =Fal se, Tr anspose: =Fal se
Sheet s( " Pl an2" ) . Sel ect
Cl ul as. Sel ect
Sel ect i on. Copy
Sel ect i on. Past eSpeci al Past e: =xl Past eVal ues, Oper at i on: =xl No
Ski pBl anks _
: =Fal se, Tr anspose: =Fal se
Act i veWor kbook. Save
Bertolo Lies de VBA do Excel 135


Veja a lio sobre pastas para gerenciar o diretrio (path) quando usar o mtod
"SaveAs".
o
Activ er:
grupo de clulas ou qualquer
MPRE cola-o na ActiveSheet:
t . Past e
e voc esteja fazendo um no qual caso o objeto " ":
e,
: =Fal
ficar so os autofilters esto ligados para remov-los voc
onde eu
arco
ode do alguma coisa em cada uma das folhas numa pasta com o
lha.
iro declaro uma varivel do tipo Variant Di m var Sheet As
procedimento pode rodar.
ub p
Var i ant
t I n Wor ksheet s
. Val ue = 22
N
ActiveSheet
A eSheet a planilha que foi selecionada por ltimo. Assim voc pode escrev
Act i veSheet . Vi si bl e=Tr ue
Act i veSheet . Copy
Lembre-se que quando voc copiou uma clula ou um
outro objeto de uma folha voc SE
Act i veShee
a menos qu PasteSpecial Selection
Sel ect i on. Past eSpeci al Past e: =xl Past eVal ues, Oper at i on: =xl Non
Ski pBl anks _
se, Tr anspose: =Fal se
Se voc quiser veri
precisa usar o objeto ActiveSheet tambm como no seguinte procedimento
m os autofilters para ligados para remov-los ou sair do procedimento:
Range( " A2" ) . Sel ect
I f Act i veSheet . Aut oFi l t er Mode = Tr ue Then
Sel ect i on. Aut oFi l t er
El se
Sub Exi t
End I f
Voc tambm p
seguinte cdigo. Neste exemplo eu defino o valor da clula A1 a 22 em cada plani
Note que eu prime
Var i ant e ento o
S r oTest ( )
Di mvar Sheet As
For Each var Shee
Range( " A1" )
ext
End Sub
Vejamos agora alguns EVENTOS do objeto Worksheet. A maioria dos eventos
ma aplicao. Os eventos
ksheet afetam apenas a planilha onde o evento ocorre.

& _
cl amat i on
de um Workbook, como foi visto, afetam globalmente u
relacionados a um objeto Wor
Evento Activate
Ocorre quando uma planilha ativada. Por exemplo:
Pr i vat e Sub Wor ksheet _Act i vat e( )
MsgBox A pl ani l ha & Me. Name
acaba de ser at i vada. , vbEx
End Sub
Bertolo Lio #04 Cdigo VBA do Excel para Planilha (Worksheet) 136


Observe o uso da clusula Me. Ela
nesdse caso, a planilha que sofre o evento. Atr
representa o objeto que est em anlise,
avs da clusula Me, temos acesso a todas
lo clique na planilha, antes que a ao padro seja
i dois argumentos: O argumento Cancel, j estudado em
a possibilidade de cancel-lo. O outro parmetro
s desse argumento, podemos saber qual a clula recebeu o
os um exem
nmer o da cor par a pi nt ar a
RightClick
oubleClick, o BeforeRightClick tem os dois
usados para detectar a clula clicada e cancelar o evento,
dro de preenchimento de uma clula
que rec , de acordo com a vontade do usurio.
ossveis para esses padres
ina Trat, que evita o erro e cancela o evento.
a planilha, alterando valores.
ando montamos uma frmula e esta executa um clculo, alteramos os
valores das clulas que so referncias para frmulas (a planilha no est em mdulo de
lculo

calcula os
valores de entrada, menos os valores de sada. Na clula D14, existe uma frmula de
o acima dela, perfazendo o saldo anual.
as propriedades e mtodos da planilha.
Evento BeforeDoubleClick
Acontece quando h um dup
executada.
Esse evento possu
outros eventos, que proporciona
Target, do tipo Range. Atrav
duplo clique e dar os devidos tratamentos ao evento. Vejam plo:
Pr i vat e Sub Wor ksheet _Bef or eDoubl eCl i ck( ByVal Tar get As Range,
Cancel As Bool ean)
Di mRespost a As Byt e
MsgBox " A cl ul a que r ecebeu o dupl o cl i que " & Tar get . Addr ess
Respost a = I nput Box( " Di gi t e o
cl ul a: " )
Tar get . I nt er i or . Col or I ndex = Respost a
End Sub
No exemplo anterior, trocamos a cor da clula que sofreu o evento de duplo
clique e, atravs de cancel =true, evitamos que a ao padro ocorra, a qual seria
colocar a clula em modo de edio.
Evento Before
Esse evento ocorre quando h um clique com o boto direito do mouse na
planilha. Assim como o evento BeforeD
argumentos, Target e Cancel,
respectivamente.
Vamos fazer um exemplo que troca o pa
ebe o clique com o boto direito do mouse
Na figura ao lado vemos todos os valores p
Nesta Sub apresentamos um detalhe interessante, o uso de On Error, que faz um
tratamento caso algum erro ocorra. Em resposta ao erro, On Error faz um desvio da
aplicao para a rot
Evento Calculate
Ocorre toda vez que um clculo executado em um
Por exemplo, qu
c automtico) e pressionamos F9, fazendo o reclculo da planilha, entre outros.
A seguir, temos um exemplo do uso do evento Calculate. Antes de implementar
o cdigo, crie a planilha que segue. Na coluna D, existe uma frmula que
soma das clulas que est


Bertolo Lies de VBA do Excel 137



Pr i vat e Sub Wor ksheet _Cal cul at e( )
Val or = Me. Range( " d14" ) . Val ue
i vo" , vbI nf or mat i on
End I f
ate
o
Wor ksheet _Change( ByVal Tar get As Range)
r GoTo Tr at
al ue, vbI nf or mat i on
Exi t Sub
ulas e apagar o seu contedo,
a quando temos apenas uma
clula no Range selecionado. Assim, somos desviados para a rotina de tratamento de
erro, que informa o que aconteceu.


Di mVal or As I nt eger

I f Val or < 0 Then
MsgBox " Seu bal ano anual est negat i vo" , vbCr i t i cal
El se
MsgBox " Seu bal ano anual est posi t

End Sub
Evento Activ
Este evento ocorre quando uma das clulas da planilha teve o seu conted
alterado pelo usurio ou por um agente externo. Seja o exemplo:
Pr i vat e Sub
r o On Er

MsgBox " A cl ul a que t eve o seu cont edo al t er ado f oi " & _
Tar get . Addr ess, vbI nf or mat i on
MsgBox " O novo val or de " & Tar get . Addr ess & " " & _
Tar get . V

Tr at :
MsgBox " Voc deve t er al t er ado mai s de uma cl ul a ao" & _
" mesmo t empo" , vbCr i t i cal

End Sub
Perceba que, se voc selecionar um conjunto de cl
Target.Value retorna um erro, pois s funciona dessa form
Bertolo Lio #04 Cdigo VBA do Excel para Planilha (Worksheet) 138

Evento Activate
Pr i va
MsgBox " Nesse Range exi st em " & Tar get . Count & "
Esses so os sete eventos da coleo Worksheets, que so os mais usados em
de trabalho. Lembremos que podemos estend-los ao objeto Workbook de
forma global, pois tal objeto possui os mesmos eventos detectados para qualquer
o evento oposto ao evento Activate. acionado quando desativamos a
planilha.
Evento SelectionChange
Este evento o evento padro de uma Worksheet. Ele ocorre toda vez que um
Range de clulas dentro de uma planilha selecionado. Atravs do parmetro de retorno
Target, temos acesso a todas as clulas selecionadas no intervalo e podemos dar o
tratamento que desejamos. Seja o exemplo:
t e Sub Wor ksheet _Sel ect i onChange( ByVal Tar get As Range)

MsgBox " O Range de cl ul as sel eci onado " & Tar get . Addr ess
I f Tar get . Count = 1 Then
MsgBox " Nesse Range exi st e 1 cl ul a"
El se
cl ul as"
End I f

ub End S
uma pasta
planilha da aplicao.

Bertolo Fase #2: Cdigo VBA do Excel (Macros) 139


Lio 5: Cdigo VBA do Excel para mover-se entre as Clulas e Ranges
para ir
m
lula, at todas as clulas de uma planilha; por isso, to genrico e
election, Value
o Excel o usurio trabalha nas planilhas e precisa conhecer como fazer
de uma clula para outra, para uma linha, para uma coluna, como entrar co
valores e frmulas, para copiar/colar etc....
ange quem faz o trabalho pesado dentro do Excel. Esse objeto O objeto R
representa uma e
N
funcional.
Range, Select, S
Quando voc quiser entrar com um valor numrico numa clula voc escrever:
,
a folha voc pode escrever:
l ue = 32
da clula ou uma outra folha com:
mEassi m" ) . Range( " A1" ) . Val ue = 32
Voc tambm pode entrar com o mesmo valor em muitas clulas, isto , num
interva
cisa de uma tripla
Range( " A1" ) . Sel ect
Sel ect i on. Val ue = 32
Note que voc no precisa selecionar uma clula para entrar com um valor nela
de qualquer lugar n
Range( " A1" ) . Va
Voc pode mesmo mudar o valor
Sheet s( " Assi
lo de clulas, com:
Range( " A1: B32" ) . Val ue = 32
Se voc quiser entrar com um texto numa clula voc precisa usar as aspas
duplas como:
Range( " A1" ) . Val ue = " Ber t ol o"
Se voc quiser entrar com um texto dentro de aspas duplas numa clula voc
pre de aspas duplas como:
o de linhas ou colunas, assim:
se
elecionar a clula para
entrar com uma frmula nela, de qualquer lugar na folha voc pode escrever:
Range( " A1" ) . Val ue = " " " Ber t ol o" " "
Uma interseco de intervalos dada assim:
Range( B1: D4 C2: E6)
Uma unio de intervalos dada assim:
Range( B1: D4, C2: E6)
Pode tambm ser representado por um conjunt
Range( Col umns( 1) , Col umns( 3) )
Range, Formula, Select, Selection
Quando voc quiser entrar com uma frmula numa clula voc escrever:
Range( " A1" ) . Sel ect
Sel ect i on. For mul a = " =C8+C9"
Note os dois sinais de igual (=) incluindo aquele um dentro das aspas duplas como
voc fosse entr-lo manualmente. Novamente voc no precisa s
Bertolo Lio #05 Cdigo VBA do Excel para mover-se entre as Clulas e Ranges 140

Range( " A1" ) . For mul a = " =C8+C9"
Se voc escrever o seguinte:
Range( " A1: A8" ) . For mul a = " =C8+C9"
A frmula em A1 ser =C8+C9, a frmula em A2 ser =C9+C10 e assim por diante. Se
voc quiser ter a frmula exata =C8+C9 em todas as clulas, voc precisa escrever:

de G8 a A8:
Range:
o Range. Atravs dela, podemos obter
onjunto como um todo.
de
ox " A cl ul a base do Range est na col una " & _
a da propriedade anterior.
Range( " A1: A8" ) . For mul a = " =$C$8+$C$9"
Activecell
A Activecell uma clula muito importante. Ela a clula selecionada quando somente
uma clula est selecionada mas ela a clula do canto superior esquerdo de um range
que est selecionado. Por exemplo, se voc selecionar um range como este:
Range( " A8: G8" ) . Sel ect
A Activecell A8. Assim se voc escrever:
Act i vecel l . Sel ect
clula A8 ser selecionada. Mas se voc selecionar o range
Range( " G8: A8: ) . Sel ect
Clula G8 torna-se a Activecell.
Vejamos agora as PROPRIEDADES deste objeto
Propriedade Cells
Representa todas as clulas de dentro d
informaes especficas a respeito de cada clula ou do c
Propriedades Column e Row
Indicam a coluna e a linha, respectivamente, que formam a base de um Range,
ou seja, relativas clula do canto superior esquerdo.
Vamos fazer um teste colocando o cdigo abaixo no evento SelectionChange
uma planilha:
Pr i vat e Sub Wor ksheet _Sel ect i onChange( ByVal Tar get As Range)
MsgB
Tar get . Col umn & " e na l i nha " & Tar get . Row
End Sub
Propriedades Columns e Rows
Veja o s no final. A est a diferen
Estas duas propriedades agem como colees, que armazenam as informaes de
colunas e linhas de um Range. Vejamos um exemplo:
Pr i vat e Sub Wor ksheet _Sel ect i onChange( ByVal Tar get As Range)
MsgBox " Nest e Range exi st em" & Tar get . Col umns. Count & "
col una( s) " _
Bertolo Lies de VBA do Excel 141


& Chr ( 13) & " Nest e Range exi st em" & Tar get . Rows. Count & "
l i nha( s) "
nge em questo.
Tar get As Range)
e
ta
End Sub
Propriedade Address
Esta propriedade retorna o endereo de clulas do objeto Ra
Pr i vat e Sub Wor ksheet _Sel ect i onChange( ByVal

MsgBox Tar get . Addr ess( RowAbsol ut e: =Fal se, _
Col umnAbsol ut e: =Fal se)

End Sub
Nesse exemplo, poderamos omitir os parmetros RowAbsolute
ColumnAbsolute; o resultado seria o mesmo endereo, masmem referncia absolu
(com os smbolos de $, indicando o travamento de linhas e colunas).
Propriedades ColumnWidth e RowHeight
Essas propriedades medem e definem a largura de uma coluna e altura de uma
linha, respectivam
.
o tipo
ormula
lula do Range, ou False, caso
nment
ht Alinhamento direita
xlHAlig
hamento centralizado
ntedo da clula.
terAcrossSelection Alinha horizontalmente por sobre uma seleo.
Propriedade Locked
ente. Quando vrias colunas ou linhas esto selecionadas e tm
tamanhos diferentes, essas propriedades retornam o valor Null
A largura de uma coluna medida em quantidade de caracterees 0 o
de fonte, enquanto que a altura de uma linha medida em pontos.
ara
Propriedade F
Esta propriedade retorna ou determina qual a frmula contida em uma clula do
Range.
Propriedade HasFormula
Retorna True, se existe uma frmula em uma c
no exista.
Propriedade HorizontalAlig
Retorna ou define o alinhamento horizontal das clulas contidas no Range
selecionado. As constantes podem ser:
xlHAlignRig
nLeft Alinhamento esquerda
xlHAlignJustify Alinhamento justificado
xlHAlignDistributed Alinhamento distribudo
xlHAlignCenter Alin
xlHAlignGeneral Alinhamento padro
xlHAlignFill Preenche todo o Range horizontalmente com o co
xlHAlignCen
Bertolo Lio #05 Cdigo VBA do Excel para mover-se entre as Clulas e Ranges 142


ine o valor de uma determinada clula do Range. Exemplo:
Cl ul a. Val ue = i


deste objeto Range:
entrio a uma clula do Range.
Change( ByVal Tar get As Range)
) , _
Range"
End Sub
Mtodo AutoFilter
O mtodo AutoFilter habilita o recurso de autofiltro do Excel nas clulas que
envolvem o Range.
Mtodo AutoFit
O mtodo AutoFit ajusta colunas ou linhas para uma melhor disposio do texto
dentro das clulas.
Mtodo BorderAround
o mtodo usado para acrescentar uma borda ao Range especificado. A sua
sintaxe :
Range. Bor der Ar ound( Li neSt yl e, Wei ght , Col or I ndex, Col or )
Onde LineStyle pode ser uma das seguintes constantes:
xlLineStyleNone Sem estilo
xlDouble = = = = = = = = = = = = = = = = =
xlDot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xlDash - - - - - - - - - - - - - - - - - - - - - - - - - -
xlContinuous ________________________
Trava ou destrava as clulas do Range, sendo equivalente guia Proteo, em
Formatar | Clulas, no item Travada.
Propriedade Value
Retorna ou def
Pr i vat e Sub Wor ksheet _Sel ect i onChange( ByVal Tar get As Range)
Di mCl ul a As Range, i As I nt eger
Tar get For Each Cl ul a I n
i = i + 1

Next
End Sub
Aqui cada clula selecionada ser preenchida com o seu index (posio) no
Range.
Vejamos agora os MTODOS
Mtodo AddComment
Este mtodo adiciona um texto de com
Pr i vat e Sub Wor ksheet _Sel ect i on
Di mR As Range
Set R = Range( Cel l s( Tar get . Row, Tar get . Col umn
Cel l s( Tar get . Row, Tar get . Col umn) )
R. AddComment " Est a a pr i mei r a cl ul a do
Bertolo Lies de VBA do Excel 143


xlDashDot - . - . - . - . - . - . - . - . - . - . - . - . -
lDashDotDot - . . - . . - . . - . . - . . - . . - . . -
lSlantDashDot O mesmo que xlDashDot, mas entrelaado
O parmetro Weight pode ser uma das seguintes constantes:
lHairLine Intensidade muito fina
lThin Intensidade fina
or so as constantes de cores, onde ColoIndex definida por um
Color definida como um valor de uma funo RGB.

ria ser a cor vermelha: RGB(255,0,0).
o BorderAround.
do e qualquer contedo das clulas dentro de um Range. O contedo
o ou
Up
primeira clula do Range para o resto da seleo, na
own
do de A1.
e retorna um objeto Range
e essas informaes se encontram. Retorna Nothing
trada. No afeta a seleo da clula ativa.
ejamos a sua sintaxe:
nge. Fi nd( What , Af t er , LookI n, LookAt , Sear chOr der , _
x
x

x
x
xlMedium Intensidade mediana
lThick x Intensidade forte.
ColorIndex e Col
valor do Index da cor da paleta e
Uma funo RGB trabalha com trs parmetros, que indicam a quantidade de
vermelho, verde e azul na composio de uma cor, variando de 0 a 255. Um exemplo
pode
Apenas um componente de cor deve ser definido para o mtod
Mtodo Clear
Limpa to
envolve valores, formatao e frmulas.
Mtodo Copy
Esse mtodo copia o contedo de um Range para um outro Range de destin
para o clipboard. Sua sintaxe:
Range. Copy ( Dest i no)
Mtodo Delete
Exclui as clulas do Range especificado.
Mtodo FillDown, FillLeft, FillRight, Fill
Copia o contedo da
direo especfica.
Range( A1: A20) . Fi l l D
Preencher da clula A2 at A20 com o conte
Mtodo Find
Localiza informaes especficas em um intervalo,
representando a primeira clula ond
n se nenhuma coincidncia for enco
V
Ra
Bertolo Lio #05 Cdigo VBA do Excel para mover-se entre as Clulas e Ranges 144

Sear chDi r ect i on, Mat chCase, Mat chByt e, Sear chFor mat )
fter deseja que a
rio. Observe que After precisa ser uma nica clula no
-se de que a pesquisa comea depois dessa clula; a clula
a
xlComments (comentrios) ou
el do tipo Variant opcional. Determina se o valor deve bater com

(completo) ou xlPart (parte).
ariant opcional. Define se a busca deve seguir em
XlSearchOrder: xlByRows ou
What uma varivel do tipo Variant necessria. Os dados ou valores a serem
buscadoss. Pode ser uma seqncia de caracterees ou qualquer tipo de dados do
Microsoft Excel.
A uma varivel do tipo Variant opcional. A clula depois da qual voc
pesquisa comece. Corresponde posio da clula ativa quando uma pesquisa feita a
partir da interface do usu
intervalo. Lembre
especificada no pesquisada at que o mtodo d a volta e chegue a ela. Se voc no
especificar esse argumento, a pesquisa comear aps a clula do canto superior
esquerdo do intervalo.
LookIn uma varivel do tipo Variant opcional. O tipo de informao. Pode ser um
alores), das seguintes constantes de busca: xlValues (v
xlFormulas (frmulas)
LookAt uma variv
todo o contedo da clula, ou parte dele simplesmente. Pode ser uma das seguintes
constantes XlLookAt: xlWhole
SearchOrder uma varivel do tipo V
colunas ou linhas. Pode ser uma das seguintes constantes
xlByColumns.
SearchDirection opcional. Indica a direo da pesquisa. XlSearchDirection pode ser
uma das seguintes constantes:
ve ser definida como True para
zer a e maisculas e minsculas. O valor
False
se voc tiver
acterees
at Variant opcional. O formato da pesquisa.
xlNext padro
xlPrevious
MatchCase uma varivel do tipo Variant opciona
squis tr
l. De
fa pe a sensitiva, isto , fazer distino en
padro .
MatchByte uma varivel do tipo Variant opcional. Usado somente
selecionado ou instalado suporte de linguagem de byte duplo, padro Excel para o
r Oriente. True para que os caracterees de dois bytes coincidam somente com ca
s caracterees de dois bytes coincidam com seus de dois bytes. False para que o
tes de um byte. equivalen
SearchForm
Bertolo Lies de VBA do Excel 145


Comentrios
As definies de LookIn, LookAt, SearchOrder e MatchByte so salvas toda vez qu
voc usa esse mtodo. Se voc no especificar valores para esses argumentos n
rxim
e
a
nio
a
lizar clulas coincidentes com padres mais complicados, use uma
eguir
ea
com as letras Cour. Quando o Microsoft Excel encontra uma coincidncia, altera a fonte
para Times New Roman.
or Each c I n [ A1: C5]
I f c. Font . Name Li ke " Cour *" Then
c. Font . Name = " Ti mes New Roman"
End I f
Next
Exemplo
ue contm
: a500" )
: =xl Val ues)
Then
r ess <> f i r st Addr ess
Este exemplo mostra como o mtodo FindPrevious usado com os mtodos
or ksheet s( " Pl an1" ) . Col umns( " B" ) . Fi nd( what : =" Phoeni x" )
p a vez que voc chamar o mtodo, os valores salvos sero usados. A defi
desses argumentos altera as definies da caixa de dilogo Localizar, e a alterao das
definies da caixa de dilogo Localizar faz com que os valores salvos, usados quando
voc omite os argumentos, sejam alterados. Para evitar problemas, defin
explicitamente esses argumentos toda vez que voc usar esse mtodo.
Para loca
instruo For Each...Next com o operador Like. Por exemplo, o cdigo a s
pesquisa todas as clulas do intervalo A1:C5 que usam uma fonte cujo nome com
F


Este exemplo localiza todas as clulas do intervalo A1:A500 na planilha um q
o valor 2 e o altera para 5.
Wi t h Wor ksheet s( 1) . Range( " a1
= . Fi nd( 2, l ooki n Set c
I f Not c I s Not hi ng
f i r st Addr ess = c. Addr ess
Do
c. Val ue = 5
FindNext( c) Set c = .
Loop Whi l e Not c I s Not hi ng And c. Add
End I f
End Wi t h

Mtodo FindNext e FindPrevious
Esses mtodos prosseguem com a busca iniciada no mtodo Find procura de
novas ocorrncias do critrio dentro do Range.
Exemplo
Find e FindNext. Antes de executar este exemplo, certifique-se de que Plan1 contenha
pelo menos duas ocorrncias da palavra Phoenix na coluna B.
Set f c = W
Bertolo Lio #05 Cdigo VBA do Excel para mover-se entre as Clulas e Ranges 146

MsgBox " A pr i mei r a ocor r nci a est na cl ul a " & f c. Addr ess
an1" ) . Col umns( " B" ) . FindPrevious( af t er : =f c)
nci a ant er i or est na cl ul a " & f c. Addr ess

nge do o Range vire
rio de tabela dinmica, um intervalo ou a regio
te uma clula. Sua sintaxe :
er 3,
Uma expresso que retorna um dos objetos da lista Aplica-se
y1 V um campo de
( 1, 1) ,
ara o campo ou intervalo especificado
Key1 na ordem decrescente.
como texto (um campo de
tabela dinmica ou nome de intervalo) ou um objeto Range. Se voc omitir este
argumento, no haver um segundo campo de classificao. No pode ser usado ao
classificar relatrios de tabela dinmica.
Type Variant
Set f c = Wor ksheet s( " Pl an1" ) . Col umns( " B" ) . Fi ndNext ( af t er : =f c)
MsgBox " A pr xi ma ocor r nci a est na cl ul a " & f c. Addr ess
et f c = Wor ksheet s( " Pl S
MsgBox " A ocor r
Mtodo Insert
Insere clulas, linhas ou colunas na planilha determinada
Mtodo Merge
o recurso de mesclar clulas. Tem a seguinte sintaxe:
Range. Mer ge( Acr oss)
Onde Across deve ser definido como True, caso queiramos m
que to
esclar as clulas do
Ra , gerando uma clula por linha; e False, caso queiramos
uma nica clula.
Mtodo Select
Seleciona o Range especificado.
Mtodo Sort
Classifica os dados de um relat
ativa se o intervalo especificado contiver somen
expresso. Sor t ( Key1, Or der 1, Key2, Type, Or der 2, Key3, Or d
Header , Or der Cust om, Mat chCase, Or i ent at i on, Sor t Met hod,
Dat aOpt i on1, Dat aOpt i on2, Dat aOpt i on3)
expresso - Necessria.
a.
Ke ariant opcional. O primeiro campo de classificao, como texto (
ta in a ou nome de intervalo) ou um objeto Range ("Dept" ou l s bela d mic Cel
por exemplo).
em de classificao p Order1 opcional. A ord
em Key1.
XlSortOrder pode ser uma das seguintes constantes:
xlDescending Classifica
xlAscending padro Classifica Key1 na ordem crescente.
Key2 Variant opcional. O segundo campo de classificao,
opcional. Especifica os elementos a serem classificados. Use este
argumento somente ao classificar relatrios de tabela dinmica.
Bertolo Lies de VBA do Excel 147


XlSortType pode ser uma das seguintes constantes:
xlSortLabels. Classifica o relatrio de tabela dinmica por rtulos.
xlSortValues. Classifica o relatrio de tabela dinmica por valores.
Order2 XlSortOrder opcional. A ordem de classificao para o campo ou intervalo
relatrios de tabela dinmica.
XlSortOrder pode ser uma das seguintes constantes:
xlDescending Classifica Key2 na ordem decrescente.
xlAscen
de
e. Se voc omitir este argumento, no haver um terceiro
o classificar relatrios de tabela dinmica.
especificado em Key2. No pode ser usado ao classificar
ding padro Classifica Key2 na ordem crescente.
Key3 Variant opcional. O terceiro campo de classificao, como texto (um nome
intervalo) ou um objeto Rang
campo de classificao. No pode ser usado a
Order3 XlSortOrder opcional. A ordem de classificao para o campo ou intervalo
cificado em Key3. No pode ser usado ao classificar relatrios de tabela dinmica.
a Key3 na ordem decrescente.
padro Classifica Key3 na ordem crescente.
espe
XlSortOrder pode ser uma das seguintes constantes:
scending Classific xlDe
xlAscending
Header XlYesNoGuess opcional. Especifica se a primeira linha contm ou no
cabealhos. No pode ser usado ao classificar relatrios de tabela dinmica.
ficao personalizadas. Se voc omitir
ara fazer uma classificao que faz distino
ao que no faz distino
icar relatrios de tabela
XlYesNoGuess pode ser uma das seguintes constantes:
xlGuess. Deixa o Microsoft Excel determinar se deve haver um cabealho, e a
determinar onde ele deve estar, se existir um.
xlNo padro. (O intervalo inteiro deve ser classificado).
xlYes. (O intervalo inteiro no deve ser classificado).
OrderCustom Variant opcional. Este argumento um deslocamento de inteiro baseado
em um para a lista de ordens de classi
OrderCustom, ser usada uma classificao normal.
MatchCase Variant opcional. True p
entre maisculas e minsculas; False para fazer uma classific
entre maisculas e minsculas. No pode ser usado ao classif
dinmica.
Orienta XlLink tion opcional. A orientao da classificao.
XlSortOrientation pode ser uma das seguintes constantes:
xlSortRows padro. Classifica por linha.
xlSortColumns. Classifica por coluna.
SortMethod XlSortMethod opcional. O tipo de classificao. Algumas dessas
veis, dependendo do suporte a idioma (portugus do
ou instalou.
intes constantes:
constantes podem no estar dispon
Brasil, por exemplo) que voc selecionou
XlSortMethod pode ser uma das segu
Bertolo Lio #05 Cdigo VBA do Excel para mover-se entre as Clulas e Ranges 148

xlStroke Classificao pela quantidade de pressionamentos de tecla em cada caracteree.
xlPinYin padro. Ordem de classificao do chins fontico para caracterees.
DataOption1 XlSortDataOption opcional. Especifica como classificar texto em tecla
tion pode ser uma das seguintes constantes:
1. No pode ser usado ao classificar relatrios de tabela dinmica.
XlSortDataOp
xlSortTextAsNumbers. Trata o texto como dados numricos para a classificao.
xlSortNormal padro. Classifica dados numricos e de texto separadamente.
DataOption2 XlSortDataOption opcional. Especifica como classificar texto em tecla
2. No pode ser usado ao classificar relatrios de tabela dinmica.
XlSortDataOption pode ser uma das seguintes constantes:
ricos e de texto separadamente.
xlSortTextAsNumbers. Trata o texto como dados numricos para a classificao.
xlSortNormal padro. Classifica dados num
DataOption3 XlSortDataOption opcional. Especifica como classificar texto em tecla
3. No pode ser usado ao classificar relatrios de tabela dinmica.
XlSortDataOption pode ser uma das seguintes constantes:
ara a classificao.
Come
e Orientation so
Seqncias de caracterees de texto que no podem ser convertidas em dados numricos
so classificadas normalmente.
Observao Se no houver argumentos definidos com o mtodo Sort, o Microsoft
Excel classificar a seleo, escolhida para classificao, na ordem crescente.
Exemplo
Este exemplo classifica o intervalo A1:C20 em Plan1, usando a clula A1 como
a primeira chave de classificao e a clula B1 como a segunda chave de classificao.
A class
s( " Sheet 1" ) . Range( " A1: C20" ) . Sort _
xlSortTextAsNumbers. Trata o texto como dados numricos p
xlSortNormal padro. Classifica dados numricos e de texto separadamente.
ntrios
As configuraes para Header, Order1, Order2, Order3, OrderCustom
salvas, na planilha especfica, sempre que voc usa este mtodo. Se voc no especificar
valores para estes argumentos na prxima vez em que chamar o mtodo, sero usados
os valores salvos. Defina esses argumentos explicitamente sempre que for usar o
mtodo Sort , caso escolha no usar os valores salvos.
ificao feita na ordem crescente por linha, e no h cabealhos. O exemplo
supe que existam dados no intervalo A1:C20.
Sub Sor t Range1( )

Wor ksheet
Key1: =Wor ksheet s( " Sheet 1" ) . Range( " A1" ) , _
Key2: =Wor ksheet s( " Sheet 1" ) . Range( " B1" )

End Sub
Bertolo Lies de VBA do Excel 149


Este segundo exemplo classifica a regio q
em Plan1, classificando pelos dados na primeira coluna
linha de cabealho, se existir. O exemplo supe que existam d
ue contm a clula A1 (a regio ativa)
e usando automaticamente uma
ados na regio ativa, que
inclui a
_
mns( " A" ) , _
sar mais. Ele lhe permite mover para a
r exemplo se voc quiser mover 3
a a direita, voc escrever:
Act i vecel l . Of f set ( 0, 3) . Sel ect
Se voc quiser mover trs clulas para baixo:
Act i vecel l . Of f set ( 3, 0) . Sel ect
Se voc quiser selecionar uma clula e mais uma outra a trs linhas abaixo desta:
Range( Act i vecel l , act i vecel l . Of f set ( 3, 0) ) . Sel ect
Range( " A1" , Range( " A1" ) . Of f set ( 3, 0) ) . Sel ect
clula A1. O mtodo Sort determina a regio ativa automaticamente.
Sub Sor t Range2( )

Wor ksheet s( " Pl an1" ) . Range( " A1" ) . Sort
Key1: =Wor ksheet s( " Pl an1" ) . Col u
Header : =xl Guess

End Sub
Mtodo Offset
O mtodo Offset aquele um que voc u
direita, para a esquerda, para cima e para baixo. Po
clulas par
Bertolo Lio #05 Cdigo VBA do Excel para mover-se entre as Clulas e Ranges 150

A Coleo Borders

inar as caracteresticas das bordas
um




A coleo Borders responsvel por determ
de determinado Range.
Uma coleo de quatro objetos Border representando as quatro bordas de
ob
um
jeto Range ou Style.
Usando a coleo Borders
de Borders para retornar a coleo Bo Use a proprieda rders, que contm todas
iona uma borda dupla clula A1 na planilha
.
( " A1" ) . Bor der s. Li neSt yl e = xl Doubl e
) . Range( " A1: G1" ) . _
onalDown,
op,
rizontal ou xlInsideVertical.
iagonal de cima para baixo
de baixo para cima
xlEdge
Edge inferior
dge
xlInside
nside orizo
t h
as quatro bordas. O exemplo seguinte adic
um
Wor ksheet s( 1) . Range
Use Borders(index), onde index identifica a borda, para retornar um nico
objeto Border. O exemplo seguinte define como vermelho a cor da borda inferior das
clulas A1:G1.
Wor ksheet s( " Sheet 1"
Bor der s( xl EdgeBot t om) . Col or = RGB( 255, 0, 0)
Index pode ser uma das seguintes constantes XlBordersIndex: xlDiag
Up, xlEdgeBottom, xlEdgeLeft, xlEdgeRight ou xlEdgeT xlDiagonal
xlInsideHo
Junto com Borders, so passadas as constantes que representam qual borda est
sendo modificada. So elas:
xlDiagonalDown D
xlDiagonalUp Diagonal
xlEdgeLeft Borda esquerda
Top Borda superior
Bottom Borda xl
xlE Borda direita Right
Vertical Linha interna vertical
xlI H ntal Linha interna horizontal.
Exemplos:
Wi Range( A1: D4) . Bor der s( xl EdgeBot t om)
. Col or I ndex = 3
. Li neSt yl e = xl Dash
. Wei ght = xl Medi um
End Wi t h



Bertolo Lies de VBA do Excel 151


Propriedades Color e ColorIndex
anto ColorIndex
=
jeto Font possui toda a formatao de fonte que podemos fazer na interface
dade Booleana que define o estilo itlico da fonte.
ame ser usada.
D
Obj
visual do fundo de uma clula. Suas
EXEMP
A propriedade Color especifica,em RGB, a cor da borda, enqu
especifica, em valor inteiro, o index para a paleta de cores. Por exemplo, Color
RGB(255,0,0) equivale a ColorIndex = 3.
Propriedades LineStyle e Weight
Possuem os mesmos parmetros de e do mtodo LineStyle Weight
BorderA . round
O Objeto Font
O ob
grfica do Excel. Vejamos as principais propriedades:
Bold Propriedade Booleana que define o estilo negrito da fonte.
Color ou ColoIndex Define a cor da fonte nos parmetros anteriormente citados.
Italic Proprie
N Define o nome da fonte a
Size efine o tamanho da fonte.
O eto Interior
O objeto Interior define a formatao
principais propriedades so:
Propriedade Color e ColorIndex
Definem a cor de preenchimento de uma clula.
LO Colorindo Clulas Baseado No Seu Valor
A rotina seguinte colorir uma clula numa seleo em vermelho se o valor da clula for
maior do que 5
o
r se no f or mai or do que 5
one
dezoito
Sub t est eCor ( )
Di mcel ul a As Range
For Each cel ul a I n Sel ect i on
' t est ar umval or numr i co pr i mei r
I f I sNumer i c( cel ul a. Val ue) Then
' t est ar o val or da cl ul a
I f cel ul a. Val ue > 5 Then
' col or i r se f or mai or do que 5
cel ul a. I nt er i or . Col or I ndex = 3
El se
' l i mpar a co
cel ul a. I nt er i or . Col or I ndex = xl N
End I f
End I f
Next
End Sub
Propriedade Pattern
Define um padro para ser aplicado no fundo de uma clula. Existem
padres que podem ser usados.
Bertolo Lio #05 Cdigo VBA do Excel para mover-se entre as Clulas e Ranges 152

Propriedades PatternColor e PatternColorIndex
Retorna ou define a cor do padro a ser aplicada no interior da clula como um
ndice na paleta de cores atual, ou como

uma das seguintes constantes XlColorIndex:
e cores padro.
t angl es( 1) . I nt er i or
d Wi
odos os valores, aqui est uma rotina interessante.
Tr at
i mFundo, Padr ao, Cor Padr ao As I nt eger
vor , di gi t e o val or " & _
0 - 56) " )
dr a = I n & _
c
t er i or . Pat t er n = Padr ao
al or da cor " & _
a " & _
" do Range especi f i cado. . . " , vbCr i t i cal
xlColorIndexAutomatic ou xlColorIndexNone. Long de leitura/gravao.
Defina essa propriedade como xlColorIndexAutomatic para especificar o
o automtico para objetos de padro automtico para clulas ou o estilo de preenchiment
desenho. Defina essa propriedade como xlColorIndexNone para especificar que voc
no deseja um padro (isso o mesmo que definir a propriedade Pattern do objeto
Interior como xlPatternNone).
Comentrios
ndice de cor da paleta d A ilustrao seguinte mostra os valores de




Exemplo
Este exemplo define a cor do padro interior para o retngulo um em Sheet1.
Wi t h Wor ksheet s( " Sheet 1" ) . Rec
. Pat t er n = xl Checker
. P ttern olorI a C ndex = 5
En t h

ara testar t P
Pr i vat e Sub Wor ksheet _Sel ect i onChange( ByVal Tar get As Range)
On Er r or GoTo
D
Fundo = I nput Box( " Por f a
" da cor de pr eenchi ment o das cl ul as (
Tar get . I nt er i or . Col or I ndex = Fundo
Pa o put Box( " Por f avor , di gi t e o padr o desej ado"
l ul as ( 0 - 18) " ) " par a as
ar get . I n T
Cor Padr ao = I nput Box( " Por f avor , di gi t e o v
do padr o da cl ul a ( 0 - 56) " ) "
Tar get . I nt er i or . Pat t er nCol or I ndex = Cor Padr ao
Exi t Sub

Tr at :
MsgBox " Voc deve t er escol hi do al gumval or f or

End Sub
Bertolo Lies de VBA do Excel 153


Outro Exemplo
A macro seguinte somar todas as clulas na seleo que tenha uma cor de fundo(
ackground) em vermelho.

Di mcel ul a As Range
' i ni ci al i za a var i vel soma var i abl e emzer o ( no exi gi do,
mas uma boa pr t i ca
somaI nt = 0
' ver i f i ca cada uma das cl ul as na sel eo que est t ambm
no r ange usado.
' I st o evi t a t er que ver i f i car se h cl ul a est vazi a numa
' col una i nt ei r a ou l i nha est sel eci onada.
For Each cel ul a I n I nt er sect ( Sel ect i on,
Act i veSheet . UsedRange)
' o i nt er i or r ef er e- se ao backgr ound de uma cl ul a

I f cel ul a. I nt er i or . Col or I ndex = 3 Then
somaI nt = somaI nt + cel ul a. Val ue
End I f
Next cel ul a
' most r a os r esul t ados
MsgBox " a soma " & somaI nt
End Sub
Mais Um Exemplo Colorindo Clulas Para Destac-las Baseado Num Texto
O que segue mudar a cor de fundo (background) de cada linha que tenha o
texto "conta" na coluna 1.
Sub Col or i ndoAs( )
Di mNdx As Long
For Ndx = 1 To Act i veSheet . UsedRange. Rows. Count
I f LCase( Cel l s( Ndx, 1) . Val ue) = " cont a" Then
Rows( Ndx) . I nt er i or . Col or I ndex = 3
End I f
Next Ndx
End Sub
Como fazer a sua macro esperar uns poucos segundos.
A declarao seguinte:
Appl i cat i on. Wai t Now + Ti meVal ue( " 00: 00: 05" )
esperar por 5 segundos e da rodar a prxima declarao.
b
Sub SomaDeCor es( )
Di msomaI nt As Si ngl e
Bertolo Fase #2: Cdigo VBA do Excel (Macros) 154


Lio 6: Cdigo VBA do Excel para Caixas de Mensagens

com o usurio. Voc pode us-la para informar, alertar-lhe ou pedir-lhe para
escolher um certo path (Sim/No).
O cdigo no VBA para Excel para gerar a seguinte caixa de mensagem bsica :
MsgBox " Sua mensagemaqui "
o VBA para Excel a caixa de mensagem a principal ferramenta para interagir
N

Quando voc desenvolver um procedimento que leva tempo para rodar, voc
encerra seu cdigo com uma caixa de mensagem bsica dizendo ao usurio que o
cl ul a " " A1" " "
ndo com uma caixa de mensagem " Sim/No" voc precisar

oc guarda a resposta na varivel com o cdigo:
" var R
as
procedimento foi executado.
MsgBox " O r el at r i o est pr ont o"
Ou
MsgBox " O pr ocedi ment o f oi execut ado voc deve agor a i r par a a
f ol ha " " Capa" " "
Ou
MsgBox " O pr ocedi ment o f oi execut ado voc deve agor a i r par a a
Note que se voc quiser parte da sua mensagem esteja entre aspas voc tem de
dobrar as aspas dentro da mensagem. Quando a usurio clicar num boto na caixa de
mensagem Excel ela dispara um procedimento que far alguma coisa importante como
deletar todos os dados. Sempre iniciar o cdigo com uma caixa de mensagem que
pergunte ao usurio se ele tem certeza que ele quer que o procedimento rode. Neste caso
use uma caixa de mensagem "Sim/No".
Quando trabalha
coletar a resposta dada pelo usurio.
Passo 1: Voc primeiro declara uma varivel para armazenar a resposta
"Di mvar Respost a as st r i ng" .
Passo 2: V
espost a = MsgBox( " Voc est cer t o que voc quer del et ar
t odos os dados?" , vbYesNo, " Adver t nci a" ) " .
Note os parnteses dentro do qual voc submete os trs argumentos; a
mensagem, o tipo de caixa de mensagem e seu ttulo. Note tambm as asp
envolvendo a mensagem e o ttulo.
Bertolo Lies de VBA do Excel 155


Passo nder
r i goso( )
g
Voc est cer t o que voc quer del et ar
per i goso de del et ar os dados
ixa de mensagem bsica (primeiro exemplo acima),
ar parnteses. Se voc desenvolver uma caixa de mensagem mais
escrevendo a linha de cdigo (exemplo
parnteses o Excel mostra-lhe o que
3: Voc trata a resposta com uma declarao "IF" onde se o usurio respo
"No" voc sai do procedimento com "Exit Sub"
Aqui est o procedimento inteiro.
Sub pr oPr ocedi ment oPe
Di mvar Respost a As St r i n
var Respost a = MsgBox( "
t odos os dados?" , vbYesNo, " Adver t nci a" )
I f var Respost a = vbNo Then
Exi t Sub
End i f
Aqui i ni ci a o pr ocedi ment o
End Sub
Quando voc
recisa us
criar uma ca
voc no p
complexa voc ver que quando voc iniciar
Answer =MsgBox(, logo aps os acima) var
esperado como argumentos:

1- O Prompt no opcional, a mensagem que voc quer que seu usurio leia na caixa
de mensagem e ela deve estar entre aspas.
2- Quando voc entrar com vrgula aps o prompt, o Excel oferece-lhe uma lista drop-
down de todos os tipos de caixa de mensagem que voc pode criar.

Escolha a sua caixa de mensagem e entre com uma vrgula.
3- O te no rceiro argumento o ttulo da caixa de mensagem que aparecer na faixa azul
topo da caixa de mensagem. Submeta um ttulo entre aspas.
O quarto e quinto argumentos raramente so usados, eles so opcionais e voc
lquer coisa ento...mas feche os parnteses.
stem muitos tipos de caixas de mensagens. Aquelas que
s so a vbYesNo, vbOKCancel, vbRetryCancel. Voc
orativa como a
Que on, a trado abaixo.
no precisa entrar com qua
Como voc pode ver, exi
temente usada so mais freqen
ver amb de t m querer usar uma caixa de mensagem mais dec
mation ou a vbCritical como mos vb sti vbInformation, a vbExcla
Bertolo Lio #06 Cdigo VBA do Excel para Caixas de Mensagens 156



No existem caixas de mensagem no VBA para Excel que voc possa mostrar ao

ra" e insira uma figura, um
dando" e
rimeiro voc torna a folha que voc criou visvel e selecione-a (Linhas 1 e 2).
pulheta (Linha 3)
tualizao de tela (Linha 4)
asso #
inha 7)
i si bl e=Tr ue

usurio enquanto um procedimento roda por um tempo muito longo. Mas h um modo
de contornar isto. Adicione uma planilha chamada "Espe
wordart ou uma mensagem numa fonte muito grande como "Procedimento ro
oculte a folha.
Passo #1: P
Passo #2: Voc deve querer mudar o cursor para a am
Passo #3: Voc desativa a funcionalidade de a
P 4: Voc escreve o seu longo procedimento (Linha 5 no exemplo)
Passo #5: Voc oculta a folha especial (Linha 6)
Passo #6: Voc traz de volta o cursor default (L
Passo #7: Voc re-ativa a funcionalidade atualizao de tela
Adicione este cdigo ao seu longo procedimento. Apenas troque a linha "Aqui
u prprio procedimento.: est seu longo procedimento" pelo se
Sub pr oPr ocedi ment oLongo( )
Sheet s( " Esper a" ) . V
Sheet s( " Esper a" ) . Sel ect
Appl i cat i on. Cur sor = xl Wai t
Scr eenUpdat i ng=Fal se Appl i cat i on.
Aqui est o l ongo pr ocedi ment o
Sheet s( " Esper a" ) . Vi si bl e=Fal se
Appl i cat i on. Cur sor = xl Def aul t
cat i on. Scr eenUpdat i ng=Tr ue Appl i
End Sub
Bertolo Lies de VBA do Excel 157


Mostrando Caixas de Mensagens
mensagem que tem apenas um boto OK nela.
b M
MsgBox " Est e umexempl o de uma mensagem. "
caixa de mensagem que mostra os botes OK e
Sub M
a = MsgBox( " Sel eci one OK ou Cancel ar " , vbOKCancel )
ar a ver se o bot o cancel ar f oi sel eci onado
en

I f
ma maneira muito mais
to Cancelar pra a execuo e a seleo do boto OK
bOKCancel Then
er emexecut ados se OK f or sel eci onado

vez
sageme ar mazenar uma r espost a par a
i f i que par a ver se o bot o Cancelar f oi sel eci onado
' ver i f i que par a ver se f oi sel eci onado
= vbYes Then

sel eci onado
End Sub
O que segue mostra uma caixa de
Su sgExemplo1()

End Sub
O que segue mostra uma
Cancelar, permitindo o usurio fornecer uma resposta:
sgExemplo2()
Di mi Respost a As I nt eger
i Respost
' ver i f i que p
I f i Respost a = vbCancel Th
MsgBox " Voc sel eci onou Cancel ar "
End I f
I f i Respost a = vbOK Then
MsgBox " Voc sel eci onou OK"
End
End Sub
Este exemplo tambm p
o do bo
oderia ter sido escrito de u
condensada, onde a sele
rmite pe continu-la:
Sub MsgExemplo3()
I f MsgBox( " Sel eci one OK par a Cont i nuar " ) = v
End
' Comandos a s
End Sub
O que segue ilustra uma caixa de mensagem que mostra os botes Sim, No e
Cancelar. Se voc quiser somente os botes Sim ou No, ento use vbYesNo em
de vbYesNoCancel
Sub MsgExemplo4()
Di mi Respost a As I nt eger
' most r ar uma men
' aval i ao
i Respost a = MsgBox( " Sel eci one umbot o" , vbYesNoCancel )
' ver
I f i Respost a = vbCancel Then
MsgBox " Voc sel eci onou Cancel ar "
End I f
Sim
I f i Respost a
MsgBox " Voc sel eci onou Si m"
End I f
o f oi ' ver i f i que e vej a se N
I f i Respost a = vbNo Then
MsgBox " Voc sel eci onou No"
End I f
Bertolo Lio #06 Cdigo VBA do Excel para Caixas de Mensagens 158

Forma
gBo

Chr (
iveis numEqui p, Descr i o, e par t edaDat a j foram definidas.
xima linha.
Usand
s-lo para delimitar strings de texto.
ou " Descr i o"
Se voc quiser usar aspas duplas para destacar texto numa caixa de mensagem,
34) & " AOOO" & Chr
4) "
porque as duas aspas duplas numa linha
delimitao de uma string de
ens
alguns exemplos de como se usar a funo MsgBox:
sgBox
bI nf or mat i on
' cai x
espost a = MsgBox( " Voc quer cont i nuar ?" , vbYesNo)
uest i on)
ao
n, " Meu
al i zado
tando numa Caixa de Mensagem
O que segue ilustra como formatar entradas numa MsgBox:
Ms x " Equi pament o N. " & numEqui p & Chr ( 13) _
& " Descr i o - " & Descr i o &
13) _
& " Pr azo I nt er no - " & For mat ( par t edaDat a, " ddd- mm" )
onde as var
Acima o Chr(13) a tecla enter, permitindo mostrar a entrada na pr
Outros valores teis para Chr() so 174 que um smbolo copyright e 34 que uma
aspa dupla.
o Aspas Duplas Numa Caixa de Mensagem
principal uso das aspas duplas no seu cdigo u O
Por exemplo,
MsgBox " Al Mundo"
Act i veCel l . Val ue =

ento use uma das seguintes aproximaes:
MsgBox " O mundo" & Chr (
as ( 3 & " est emaspas dupl
ou MsgBox " O mundo " " AOOO" " est emaspas dupl as"
O segundo exemplo funciona
interpretada como parte da string de texto e, no como
texto.
Mais exemplos de uso das caixas de mensag
Aqui esto
M " O t r abal ho est f ei t o ! "
' cai xa de mensagemcomt ext o e bot o OK
MsgBox " O t r abal ho est f ei t o ! " , v
' cai xa de mensagemcomt ext o, bot o OK e um cone de i nf or mao
MsgBox " O t r abal ho est f ei t o ! " , vbCr i t i cal
a de mensagemcomt ext o, bot o OK e um cone de adver t nci a
MsgBox " O t r abal ho est f ei t o ! " , vbI nf or mat i on, " Meu T t ul o"
' cai xa de mensagemcomt ext o, bot o OK, cone de i nf or mao e um
t ext o de t t ul o per sonal i zado.

R
' cai xa de mensagemcombot es YES e NO,
' o r esul t ado umi nt ei r o, as const ant es so nomeadas vbYes e vbNo.
espost a = MsgBox( " Voc quer cont i nuar ?" , vbYesNo + vbQ R
' cai xa de mensagemcombot es YES e NO e um cone de i nt er r og
Respost a = MsgBox( " Voc quer cont i nuar ?" , vbYesNo + vbQuest i o
T t ul o" )
' cai xa de mensagemcombot es YES e NO,
mt ext o de t t ul o per son ' cone de i nt er r ogao e u
Bertolo Lies de VBA do Excel 159


Respost a = MsgBox( " Voc quer cont i nuar ?" , vbYesNo + 256 + vbQuest i on,
" Meu T
NO
)
r o,
as c
funo MsgBox pode ser armazenado numa varivel. A varivel
um cdigo de macro
mo e

en Exi t Sub ' a macr o t er mi na se o
I f Ms
e Entrada Ou Caixa de
Box, ento isto atua como um alinhamento do
Chr ( 13) & " Est a a t er cei r a l i nha"
Se voc igo
omo o seguinte:
& " Est a t ambmi ndent ada"
juda A Uma MsgBox
O boto de ajuda numa caixa de mensagem pode somente ser mostrado usando a
seguinte aproximao. possvel que erros fixados pelo Microsoft podem consertar
isto, mas isto necessrio para usurios que no fizeram. Voc tem que adicionar um
boto ajuda explicitamente com os argumentos de botes, como este:

MsgBox " Cl i que Aj uda par a aj uda?" , _
t ul o" )
' cai xa de mensagemcombot es YES e NO, cone de i nt er r ogao e um
ext o de t t ul o per sonal i zado, t
' o bot o o def aul t
Respost a = MsgBox( " Voc q
cai x
uer cont i nuar ?" , vbOKCancel , " Meu T t ul o"
' a de mensagemcombot es OK- e CANCEL, o r esul t ado umi nt ei
' onst ant es so nomeadas vbOK ou vbCancel.
O resultado da
pode ser do tipo Integer. Esta varivel pode ser usada mais tarde n
co ste:
Respost a = MsgBox( " Voc quer cont i nuar ?" , _
bOKCancel , " Meu T t ul o" ) v
I f Respost a = vbCancel Th
usur i o sel eci onar o bot o CANCEL
este: Ou como
gBox( " Voc quer cont i nuar ?" , vbOKCancel , _
" Meu T t ul o" ) = vbCancel Then Exi t Sub

C F tar Uma Mensagem omo orma Numa Caixa d
Mensagem

Chr(13) no seu texto Msg Se voc usar
papel, colocando o texto seguinte ao Chr(13) numa nova linha numa MsgBox.

tiLinhas () Sub ExemploMul
MsgBox " Est a a pr i mei r a l i nha. " & _
a segunda l i nha. " & _ Chr ( 13) & " Est a

End Sub

quer que uma linha seja indentada (afastada da margem), ento use um cd
c

Sub Exempl oI ndent ar ( )
MsgBox " Est a a pr i mei r a l i nha. " & _
Chr ( 13) & Chr ( 9) & " Est a i ndent ada. " & _
Chr ( 13) & Chr ( 9)
End Sub

Adicionando Um Boto de A

Bertolo Lio #06 Cdigo VBA do Excel para Caixas de Mensagens 160

vbCr i t i cal + vbMsgBoxHel pBut t on, " Aj uda" ,
" r unner . hl p" , 10

rio
e o nmero usado como o
ltimo argumento dependente do arquivo ajuda.
Isto mostrar um arquivo ajuda chamado runner.hlp que est no diret
Windows (assumindo que ele exista). Por favor note qu

Bertolo Fase #2: Cdigo VBA do Excel (Macros) 161




Lio 7: Cd
aix de e valor do usurio.
igo para Caixas de Entrada VBA do Excel
as ntrada de dados so usadas para exigirem um NICO

o segue. Com este
o na clula "A1" de
hamada "Intro".
S
oc
d S
ados
omo
Sheet s( " I nt r o" ) . Range( " A1" ) . Val ue = I nput Box( " Par a que ano voc
O cdigo bsico para um a caixa de entrada de dados c
to sempre que o valor submitido pelo usurio entrad
om
procedimen
ma folha c u
Sub pr oI nput ( )
heet s( " I nt r o" ) . Range( " A1" ) . Val ue = I nput Box( " Par a que ano
pr eci sa est e r el at r i o?" ) v
En ub
Voc tambm pode usar um cabealho diferente para a caixa de entrada de d
(c "Ano" neste exemplo)
pr eci sa est e r el at r i o?" , Ano)

possvel impor um caracte Antes de ir adiante, devo dizer-lhe que no re de
ar com
les. Se
valor submitido pelo usurio antes de continuar com o
azenar o valor diretamente numa clula mas numa varivel.
recer com este:
Sub p
Di mv
C
password (*) na caixa de entrada de dados. Para conseguir isto voc deve trabalh
xa de texto. Veja como na lio sobre userforms e contro um userform e uma cai
r validar o voc quise
rocedimento voc no arm p
O cdigo dever ento se pa
r oEnt r ada( )
ar Ent r ada As I nt eger
var Ent r ada = I nput Box( " Par a que ano voc pr eci sa est e
r el at r i o?" )
Sheet s( " I nt r o" ) . Range( " A1" ) . val or = var Ent r ada
End Sub
Bertolo Lio #07 Cdigo para Caixas de Entrada em VBA do Excel 162

Uma varivel "varEntrada" declarada Dim varEntrada As Integer para receber
o valor subme
a va vel e o "Integer"
sim s usu
e omo ing D
Dim ando uma data.
or de erro ou alguma
Aqui est o c
que ano voc pr eci sa est e
S
End S
uma varivel do tipo data Dim
arEntrada As Date de modo que se o usurio submeter alguma coisa alm de uma data
er manipulado. Eu digo ento ao VBA que se um erro ocorrer o
para os endereos adErro On Error GoTo adErro. Isto
to
adErro. Uma caixa de mensagem dir ento ao
uma data.". Se
eclarao "IF" para verificar
2006. Se ele for h uma outra caixa de mensagem Msgbox
um Exit Sub que coloca um final ao procedimento. Se o
a data e o ano vlido o procedimento roda completamente at
Interro
O que segue uma macro que se interrompe at que o usurio entre com um
a clula ativa. Se o usurio pressionar Cancel, a macro
comal guma coi sa" )
hen
tido pelo usurio. O usurio entra com um valor que transferido para
da para uma clula. Note aqui qu um ri e a varivel declarada com
io sub as e o r mete um texto "string" um erro gerado. Voc pode declarar a
l c str im varEntrada As String se voc estiver esperando um texto ou variv
mo date co varEntrada As Date se voc estiver pergunt
agem voc pode usar um manipulad Com esta abord
declarao "IF" para validar o valor submetido pelo usurio antes de seguir em frente.
digo para manipular erros (resposta do usurio cancelada ou invlida) e
validar o valor submetido:
Sub pr oEnt r ada( )
i mva Ent r da A D r a s Dat e
On Er r or GoTo adEr r o
( " Par a var I nput = I nput Box
r el at r i o?" )
I f year ( var Ent r ada) > 2006 t hen
MsgBox " Ano i nvl i do"
Exi t Sub
End I f
Faa i st o e aqui l o.
ub Exi t
adEr r o:
MsgBox " I st o no uma dat a. "
ub
Neste procedimento eu primeiro declaro
v
l ser um erro VBA a s
procedimento dever pular
significa que se o usurio submeter qualquer coisa alm de uma data o procedimen
saltar todas as linhas at chegar em
usurio que aquilo que ele submeteu no uma data MsgBox "Isto no
ue submetido for de fato uma data eu uso uma d aquilo q
se o ano da data maior que
lido" seguido por "Ano inv
valor submetido for um
ele atingir o outro Exit Sub logo antes de adErro: ( com a vrgula no final).

mpendo Uma Macro Para Entradas

valor. O valor ento escrito n
entra em loop.
S t er Ent r ada( )
Di mst r As St r i ng
ub Ob
Do
t Box( " Ent r e st r = I npu
I f st r <> " " T
Bertolo Lies de VBA do Excel 163


Act i veCel l . Val ue = st r
Do
ar os seguintes passos diretamente antes da declarao Loop
o usurio quer continuar:

Se voc usar Application.InputBox para mostrar uma caixa de entrada, voc pode
ao usurio entrar especificando um valor para o tipo de
s:
adaRespost a As Var i ant
As Si ngl e
de

o" ,
ent r adaRespost a = Fal se
' ar ma
l Num= Val (
sgBox " voc
o
deve ser do t i po
di r !
nge
o usur i o pr essi onar
el ect i on = Appl i cat i on. I nput Box( _
nt r e comumr ange" , Type: =8)
MsgBox " Voc sel eci onou " & user Sel ect i on. Addr ess
( ext er nal : =Tr ue)
Exi t
End I f
Loop
End Sub
Voc
para ver se
pode coloc
I f MsgBox( " Voc quer cont i nuar " , vbYesNo, _
" Cont i nuar ?" ) = vbNo Then End
RESTRINGINDO O QUE PERMITIDO NUMA CAIXA DE ENTRADA
restringir o que permitido
gume ar nto. Por exemplo, o que segue restringe o usurio a fornecer apenas nmero

Di ment r
Di ml Num
' use uma var i vel var i ant par a obt er a r espost a da cai xa
' ent r ada quando a r espost a puder ser Bool ean ( f al sa) ou um
' val or
ent r adaRespost a = Appl i cat i on. I nput Box( _
Pr ompt : =" Ent r e comumnmer
Type: =1)
I f Then Exi t Sub
zena a ent r ada do usur i o numa var i vel numr i ca.
' Not e que a cai xa de ent r ada r et or na uma st r i ng mesmo se o t i po
' f or 1
ent r adaRespost a)
ent r ou com" & l Num M

O que segue usa . para obter um intervalo selecionado pel Application InputBox
usurio, ajustando o tipo de argumento para 8.

A var vel par a ent r ada ' i a r espost a da cai xa de
I s Not hi ng expl o ' r ange ou ent o o t est e
on As Ra Di muser Sel ect i
l i gue ' o mani pul ador de er r o no caso d
' cancel
Resume Next On Er r or
Set user S
pr ompt : =" e
On Er r or GoTo 0
I f user Sel ect i on I s Not hi ng Then
' most r ar est a menssagemse o bot o cancel f oi sel eci onado
MsgBox " Umr ange no f oi sel eci onado"
Exi t Sub
End I f
' most r ar o r ange sel eci onado
Bertolo Lio #07 Cdigo para Caixas de Entrada em VBA do Excel 164

' par a i r ao r ange sel eci onado
Appl i cat i on. Got o user Sel ect i on, Tr ue

Os valores mais populares para o tipo de argumento so:

Um nmero 1
2 Texto (uma string)
4 Um valor lgico (True ou False)
Uma referncia de clula, como um objeto Range 8

Para maiores informaes sobre a caixa de entrada, destacar a palavra no Visual Basic
Editor e pressionar F1 para ajuda.
CONVIDANDO O USURIO A ENTRAR COM UM NMERO
Voc pode conseguir que o usurio fornea-lhe um nmero usando o cdigo
como o seguinte.
Sub Get ANumber ( )
Di muser I nput As Var i ant
' most r ar a apl i cao cai xa de ent r ada, como t i po aj ust ado
' par a 1 a qual per mi t e soment e ent r adas de nmer os
user I nput = Appl i cat i on. I nput Box( _
pr ompt : =" Por f avor ent r ar comumnmer o" ,
Type: =1)
' se o bot o cancel f or sel eci onado, o TypeName Bool ean
I f TypeName( user I nput ) = " Bool ean" Then
Exi t Sub
End I f
' conver t e a ent r ada do usur i o de uma st r i ng par a umnmer o
user I nput = Val ( user I nput )
' most r a a ent r ada do usur i o e o TypeName
MsgBox user I nput & " " & TypeName
( user I nput )
End Sub
Se o Tipo de argumento no for especificado, ento o usurio poder entrar com
qualquer string, no apenas nmeros. Se Application.InputBox no for usado, mas
somente a InputBox for usada, no h maneira de distinguir entre um Zero e a seleo
cancelar do usurio. Finalmente, toda entrada de uma caixa de entrada uma string, e
deve ser convertida para um nmero se ela um nmero. Por outro lado, testes
numricos no funcionaro.
USANDO A FUNO APPLICATION.INPUTBOX PARA ESPECIFICAR UM
NMERO
A funo Application.InputBox pode ser usada par restringir entradas do usurio
apenas a nmeros especificando um tipo de argumento quando voc mostrar a caixa de
entrada caixa de entrada. O que segue ilustra isto:

Sub Obt er _Um_Numer o( )
Di mRespost aDoUsuar i o As Var i ant
Bertolo Lies de VBA do Excel 165


' m
Respost aDoUsuar i o = _
Appl i cat i on. I nput Box( Pr ompt : =" Ent r e comumnmer o" , _
Type: =1)
' ver i f i car e ver se bot o cancel ar f oi sel eci onado. Sai r
' se f or
I f Respost aDoUsuar i o = " Fal se" Then
ost r ar a cai xa de ent r ada
Exi t Sub
most r ando qual nmer o f oi ent r ado
r t er a umnmer o ao i nvs de uma
aneira de se determinar se o boto cancelar foi selecionado na
Sub
guinte:
eger
e
que voc deveria validar a varivel AData para confirmar que ela est

' most r ar uma mensagem
' use Val ( ) par a conve
' " st r i ng number "
MsgBox " O nmer o ent r ada f oi " & Val ( Respost aDoUsuar i o)
End Sub

No exemplo acima, a varivel que recebe o resultado da declarao
Application.InputBox deve ser uma varivel Variant. Deste modo, ela pode acitar ou um
nmero ou uma resposta False se o boto cancelar for selecionado.
Uma outra m
Application.InputBox usar um teste TypeName():

I f TypeName( Respost aDoUsuar i o) = " Bool ean" Then Exi t
INPUTBOX PARA PEDIR POR UMA DATA
Tente o cdigo se

Sub Obt er UmaDat a( )
ASt r i ng As St r i ng Di m
Di mRowNdx As I nt
Di mADat a As Doubl
ASt r i ng = Appl i cat i on. I nput Box( " Ent r ar ComUma Dat a
I ni ci al " )
I f I sDat e( ASt r i ng) Then
ADat a = Dat eVal ue( ASt r i ng)
El se
MsgBox " Dat a i nvl i da"
End I f
End Sub

Note
dentro do intervalo de data que voc quer.
USANDO A INPUTBOX DO VISUAL BASIC PARA RETORNAR UM RANGE
Existem dois tipos de input boxes no Excel. H a funo Visual Basic InputBox
e ela retorna somente uma string texto. Ela a mais simples para se usar. H tambm a
Excel Application.InputBox que permite-lhe especificar o tipo de entrada que
retornada. O que segue ilustra o uso da funo VB InputBox:

A abordagem mais simples com nenhuma verificao de erro assume que o usurio
no confundir a seleo ou no sair se uma caixa de erro aparecer.
Bertolo Lio #07 Cdigo para Caixas de Entrada em VBA do Excel 166

' decl
ancel ou, sai r do pr ocedi ment o
t o = " " Then
Sub
' r est ant e do seu cdi go
Exi t Sub
' a sub exi t aci ma evi t a ent r ar no segui nt e er r or handl er
' que usado se a ent r ada no f or umr ange vl i do
Er r or Handl er :
MsgBox " Est e no er a umender eo de cl ul a vl i do"
Resume Obt er UmaCel ul a
End Sub
COMO OBTER UM ENDEREO DE CLULA DE UM USURIO
e

ar ar uma var i vel Var i ant par a a sa da da I nput Box
Di mmeuObj et o As Var i ant
meuObj et o = I nput Box( " Ent r ar comuma cl ul a" )
Range( meuObj et o) . Sel ect

Entretanto, voc dever considerar se o usurio acionou a tecla cancelar que
retorna False ou entrou com um endereo invlido. O que segue mostra como fazer isto:

Sub Exempl oI nput Box( )
Di mmeuObj et o As Var i ant , cel ul asSel eci onadas As Range
' r et or na uma l abel no caso de umi nt er val o i nvl i do ser
' ent r ado
Obt er UmaCel ul a:
meuObj et o = I nput Box( " Ent r ar uma cl ul a" )
' Se nenhuma ent r ada f or f ei t a na cai xa, mesmo se OK
' c
I f meuObj e
Exi t
El se
' l i gar er r or handl i ng no caso da ent r ada no ser umr ange
On Er r or GoTo Er r or Handl er
' ar mazenar a ent r ada numa var i vel r ange par a usar mai s
' t ar de
Set cel ul asSel eci onadas = Range( meuObj et o)
' desl i gar er r or handl i ng
On Er r or GoTo 0
End I f
Use o mtodo Application.InputBox, com o argumento Type ajustado para 8:

Di mORange As Rang
On Er r or Resume Next
Set ORange = Appl i cat i on. I nput Box _
( pr ompt : =" Sel eci one uma cl ul a" , t ype: =8)
On Er r or GoTo 0
I f ORange I s Not hi ng Then
MsgBox " Voc no sel eci onou uma cl ul a"
End I f
' r est ant e do seu cdi go
Bertolo Lies de VBA do Excel 167


USANDO INPUTBOXES PARA OBTER UM RANGE DE CLULAS

O que segue so dois exemplos que mostram como o usurio conseguir
selecionar apenas um intervalo de clula simples. Os dois exemplos aps estes
permitem o usurio s
dois
elecionar qualquer nmero de clulas.

Sub Exempl oDeEnt r ada1( )
' Est e exempl o most r a uma cai xa de ent r ada e pede ao usur i o
On Er r or GoTo 0
' ver i f i car se umi nt er val o f oi sel eci onado
I f cel ul asSel eci onadas I s Not hi ng Then
MsgBox " Nenhuma cl ul a f oi sel eci onada"
Exi t Sub
El seI f cel ul asSel eci onadas. Cel l s. Count > 1 Then
' ver i f i car e ver quant as cl ul as f or amsel eci onadas
' most r ar mensagens dando o r esul t ado
MsgBox " Voc sel eci onou mai s do que uma cl ul a"
Exi t Sub

s
i on. I nput Box _
( pr ompt : =" Sel eci one uma cl ul a si mpl es" , Type:
=8)
' desl i gar o ver i f i cador de er r o
On Er r or GoTo 0
' par a sel eci onar uma cl ul a.
Di mcel ul asSel eci onadas As Range
' conf i gur ar on er r or no caso de cancel ar t er si do
' sel eci onado
On Er r or Resume Next
' most r ar a cai xa de ent r ada e at r i bui r r esul t ados de
' sel eo par a uma var i vel
Set cel ul asSel eci onadas = Appl i cat i on. I nput Box( _
pr ompt : =" Sel eci one uma cl ul a si mpl es" , Type: =8)
' desl i gar o ver i f i cador de er r o
El se
MsgBox " Voc sel eci onou " &
cel ul asSel eci onadas. Addr ess( ext er nal : =Tr ue)
End I f
End Sub

Sub I nput Exampl e2( )
' Est e exempl o most r a uma cai xa de ent r ada e pede ao usur i o
' par a sel eci onar uma cl ul a
' El e cont i nua o l ao at o bot o cancel ser sel eci onado ou
' uma cl ul a si mpl es f or sel eci onada
Di mcel ul asSel eci onadas As Range
' aj ust e o on er r or no ca o do bot o cancel ar ser
sel eci onado
On Er r or Resume Next
Do
' most r ar a cai xa de ent r ada e at r i bui r o r esul t ado da
' sel eo a uma var i vel
Set cel ul asSel eci onadas = Appl i cat
Bertolo Lio #07 Cdigo para Caixas de Entrada em VBA do Excel 168

' ver i f i car se umi nt er val o sel eci onado. Par ar t oda
' ao se nenhumf or sel eci onado
I f cel ul asSel eci onadas I s Not hi ng Then

End
' ver i f i car e ver quant as cl ul as f or amsel eci onadas
al or da cl ul a sel eci onada
& cel ul asSel eci onadas. Val ue
a cai xa de ent r ada e pede ao usur i o
l eci onar umi nt er val o
ci onado
r or Resume Next
umr esul t ado da
i on. I nput Box( _
nt er val o de uma ou mai s
e: =8)
as sel eci onadas
" &
ess( ext er nal : =Tr ue)
Sub I nput Exampl e4( )
' Est e exempl o most r a uma cai xa de ent r ada e pede ao usur i o
' par a sel eci onar umi nt er val o
' El e cont i nua o l ao at o bot o cancel ser sel eci onado ou
' umi nt er val o ser sel eci onado
Di mcel l sSel ect ed As Range, cel l As Range
' conf i gur e on er r or no caso de cancel ser sel eci onado
On Er r or Resume Next
El seI f cel ul asSel eci onadas. Cel l s. Count > 1 Then
MsgBox " Voc sel eci onou mai s do que uma cl ul a"
El se
' sai r se uma cl ul a f or sel eci onada
Exi t Do
End I f
Loop
' most r ar o v
MsgBox " o val or da cl ul a sel eci onada " _

End Sub

Sub I nput Exampl e3( )
' Est e exempl o most r a um
a se ' par
Di mcel l sSel ect ed As Range
nf i gur e on er r or no caso do bot o cancel ar t er si do ' co
' sel e
On Er
' most r a a cai xa de ent r ada e at r i bui
el sel eo ' a uma var i v
Set cel l sSel ect ed = Appl i cat
pr ompt : =" Sel eci one umi
Typ cl ul as" ,
' desl i gar o ver i f i cador de er r o
GoTo 0 On Er r or
' ver i f i car se umr ange sel eci onado
I f cel l sSel ect ed I s Not hi ng Then
MsgBox " Nenhuma cl ul a f oi sel eci onada"
Exi t Sub
El se
' most r ar mensagens dando as cl ul
MsgBox " Voc sel eci onou
. Addr cel l sSel ect ed
I f End
End Sub

Bertolo Lies de VBA do Excel 169


Do
' most r a a cai xa de ent r ada e at r i bui o r esul t ado da
' sel eo a uma var i vel
Set cel l sSel ect ed = Appl i cat i on. I nput Box _
( pr ompt : =" Sel eci one uma cl ul a si mpl es" , Type:
=8)
' desl i gue o ver i f i cador de er r o
On Er r or GoTo 0
' ver i f i que se umi nt er val o sel eci onado. Par e t oda a
' ao se nenhumf or sel eci onado
I f cel l sSel ect ed I s Not hi ng Then
End
El se
l ul as sel eci onadas
PLO DE APPLICATION.INPUTBOX QUE OBTM UM INTERVALO
O que segue ilustra como usar a funo Application.InputBox.
Para obter uma seleo de intervalo pelo usurio.

Di mRng As Range
On Er r or Resume Next
Set Rng = Appl i cat i on. I nput Box( pr ompt : =" Ent r ar ComUmRange" ,
Type: =8)
I f Rng I s Not hi ng Then
MsgBox " NenhumI nt er val o Sel eci onado"
El se
Rng. Sel ect
End I f
On Er r or GoTo 0
USANDO A INPUTBOX PARA COLOCAR UM VALOR NUMA CLULA
O que segue ilustra como obter um valor do usurio e coloc-lo na clula A3 da
planilha ativa:

Sub I nput BoxExampl e( )
Di mcel l Val ue As Var i ant
r eShowI nput Box:
cel l Val ue = Appl i cat i on. I nput Box( " Ent r ar como val or e i r
par a A3" )
I f cel l Val ue = Fal se Then
Beep
Exi t Sub
' sai r quando umr ange t i ver si do sel eci onado
Exi t Do
End I f
Loop
' most r ar o val or das c
For Each cel l I n cel l sSel ect ed
da " cel l MsgBox " o val or
. Addr ess( ext er nal : =Tr ue) _
& " " & cel l . Val ue
End Sub
UM EXEM
Bertolo Lio #07 Cdigo para Caixas de Entrada em VBA do Excel 170
El seI f cel l Val ue = " " Then
Beep
GoTo r eShowI nput Box
rie de
planilha ativa. Ele usa uma das rotinas
ente.
ai nda par a al guma
o ender eos de cl ul as par a o val or e a
g As St r i ng)
a coma msg que f oi t r ansmi t i da
ci onado ou nenhumval or
ver ser o ' usur i o quer par ar .
m relao aos respectivos eixos. A varivel MeuVal or
ontm o valor digitado pelo usurio se ele clicar em OK ou pressionar a tecla ENTER.
e o usurio clicar em Cancel, ser retornada uma seqncia de comprimento zero.
El se
Act i veSheet . Range( " A3" ) . Val ue = cel l Val ue
End I f
End Sub
CONVIDANDO O USURIO PARA MLTIPLAS ENTRADAS
O que segue um modo simples de convidar um usurio para uma s
entradas e colocar os valores nas clulas da
principais que chama novamente uma sub-rotina repetidam

Sub Mai nPr ocedur e( )
LoadDat a " A1" , " Ent r ar comumval or par a al guma coi sa"
LoadDat a " G1" , " Ent r ar comumval or
coi sa"
End Sub

' os ar gument os s
' mensagema ser most r ada
Sub LoadDat a( addr As St r i ng, ms
Di mr espost a As Var i ant , i R As I nt eger
' f azer o l ao at o usur i o ent r ar ou escol her .
Whi l e r esponse = " "
' most r a uma cai xa de ent r ad
' est a r ot i na
r espost a = I nput Box( pr ompt : =msg)
' se o bot o cancel ar f or sel e
' f or ent r ado,
I f r espost a = " " Then
i R = MsgBox( " Nenhumval or f oi ent r ado. " & _
" Voc quer par ar ?" ,
vbYesNo)
' i st o pr a t oda at i vi dade
I f i R = vbYes Then End
End I f
Wend
' i st o car r ega o val or na cl ul a
Range( addr ) . Val ue = r espost a
End Sub
Exemplo da funo InputBox
Este exemplo mostra vrias maneiras de utilizar a funo InputBox para solicitar ao
usurio que digite um valor. Se as posies x e y forem omitidas, a caixa de dilogo ser
automaticamente centralizada e
c
S

Bertolo Lies de VBA do Excel 171


Di mMensagem, Ti t ul o, Def aul t , MeuVal or
Mensagem= " Di gi t e umval or ent r e 1 e 3" ' Def i ne o avi so.
Ti t ul o = " Demonst r ao da Cai xaDeEnt r ada" ' Def i ne o t t ul o.
Def aul t = " 1" ' Def i ne o padr o.
' Exi be a mensagem, o t t ul o e
MeuVal or = InputBox(Mensagem, Ti t ul o
o val or padr o.
, Padr o)
' Ut i l i za o ar qui vo de Ajuda e o cont ext o. O bot o Ajuda adi ci onado
' at omat i cament e.
MeuVal or = InputBox(Mensagem, Ti t ul o, , , , " DEMO. HLP" , 10)

' Exi be a cai xa de di l ogo na posi o 100, 100.
MeuVal or = InputBox(Mensagem, Ti t ul o, Padr o, 100, 100)
Bertolo Fase #2: Cdigo VBA do Excel (Macros) 172


Lio 8: C
xistem dois tipos de erros que podem ocorrer quando se trabalha com VBA para
Excel, o erro VBA e o erro Excel. Os erros VBA so aqueles capturados pelo
VBA que disparam a janela de dilogo de er
erros de im
digo para Manipular Erros no VBA para Excel
ro e que so gerados quando existem
s no Excel
do por exemplo voc estiver pedindo a um usurio
lula A1 de uma planilha e que o nmero submetido
nde. No seguinte exemplo voc est esperando um
. Se o valor for menor do que 100 e, voc
procedimento VBA ir adiante. Se
ao usurio e parar o procedimento.
st Excel Er r or s( )
met i do mui t o gr ande. "
.
ent e. "
A para Excel
Um VB
enviado para uma varivel. Por exemplo voc no pode guardar
Integer (Dim varVariable


xplicit ativada.
to porque existem enormes equipes de teste para testar e tentar encontrar
bugs nos programas antes deles serem lanados para o pblico. E mesmo
assim.....Microsoft Internet Explorer....segurana bugs....
Assim o primeiro passo na manipulao de erros testar seu programa.
presso ou erros lgicos no cdigo. O erro Excel so aqueles que o VBA no
captura e que voc manipula com as declaraes "IF".
E
Manipulando Erro
Um erro Excel acontece quan
para submeter um nmero numa c
ou muito pequeno ou muito gra
usurio submeter um nmero entre 100 e 200
quiser dizer ao usurio mas voc concorda em deixar o
o valor for maior do que 200 e, voc quiser dizer
Aqui est o cdigo:
Sub pr oTe
I f Range( " A1" ) . Val ue < 100 Then
MsgBox " Val or submet i do mui t o pequeno. "
El seI f Range( " A1" ) . Val ue > 200 Then
MsgBox " Val or sub
Exi t Sub
End I f
' aqui est o r est o do pr ocedi ment o
MsgBox " O pr ocedi ment o vai emf r
End Sub
Erros no VB
A erro acontece quando o VBA no entende ou aceita que voc tem escrito. Um
erro VBA acontece quando:
- o nome de um objeto, uma propriedade ou um mtodo tem a ortografia incorreta,
- um mtodo invlido ou propriedade so chamados para um certo objeto. Por exemplo
voc no pode escrever ActiveSheet.Value se a folha no tem um valor. Ela tem um
nome, ele pode ser visvel ou no mas ele no tem valor.
- um valor invlido
um texto ("Bertolo") numa varivel que voc declarou como
as Integer).
- um valor no encontrado pelo mtodo Find ( Selection.Find...). Por exemplo, voc
est procurando "Bertolo" na coluna A mas ele no est l.
- uma varivel no foi declarada enquanto trabalhando com a Option E
- e mais.
extremamente importante manipular estes erros para programadores que
desenvolvem programas enormes ou video games que sero distribudos numa larga
escala. Is
Bertolo Lies de VBA do Excel 173


Quando vo
prprio no realm
c estiver desenvolvendo procedimentos VBA no Excel para si
ente importante manipular erros. Voc trabalha com seu programa e
corrige
erros
buio em grande
escala
ento VBA ou quando voc

alertado para o fato que um parnteses est
pelos erros de impresso como
ou qualquer coisa que esteja entre aspas duplas
a
-os quando aparecerem. Se voc desenvolver programas para umas poucas
pessoas com quem tem ligaes estretiras voc pode esquecer a respeito de
tambm. Mas se voc estiver desenvolvendo programas para distri
voc deve manipular os erros lembrando de adicionar um pouco do custo de sua
aplicao. Voc pode mesmo formar a sua prpria equipe de teste. Descoberta de
Erros VBA enquanto estiver Digitando o Procedimento, enquanto estiver
Tentando Rodar o Procedimento ou enquanto estiver Rodando o Procedimento
Uma poro de erros so capturados pelo Visual Basic Editor (VBE) e voc no
alertado quando voc escrever o cdigo mas quando voc tentar obter a prxima linha
enquanto da escrita do cdigo. A fonte da linha torna-se vermelha e a caixa de
mensagem lhe diz o que est errado. Outros erros no so detetados quando voc
rodar seu procedim escrever o cdigo mas quando voc tentar
rod-los.
Enquanto digita
voc escreve o cdigo. Tente escrever O VBE aponta um monte de erros quando
Range("A1".Value por exemplo. Voc ser
faltando com a caixa de mensagem dizendo "Expected: End of Statement" (imagem
abaixo). Voc ser alertado pela falta de parnteses, aspas duplas, dois pontos, pontos e
outro "separadores". Mas o VBE no lhe alertar
Range("A1").Value
Range("namedoCampo").Value. O VBE no lhe alertar se voc escreveu de form
errada o nome de uma varivel.

Voc corrige estes erros e da voc pode rodar suas macros passo a passo com a tecla F8
ou ind nu "F ser
identificado pelo VBE
Enqu Ro
O segundo conjunto r rodar o
procedimento. Se ex cdigo, a execuo no
comear. Uma janela de dilogo diferente aparece dependendo se voc estiver rodando
o procedimento do V for protegido
com password. O tip ia de End Sub,
ma falta de End If, uma falta de Next ou Loop uma varivel no declarada e alguns
utros. Quando estes erros so identificados pelo VBE e a janela de dilogo aparecer
o ao me erramentas/Macro/Macros". At este ponto outro erroVBA
.
anto tenta dar o Procedimento
de erros identificado pelo VBE to logo voc tenta
istirem alguns erros especficos no
BE do Excel ou do Excel quando o procedimento
o de erro nesta segunda categoria inclui a ausnc
u
o
Bertolo Lio #08 Cdigo para Manipular Erros no VBA do Excel 174

voc no ter de se aborrecer sobre se alguns cdigos foram executados. A execuo
no inicia.
Se voc estiver tentando executar o procedimento do Excel e aquele procedimento
estiver protegido com password (proteo ativada) o seguinte tipo de caixa de
mensagem aparece.

imento. A
azul e a
a barra de
ferrame
ndo executar o procedimento do VBE o seguinte tipo de
er tentando executar o procedimento do Excel
o com password ou a proteo foi desativad,
o de caixa de mensagem aparece.
Clique em "OK", v para o VBE, desproteja o projetoe rode o proced
primeira linha de cdigo destacada em amarelo, o problem destacado em
caixa de mensagem diferente aparece. Fixe o problema, clique na seta azul n
ntas para reiniciar a execuo ou clique no quadrado azul na barra de
ferramentas e recomece do VBE ou do Excel..
Se voc estiver tenta
caixa de mensagem aparece. Se voc estiv
e aquele procedimento no estiver protegid
o VBE abre e o seguinte tip

janela de cdigo do VBE destacada em amarelo
a, clicar na seta azul na barra de
quadrado azul na barra de ferramentas
Enquanto Roda o Procedimento
ntrar,
pedindo ao VBA para ativar uma folha que no saiu ou quando
voc e
Debug luo encerrar o
A primeira linha de cdigo na
e o problema destacado em azul. Fixe o problem
ferramentas para retornar a execuo ou clicar no
e reiniciar o VBE ou o Excel.
Um terceiro conjunto de erros identificado pelo VBE quando ele tenta
executar uma certa sentena incorreta no seu procedimento. Este tipo de erro
inclui quando voc est pedindo para o VBA abrir a pasta que ele no pode enco
quando voc estiver
stiver usando o mtodo Find e o valor que voc est procurando no
encontrado.
De onde o procedimento tem sido iniciado a seguinte caixa de mensagem
aparece. Se o procedimento estiver protegido por um password e a proteo est ativa o
boto " " no est ativo (fonte cinza) neste caso a nica so
Bertolo Lies de VBA do Excel 175


procedimento no ponto onde o erro foi encontrado. Isto significa que parte da tarefa foi
efetuada sempre que problemas como este forem criados.

Se o procedimento est sendo testado do VBE voc pode clicar no "Debug". A
sentena falha ser destacada em amarelo. Fixe o problema, clique na seta azul na barra
de ferramentas para reiniciar a execuo ou clique no quadrado azul na barra de
ferramentas e reinicie do VBE ou do Excel.
Manipulando Erros VBA
Aqui est o modo bsico de manipular um erro. A primeira coisa voc criar um
endereo para onde VBA saltar se houver um erro. Neste exemplo o endereo
addJ ump com os dois pontos NO OPCIONAL no final. Abaixo addJump est
aquilo que suposto acontecer se houver um erro e acima est o procedimento que
deveria rodar se no existirem erros. Note que a ltima linha de cdigo na seo acima
addJump Exit Sub porque se no existirem erros voc no quer que o resto do
cdigo seja executado.
Exemplo 1:
Sub pr oTest eMani pul ador DeEr r o( )
On Er r or GoTo addJ ump
Wor kbooks. Open " xxxxxx"
Exi t Sub
addJ ump:
MsgBox " Umer r o ocor r eu, chamar Ber t ol o em1 514- 257- 0734"
End Sub
Exemplo 2:
Sub pr oTest eMani pul ador DeEr r oNenhumEr r o( )
On Er r or GoTo addJ ump
MsgBox " Est t udo per f ei t o. "
Exi t Sub
addJ ump:
MsgBox " Umer r o ocor r eu, chamar Ber t ol o em1 514- 257- 0734"
End Sub
Copiar/Colar ambos os exemplos num mdulo do seu prprio e rod-los. O primeiro
exemplo gerar uma caixa de mensagem dizendo Um erro ocorreu, chamar Bertolo rm 1
Bertolo Lio #08 Cdigo para Manipular Erros no VBA do Excel 176

514-257-0734 porque um erro tem ocorrido. A pasta xxxxxx no pode ser encontrada.
em dizendo Everything is fine.
r de erro:
Voc te
O segundo exemplo gerar uma caixa de mensag
Se voc rodar o procedimento sem o manipulado
Sub pr oTest eMani pul ador DeEr r o2( )
Wor kbooks. Open " xxxxxx"
End Sub
rminar com a seguinte caixa de mensagem do VBA.

Se voc apenas quiser que os erros sejam
Next no comeo do procedimento. Copiar/
para o seu prprio e rod-lo. Ele gerar uma caixa de
ocorreu mas ns temos ignorado-o.
Sub pr oTe
ignorados voc escreve On Error Resume
Colar o seguinte procedimento num mdulo
mensagem dizendo Um erro
st eMani pul ador DeEr r oI gnor ar ( )

ub
On Er r or Resume Next
Wor kbooks. Open " xxxxxx"
MsgBox " Umer r o ocor r eu mas ns t emos i gnor ado- o. "
End S

Fase # 3: VBA do Excel Avanado

Lio 1: Cdigo VBA do Excel para Variveis - Lio 2: Trabalhando com
Declaraes - Lio 3: Trabalhando com Funes - Lio 4: Trabalhando com
databases - Lio 5: Criando UserForms - Lio 6: Adicionando Controles aos
userforms Lio 7: Cdigo VBA do Excel para UserForms - Lio 8: Cdigo VBA
do Excel para Grficos e Arquivos Seqenciais Lio 9: Criando e Modificando
Menus Lio 10: Usando controles ActiveX nas planilhas e grficos Lio 11:
Trabalhando com Barras de Ferramentas Lio 12: Os Suplementos
Lio 1: Trabalhando com Variveis
Voc as cria no VBA e voc carrega n
dados inteiras. O cdigo fica menos difcil, e v
mesmo tipos de varivel que permite voc reso
(1.000.000 clulas calculadas em uns poucos seg
elas os valores, nmeros, palavras e tabelas de
alores com menos manuteno. Existem
lver problemas de clculos compridos
undos).
Lio 2: Trabalhando com Declaraes
Coisas como IF..THEN, DO...LOOP, FOR...NEXT, WITH...END WITH, EXIT FOR,
Lio
EXIT DO, EXIT SUB
3: Trabalhando com Funes
Usando as funes Excel com macros, criando novas funes Excel e usando funes
BA como UCASE, LCASE e NOW(). V
Lio 4: Trabalhando com Databases
As caracteresticas do database em Excel so ferram
us-las com VBA (classificao, filtragem de dado
entas extraordinrias. Aprenda ai a
s).
Lio 5: Criando Userforms
Forms so folhas especializadas que voc cria
Quando a caixa de entrada de dados ou a caixa
voc desenvolve userforms para exigir um passw
exigir um ou muitos parmetros (datas, nmeros, t
para exigir entradas de um usurio.
de mensagem no forem suficientes,
ord (com os caracterees ****), para
axas..., nomes ramificados...).
io 6: Adicionando Controles a Userforms L
No userform voc adiciona controles (botes de comando, caixa de listagens, caixas de
texto, caixas de combinao (listas drop-down),etc.. Aprenda como cri-las e a
configurar suas propriedades de modo que elas faam EXATAMENTE o que voc
quiser que elas faam. Ela uma forma de ser amigvel ao usurio.
Lio 7: Cdigo VBA do Excel para UserForms
O cdigo funciona com userforms e controles (botes de comando, caixas de texto,
caixa de listagens, etc...). Adicionar valores aos seus controles quando o form estiver
ativado, mostrar e ocult-lo....




Bertolo Lies de VBA do Excel 178

Lio 8: Cdigo VBA do Excel para Grficos e Arquivos Seqenciais
O cdigo funciona com controles (botes de comando, caixas de texto, caixa de
listagemes, etc...). , validar os valores que os usurios entraram e transfer-los quando o
surio clicar no boto de comando. u
Lio 9: Criando e Modificando Menus
O Microsoft Excel te
Microsoft Excel. possvel aumentar ainda m
menus e itens de menu a eles. E, voc pode adicionar itens d
somente quando um dado arquivo aberto. De fato, voc po
Microsoft Excel e troc-los com menus personaliza
m mais de 30 menus que ajudam voc no seu uso do
ais a barra de menus adicionando novos
e menus que aparecem
de remover os menus
dos se voc estiver criando uma
rsonalizada no Microsoft Excel.
Lio
aplicao pe
10: Usando controles ActiveX nas planilhas e nos grficos
As lies 5, 6 e 7 mostraram-lhe como criar userforms e colocar neles objetos
tais como as barras de rolamento, as caixas de listagem, e os botes de comando. O
lhe permite colocar tais objetos diretamente numa planilha ou
omando, uma macro pode ser especificada a
objeto for uma caixa de listagem, um boto de
o estes podem estar vinculados s frmulas ou
ntas
Microsoft Excel tambm
grfico. Se o objeto for um boto de c
executar quando o boto for clicado. Se o
rotao ou uma barra de rolamento, ent
clulas nas suas planilhas.
Lio 11: Trabalhando com Barras de Ferrame
possvel com o Microsoft Excel modificar as barras de ferramentas de modo
aquelas que esto nas suas barras de
dos muitos botes ferramenta
mbm atribuir macros aos seus botes que
istente ou a uma nova barra de
acros para criar barras de ferramentas e botes quando
ta for aberta e remov-los quando ela for fechada.
que as ferramentas que voc precisar so
ferramentas. No somente se pode atribuir qualquer um
s suas barras de ferramentas, voc pode ta
podem ser adicionados a uma barra de ferramenta ex
ferramenta. E, voc pode ter m
uma pas
Lio 12: Os Suplementos
Se voc quiser distribuir macros e aplicaes que voc
vai querer considerar em distribu-las como um arquivo
escreveu, voc provavelmente
suplemento em vez de um
suplemento que ele mais fcil
ento pode ser armazenado em
do o Microsoft Excel iniciar. Isto
e de colocar o arquivo no diretrio de incio do Microsoft Excel
(tipicam
arquivo pasta. A principal vantagem de um arquivo
para usar funes. Uma outra vantagem, um suplem
ajustado para ser carregado quan qualquer diretrio e
elimina a necessidad
ente o Excel\Xlinicio). E, os suplementos no solicitam se sero ou no
gravados quando se fecha o Microsoft Excel.
Bertolo Fase #3: VBA do Excel Avanado 179


Lio 1: Cdigo VBA do
ma varivel um objeto
(STRING), datas (DATE), nm
qualquer outra coisa tambm (VAR
Eu crio as variveis que uso como
procedimento num mdulo e tent-lo pa
Sub pr oTest e( )
Di mvar Cont ador as Doubl e
Di mvar Numer o as Doubl e
Range( " A1" ) . Sel ect
var Num
U
Excel para Variveis
que voc cria e na qual voc pode armazenar texto
eros (INTEGER, LONG, SIMPLE, DOUBLE) ou
IANT).
, e com, contadores. Copiar/Colar o seguinte
sso a passo:
r = 1 t o 25
al ue= var Numer o * 3
al ue
Sel ect
o de linhas, armazeno o resultado numa
uantas linhas existirem:
l i nhas
Fazer i st o e aqui l o
procedimento numa outra pasta e quero
o mesmo diretrio que a pasta que estou trabalhando nela, eu uso
e "varPath". A razo de fazer isto que se a pasta original
rio default o diretrio da pasta aberta, mas se a pasta
diretrio por default "Meus Documentos".
sso o
t e( )
t h as St r i ng
var Pat h = Thi sWor kbook. Pat h
o
nmero de valores codificados dificilmente. A Manuteno torna-se assim muito mais
er o = 1
For var Cont ado
Sel ect i on. V
var Numer o =Sel ect i on. V
Sel ect i on. Of f set ( 1, 0) .
Next
End Sub
Algumas vezes eu contarei o nmer
varivel e da eu fao alguma coisa tantas vezes q
Sub pr oTest ( )
Di mvar Cont ador as Doubl e
Di mvar Nr Li nhas as Doubl e
Aqui eu cont o o nmer o de
var Cont ador = 1 t o var Nr Li nhas For

Next
End Sub
Quando eu crio uma nova pasta de um
salvar a nova pasta n
uma varivel que eu nomeio d
for aberta pelo Excel o diret
original tiver sido aberta pelo Explorer, o
ASSIM para ficar certo de que a nova pasta est salva no diretrio certo, eu proce
seguinte cod:
Sub pr oTes
Di mvar Pa

Eu ent o cr i o uma nova past a e quando a hor a de sal v- l a
Act i vewor kbook. SaveAs var Pat h & " \ novaPast a. xl s"
End Sub
Eu uso variveis em 99% dos meus procedimentos e, voc far o mesmo para reduzir
simples.
Bertolo Li0 #01 Cdigo VBA do Excel para Variveis 180

Option Explicit
Quando voc abre um mdulo no VBE a sentena "Option Explicit" dever ser a
primeira linha de cdigo no topo. Isto significa que voc DEVE declarar todas as
variveis que voc usar e existem muitas vantagens desta obrigao.
Para ativar ou desativar esta opo v a Ferramentas/Options/Editor no VBE e
marque o item "Require Variable Declaration". Agora no topo de todas as janelas de
cdigo voc ver "Option Explicit". Por que dever esta opo ser ativada? Digamos que
voc esteja usando uma varivel chamada "varMinhaVar" e que voc escreva
varNinhaVar = 32. Voc errou na ortografia do nome da varivel e voc ir continuar
pensando que o valor de varMinhaVar seja 32 e ele no . Se a Option Explict estiver
ativada, o VBE lhe dir que voc est usando uma varivel no existente " varNinhaVar
". Voc ento evitar um monte de erros possveis.
Declarao de Varivel
Declare todas as suas variveis no comeo dos seus procedimentos e sempre use
o prefixo "var" e um ou muitas letras maisculas dentro do nome:
Di mvar Est aVar i avel as STRI NG
se voc errar na ortografia do nome da varivel dentro do procedimento, o Excel no
capitalizar as letras dizendo-lhe que h alguma coisa errada. O prefixo "var" tornar o seu
cdigo mais fcil para ler.
Tipos de Dados
Por querer manter as coisas simples, eu essencialmente uso quatro tipos de variveis:

STRING
Text, at 65.000 caracterees. Eu uso-o para textos mas
tambm nomes de arquivo,
path, nomes de planilha,
nomes de pasta, endereos de
clulas.
DOUBLE
Nmero com ou sem decimais Eu poderia tambm usar
"Bytes", Integer", "Long" e
"Single" mas eles todos tem
limites.
DATA
Se voc usa o tipo STRING para datas, voc no ser capaz de
realizar clculos com elas assim use o tipo "Date".
VARIANT
Eu uso o tipo VARIANT cada vez que eu tenho um grande
nmero de clculos a realizar (mai do que 2.000 frmulas). Eu
levo o range para um array VARIANT, executo os clculos e
trago o range de volta para a planilha.
Eu criei este procedimento muito simples que executa
1.000.000 de clculos em menos do que 5 segundos.

Bertolo Lies de VBA do Excel 181


Variveis Public e Private
Quando voc declara uma varivel com o cdigo Dim varMyVar as String ela
usados no procedimento onde ela foi declarada. Quando o
r, a varivel desaparece.
Se voc quer usar uma varivel em muitos procedimentos voc declar-la no
i nhaVar as St r i ng
Voc deve lembrar que esta varivel desaparece somente quando a pasta estiver
t ento ele leva o ltimo valor que voc armazenou nela. Para limpar o
l e usar o cdigo:
r = " " ou var Mi nhaVar = Empt y
me sinto desconfortvel tornando uma varivel public assim eu uso outro
valor de uma varivel de um procedimento ao outro.
uma varivel de um procedimento ao outro
O modo fcil de levar o valor de uma varivel de um procedimento a outro
armaze
Voc tambm pode levar a prpria varivel de um procedimento para um outro
oc chama do primeiro. Por exemplo:
ubl e
haVar )
)
= var Mi nhaVar * 2
al ue = var Mi nhaVar
rada somente no primeiro procedimento. Um valor
egundo procedimento ento chamado com a varivel coimo
is procedimentos, o valor do range A1 ser 6.
EL ARRAY uma varivel multidimensional que voc pode ser do
Variavel (3) uma varivel consistindo de 4 valores
diferentes, minhaVariavel (5,10) uma varivel consistindo de 66 valores, 6 linhas e 11
colunas e minhaVariavel (5,10,10) pode tomar 726 valores, etc....
pode somente ser
rocedimento termina p
topo de um mdulo desta maneira:
Publ i c var M
fechada e que a
va or voc dev
var Mi nhaVa
Eu
abordagem de levar o
Levando o valor de
nando este valor numa clula qualquer da pasta:
no primeiro procedimento:
Range( " A3456" ) . Val ue=Var i abl e1
no segundo procedimento:
Var i abl e1=Range( " A3456" ) . Val ue
procedimento que v
Sub pr oTest e1( )
Do Di mvar Mi nhaVar As
var Mi nhaVar = 3
Cal l pr oTest e2( var Mi n
End Sub
Sub pr oTest e2( var Mi nhaVar
var Mi nhaVar
Range( " A1" ) . V
End Sub
A varivel decla
armazenado nela (3). Um s
argumento. Aps a execuo dos do
Variveis Array
Uma VARIV
tamanho da sua preferncia: minha
Bertolo Li0 #01 Cdigo VBA do Excel para Variveis 182

Quando voc declara uma varivel array, o primeiro elemento comea com o nmero
". Uma Varivel varMinhaVariable(3) inclui 4 elementos de "0" a "3". Se como eu,
oc fi
somente trs elementos.
a varivel de um procedimento para o outro
ula qualquer na pasta. ex:
procedimento:
Range
Var i abl e2=Range( " A3456" ) . Val ue
"0
v ca desconfortvel com uma varivel varMinhaVariable(0), voc pode impor que o
primeiro elemento comece com o nmero "1". Na declarao geral (onde voc encontra
a Option Explicit), escreva:
Opt i on Base 1
Nesta situao, minhaVariable(3) contm
r de um Voc pode tomar o valo
ndo este valor numa cl armazena
no primeiro
( " A3456" ) . Val ue=Var i abl e1
no segundo procedimento:
Bertolo Fase #3: VBA do Excel Avanado 183


Lio 2: Trabalhando com Declaraes
Cdigo VBA do Excel para Declaraes
As declaraes que eu uso mais freqentemente nas minhas macros VBA Excel
op, For...Next e Select Case
l ect i on. Val ue > 10 Then
Sel ect i on. Of f set ( 1, 0) . Val ue = 100
10 ento
I f LC
teste ser vlido sempre que o case que o seu cliente
ao de cases).
ndies que voc quiser verificar
f Se
Num Portugus simples: primeiro verifique se o valor da clula selecionada
maior q
Quando existirem duas condies inclusivas, voc usar a declarao:
l ect i on. Of f set ( 0, 1) . Val ue < 20
: se o valor da clula selecionada maior ou igual a 10 e
a abaixo 100 caso contrrio no faa nada.

so: If..Then..End If, Do...Lo
If..Then...End If
Quando h somente uma condio e uma ao, voc usar a simples declarao:
I f Se
End I f
Num Portugus v a clula selecionada for maior que
valor da clula abaixo 100 se no fizer nada
simples: se o alor d
o
4
.
ase( Sel ect i on. Val ue) . Val ue= " si m" t hen. . .
Com esta abordagem, seu
usa (Sim, SIM ou qualquer outra combin
If..Then...End If (mltiplas filas)
Quando existirem somente duas co
lmente, voc usar a declarao: seqencia
I l ect i on. Val ue > 10 Then
I f Sel ect i on. Val ue = 12 Then
Sel ect i on. Of f set ( 1, 0) . Val ue = 100
End I f
End I f
ue 10. Se ele no for no faa nada. Se ela verificada e se o valor da clula
selecionada for igual a 12. Se for, defina o valor clula abaixo como 100 e da no faa
nada.
If..Then...And...End If
I f Sel ect i on. Val ue >= 10 And Se
Then
= 100 Sel ect i on. Of f set ( 1, 0) . Val ue
End I f
Num Portugus simples
meno do que 20 o valor da clul
If..Then...Or...End If

strings so case sensitive de modo que quando voc testar uma string de
caracter
4
Nota: Testes nas
es e voc no souber se o usurio usar letras maisculas ou minsculas, use a funo
LCase dentro do seu teste e escreva as strings no seu cdigo em letras minsculas:

Bertolo Lio #02 Trabalhando com Declaraes 184

Quando existirem duas condies exclusivas e uma ao, voc usar a
declarao:
I f Sel ect i on. Val ue = 10 Or Sel ect i on. Of f set ( 0, 1) . Val ue = 20 Then
Sel ect i on. Of f set ( 1, 0) . Val ue = 100
End I f
Num Portugus simples: se o valor da clula selecionada igual a 10 ou igual a
20 ento o valor da clula abaixo 100 caso contrrio no faa nada.
a abaixo 50.
If..The
I f Se al
Sel i on Of f s
El seI
Sel on Of f s
El seI
Sel on Of f s
l seI f
Sel
valor da
mas se o valor da clula selecionada 2 ento o valor da clula
o valor da clula selecionada 3 ento o valor da clula abaixo
da clula selecionada 4 ento o valor da clula abaixo 40 mas se o
lula selecionada 5 ento o valor da clula abaixo 50 mas ento se o valor
Select
s e
evero acontecer. Voc pode ou
constru
If..Then...Else...End If
Quando h somente uma condio mas duas aes, voc usar a declarao:
I f Sel ect i on. Val ue > 10 Then
Sel ect i on. Of f set ( 1, 0) . Val ue = 100
El se
Sel ect i on. Of f set ( 1, 0) . Val ue = 50
End I f
Num Portugus simples: se o valor da clula selecionada maior que 10 ento o
valor da clula abaixo 100, caso contrrio o valor da clul
n..ElseIf...End If
Quando existirem mais do que uma condio vinculada cada uma a diferente
o, voc usar a declarao: a

l ec n ue = 1 Then t i o . V
ect . et ( 1, 0) . Val ue = 10
f Sel ect i on. Val ue = 2 Then
ect i . et ( 1, 0) . Val ue = 20
f Sel ect i on. Val ue = 3 Then
ect i . et ( 1, 0) . Val ue = 30
Sel ect i on. Val ue = 4 Then E
ect i on. Of f set ( 1, 0) . Val ue = 40
El seI f Sel ect i on. Val ue = 5 Then
Sel ect i on. Of f set ( 1, 0) . Val ue = 50
End I f

Num Portugus simples: Se o valor da clula selecionada 1 ento o
clula abaixo 10
e abaixo 20 mas s
o valor 30 mas se
alor da c v
da clula selecionada no 1, 2, 3, 4 ou 5, no faa nada.
Case
Digamos que uma varivel ou uma clula pode tomar 25 valores diferente
dependendo daquele valor 25 coisas diferentes d
ir uma declarao IF muito longa ou usar Select Case.
Do..Loop
Bertolo Lies de VBA do Excel 185


A declarao Do...Loop faz maravilhosamente muito da mesma coisa que a
declarao For..Next mas voc no precisa declarar um contador porque o Loop pra
quando ele encontrar uma certa condio. Tente o seguinte procedimento primeiro
longe quanto voc queira ir.
ub pr oTest e( )
Di mv
Do
Sel ect i on. Of f set ( 1, 0) . Sel ect
m Portugus simples: comeando na clula A1 adicionar 1 ao valor da clula
ara baixo. Faa isto at que o valor da clula
lecionada seja nada.
o:
aa at a clula selecionada estar vazia
ct i on. Val ue <> " "
oop
Loop at que a clula se
oop e
pode sair de um FOR..NEXT, DO...LOOP e mesmo de um procedimento a
l ect i on. Val ue > 10 Then Exi t Sub
os
monte de
s
put do Excel (prog as
sos computadores
utadores de ontem. O gravador de
cro . De
entrando com 1 nas clulas A1 at A7 ou A27 ou para mais

S
ar Cont ador as I nt eger
Range( " A1" ) . Sel ect
Unt i l Sel ect i on. Val ue = " "
Sel ect i on. Val ue = Sel ect i on. Val ue + 1

Loop
End Sub
Nu
selecionada e mover uma clula p
se
Variao da declara
Do Unt i l Sel ect i on. Val ue = " "
F
Do Whi l e Sel e
Faa sempre que clula selecionada no estiver vazia
L Unt i l Sel ect i on. Val ue = " "
lecionada seja vazia
L
L
oop Whi l e Sel ect i on. Val ue <>" "
nquanto a clula selecionada no estiver vazia
Exit...
Voc
qualquer momento com a declarao EXIT
I f Sel ect i on. Val ue > 10 Then Exi t For
I f Sel ect i on. Val ue > 10 Then Exi t Do
I f Se
With...End With
Antigamente quando a memria do computador era rara e cara e
computadores no eram muito poderosos, os programadores oferecia-nos um
declaraes With..End With porque ela era muito menos exigente de memria e da
capacidades do com ador. Quando voc desenvolver no VBA ram
muito pequenos) a memria no realmente uma objeo e nos
pessoais so to poderosos quanto os grandes comp
ma usa um monte de declaraes With..End With mas eu pessoalmente no
qualquer modo aqui est como ela funciona.
Bertolo Lio #02 Trabalhando com Declaraes 186

Range( " A3" ) . Sel ect
Wi t h Sel ect i on. Font
. Name = " Ar i al "
. Si ze = 24
. St r i ket hr ough = Fal se
. Super scr i pt = Fal se
se
al se

Font . Name = " Ar i al "
el ec
Sel ec
permite voc repetir uma ao
Sub p
For var Cont ador = 1 To 10
f f set ( - 1, 0) . Val ue * 2
Sel ect i on. Of f set ( 1, 0) . Sel ect
o valor da clula A1 como 10 e ento selecione a clula
2 de 1 a 10 (10 vezes em outras palavras) o valor da
clula
eria realizada somente 5 vezes. Resultando deste procedimento, clula
A1=10, A2=20, A3=40.....A6=320.
Voc pode tambm iniciar debaixo para cima
. Subscr i pt = Fal
= F . Out l i neFont
. Shadow = Fal se
. Under l i ne = xl Under l i neSt yl eNone
Col or I ndex = xl Aut omat i c .
End Wi t h
o mesmo que escrever
Range( " A3
on.
" ) . Sel ect
Sel ect i
Sel ect i on. Font . Si ze = 24
el ect i on. Font . St r i ket hr ough = Fal se S
S t i on. Font . Super scr i pt = Fal se
Sel ect i on. Font . Subscr i pt = Fal se
Sel ect i on. Font . Out l i neFont = Fal se
Sel ect i on. Font . Shadow = Fal se
t i on. Font . Under l i ne = xl Under l i neSt yl eNone
Sel ect i on. Font . Col or I ndex = xl Aut omat i c
Ambos funcionam e voc que escolhe.
For..Next
O loop FOR...NEXT aquele um que eu uso mais. Ele
um certo nmero de vezes.

r oTest e( )
Range( " A1" ) = 10
Range( " A2" ) . Sel ect

Sel ect i on. Val ue = Sel ect i on. O

Next
End Sub

Num Portugus simples: Defina
. Enquanto o contador estiver indo A
selecionada ser duas vezes o valor da clula acima...mover uma clula para
baixo. Resultando deste procedimento, Clula A1=10, A2=20, A3=40.....A11=10.240.
Se voc escrevesse:
For var Cont ador = 1 To 10 St ep 2
a faanha s
Bertolo Lies de VBA do Excel 187


For var Cont ador = 10 To 1 St ep - 1
Quando voc usa a declarao For..Next num conjunto de dados interessante
contar o nmero de linhas e ter o seu contador se movendo de 1 ao nmero de linhas.
For var Cont ador = 1 t o var Nr Li nhas
Bertolo Lio #02 Trabalhando com Declaraes 188

COMANDOS DE CONTROLE

VISO GERAL

Para adicionar poder s suas macros e lhe dar controle completo sobre quais
precisa ser capaz de usar as seguintes declaraes do
isual Basic:

tantes e mais poderosos do Visual Basic. Ele permite o
es que
sic de
inimiza a digitao.
rithme
tring T
While..
ith..End With Statements
e Statement
esting Commands
aes suas macros fazem, voc
V

Do..Loop
For..Next
For Each..Next
While..Wend
GoTo
With..End With
IF..Then
Selecionar Case

Por exemplo, usando declaraes Do e For lhe permite repetir um conjunto de
declaraes novamente, sem que duplic-las muitas vezes na sua macro. A declarao If
uma dos comandos mais impor
Visual Basic tomar decises como quais declaraes executar baseado nos test
voc especificou. O comando With permite-lhe escrever declaraes do Visual Ba
uma maneira curta que m
O que segue so os tpicos deste captulo:

Tests Expressions
oolean Tests And Numbers B
A tical Test Operators
Logical Test Operators
he Object Test Operator T
Testing Using The Not Operator
Using Parentheses With Tests
esting Using The Not Operator T
S ests
If..Then Statements
Do..Loop Statements
For..Next Statements
For Each..Next Statements
Goto Statements
Wend Statements
Stopping Macros That Won't Stop
W
The Selecionar Cas
N
Condition Statements For Objects
Bertolo Lies de VBA do Excel 189


EXPRESSES TESTES
co andos de controles do Visual Basic exigem que voc construa
a condio que retorne um resultado True ou False. Por
pl
alor 5, ento a caixa de mensagem aparecer. Se o
MsgBox seguinte a declarao IF acima ser
Especificar uma propriedade Boolean
Es
Usar um mtodo ou funo que retorna True ou False
) =""
rna True se o valor na clula ativa
rna True se a varivel X maior que,
varivel Y. O ltimo teste, ActiveCell.Offset(1, 0) ="", retorna true se a clula
ma lin
ses e
mina se o teste ou no True ou False. O que segue mostra um exemplo do
se o boto No selecionado numa mensagem caixa:
teste

Muitos dos m
m teste ou especifique um u
exem o, in the seguinte macro the expresso ActiveCell.Value >0 is a teste:

Sub Test Exampl e
I f Act i veCel l . Val ue > 0 Then
MsgBox Act i veCel l . Val ue
End I f
End Sub

Se a clula ativa contm o v
valor zero ou negativo a declarao
pulada.

Existem vrias maneiras bsicas que voc pode escrever uma expresso teste:

Expresso 1 operador teste Expresso 2
pecificar uma varivel Boolean

xpresso 1 operador teste Expresso 2: O que segue ilustra os testes E

ActiveCell.Value >0
X >=Y
ActiveCell.Offset(1, 0

O primeiro teste, ActiveCell.Value >0, reto
que zero. O segundo teste, X >=Y, reto maior do
u igual, a o
u ha abaixo da clula ativa estiver vazia.
Quando o Visual Basic encontrar um teste, ele primeiro avalia as expres
da deter
uso de um teste para determinar

Dim response As Integer
response =MsgBox(prompt:="Selecionar Um Boto", Buttons:=vbYesNo)
If response =vbNo Then
MsgBox "Voc selecionou o Boto No"
Else
MsgBox "Voc selecionou o Boto Sim"
End If
Exit Sub

O no exemplo acima "response =vbNo". Se o usurio selecionar o boto No
quando a caixa de mensagem for mostrada, a varivel response definida igual a vbNo.
Bertolo Lio #02 Trabalhando com Declaraes 190

O Visual Basic vai ento a prxima declarao e avalia a expresso teste. Desde que a
response igual a vbNo, o teste avalia para True e a declarao seguinte ao Then
executa o
digo seguinte a ele.
Boolean uma propriedade que tem um valor True ou False. O
ser usados como um
Clula est negritada
o modificado
um teste. O teste a
l l . Font . Under l i ne = xl None
nd I
ste
ld
igo



usada mais
o na seguinte macro:
ees As Bool ean
Range
h cl ul a I n Range( " A1: A20" )
f azer Cor r ees = Tr ue
El se
" acima podem ser quaisquer declaraes que voc queira. Por
r declaraes que mostrem caixas de mensagem ou mudem os
da. Se voc clicar o boto Yes, ento o VB pula para a declarao Else e roda
c
TESTES BOOLEAN
A propriedade
que segue so exemplos de propriedades Boolean que podem
teste:

de If True Proprieda
ActiveCell.Font.Bold
ThisWorkbook.Saved Arquivo no tiver sid

O que segue ilustra o uso de um valor Boolean como
t.Bold. expresso ActiveCell.Fon

t i veCel l . Font . Bol d Then I f Ac
Act i veCel l . Font . Under l i ne = xl Si ngl e
El se
ct i veCe A
E f

Se a clula negritada, ActiveCell.Font.Bold, retornar True. Isto torna o te
true e a prxima declarao executada. Se ela no for negritada, ActiveCell.Font.Bo
retorna False e o Visual Basic salta para a declarao Else e executa the cd
seguinte a ela em vez disso.

Uma varivel Boolean como uma propriedade Boolean no que ela tambm tem
um valor True ou False. Se voc declarou uma varivel como uma varivel Boolean, a
ela dado um valor inicial de False. Geralmente um teste de alguma sorte usado para
efinir a varivel Boolean para True ou False. Ento a varivel Boolean d
tarde na macro. Isto est ilustrad

Di mf azer Cor r
ul a As Di mcl
or Eac F
I f I sEr r or ( cl ul a. Val ue) Then
f azer Cor r ees = Fal se
End I f
I f f azer Cor r ees Then
' decl ar aes
End I f
Next cl ul a

As "declaraes
exemplo, elas podem se
Bertolo Lies de VBA do Excel 191


valores de outras clulas. Coloque ai sua prpria declarao no lugar de "declaraes"
O primeiro teste para ver se a clula
Corrections definida para True caso
iormente na macro o valor doCorrections
r se certas declaraes adicionais deveriam
stes usando valores Boolean, True ou False, so quase sempre simples e
usar. Entretanto, o Visual Basic considera True ser igual a menos um e
alse ser ig
resultado do Teste
ue se a primeira expresso for igual segunda
a primeira expresso for maior que a segunda
egunda
l segunda
o menor que ou igual segunda
o no for igual a segunda
uma expresso teste no o mesmo que o
um valor. Quando uma varivel
lmente como uma palavra mais a
r sendo feito, existe uma palavra chave do
eira varivel. No seguinte,
I f X = 5 Then
' decl ar aes
End I f

a declarao X =5 um teste para ver se X 5. No definir X igual a 5.
Se voc escrever os testes >=, <=e <>na ordem errada ( =>, =<ou ><), o Visual
Basic automaticamente corrigir a ordem quando voc mover para uma outra linha.
OPERATORES DE TESTES LGICOS
Os operadores lgicos And, Or, Eqv, Imp, e Xor podem ser tambm usados para
construir testes complexos. Por exemplo, the seguinte uses the And operador to join
duas testes. If both testes are true (the ativa clula contains an entry e the clula below it
como um exerccio.
Existem dois testes nas declaraes acima.
la for a varivel Boolean do um valor erro. Se e
contrrio ela definida para False. Poster
If para determina testado numa declarao
ser executadas.
TESTES BOOLEAN E NMEROS
Te
fceis de se
F ual a zero. Se voc inadvertidamente comparar um nmero a um valor
Boolean, voc pode end up with your macro doing o oposto do que voc quer fazer.
Variveis Boolean podem ser comparadas somente com outras variveis
Boolean ou s variveis declaradas como Variant. Comparar com uma varivel string
resultaria num erro de execuo.
OPERADORES DE TESTES ARITMTICOS
O que segue so os operadores de testes aritmticos que voc pode usar nos
testes de expresses: Expresso1 Operador Expresso2, onde o Operador pode ser
qualquer um dos seguintes:

Operador
= Tr
> True se
< True se a primeira expresso for menor que a s
rimeira expresso maior que ou igua >= True se a p
<= True se a primeira express
ira express <> True se a prime

Por favor note que o sinal de igual n
sinal de igual quando se define uma varivel igual a
ra um valor, ela est norma estiver sendo definida pa
esquerda numa linha. Se um teste estive
sic como If, Do, ou While na frente da prim Visual Ba

Bertolo Lio #02 Trabalhando com Declaraes 192

also contains an entry) the equivalent of pressionar End down arrow para mover-se para
final de um bloco de clulas executado.
cobertos no captulo sobre
lh do com range de clulas.
ue ilustra o uso mais complexo dos operadores lgico. Neste exemplo,
j foram definidas anteriormente numa macro.
d Z Then
r aes
End I
s variveis Boolean forem True. Se o teste fosse
m operador lgico :
e segue o que a expresso acima retorna para cada um dos operadores
Resultado doTeste
d True expresso 1 e 2 forem ambas True. Caso contrrio False
ou 2 forem True. Caso contrrio False retor-
Retorna False se as expresses 1 e 2 forem ambas True ou ambas False. Re-
e a outra False.
rue se as expresses 1 e 2 forem ambas True ou ambas False. Re-
alse se uma expresso True e a outra False.
p
Is para
omparar variveis no-objeto, voc provavelmente travar o Microsoft Excel. Um teste
o

If ActiveCell <>"" And ActiveCell.Offset(1,0) <>"" Then _
ActiveCell.End(xlDown).Select

uso de Offset(row, column) e End(direction) so O
an traba
O que seg
as variveis Boolean X, Y, e Z

And Y An I f X
ecl a d
f

No que est acima, a expresso teste

X And Y And Z

retornar True somente se todas tr

X Or Y Or Z

Ento ela retornar True se qualquer uma das trs variveis for True.

A sintaxe para uma expresso teste usando u

expresso 1 operador lgico expresso 2

O qu
gicos l
:
Operador
Lgico
Retorna se a An
retornado.
rue se a expresso 1 Or Retorna T
nado.
Xor
torna True se uma expresso True
Eqv
torna F
Retorna T
Im Retorna True se a expresso 1 True e a Expresso 2 False. Caso contrrio
False retornado.
O OPERADOR DE TESTE DE OBJ ETO
O operador Is usado para comparar variveis objeto. Se voc usar
c
Bertolo Lies de VBA do Excel 193


Is retorna True se ambas expresses referirem ao mesmo objeto. Voc tambm pode
para ver se uma varivel objeto fora atribuida a um objeto. Por
o teste "cellToUse Is Nothing" para ver se o usurio
range de clulas quando a caixa de entrada de dados for
c
On Er
sgBox " Nenhumr ange sel eci onado"
sel eci onado
de clulas fora atribuido a uma varivel
sncia de um objeto. Set usado
objeto est sendo atribuido a uma varivel.
zo para a declarao On Error Resume Next (chamada de uma cilada de
uma mensagem de erro de aparecer se cancelar
r
s
NTESES COM TESTES
nstruir testes, voc pode use combinaes dos testes acima. E,
s para controlar como os testes so avaliados. Sem parnteses,
esquerda para a direita. Por exemplo:
1 And (Expresso 2 Or Expresso 3)

or Or e Expresso 3. Por
e Expresso 3 True, o teste
rnteses ele avaliar para True.
com e sem parnteses e substituir estes valores para provar esta
usar o operador Is
exemplo, o seguinte usa a express
selecionou uma clula ou um
mostrada:

Di m el l ToUse As Range
On Er r or Resume Next
Set cel l ToUse = Appl i cat i on. I nput Box _
( pr ompt : =" Sel eci onar a cl ul a r ange" , _
t ype: =8)
r or GoTo 0
I f cel l ToUse I s Not hi ng Then
M
Exi t Sub
End I f
' decl ar aes a execut ar emse umr ange f oi

ange Isto testa para ver se um r
cellToUse. A palavra chave Nothing representa a au
pois um
A ra
erro) no que est acima para impedir
for selecionado na caixa de entrada de dados.
Note que uma declarao On Error GoTo 0 imediatamente usada para remove
esta cilada de erro de modo que ela no se aplica s declaraes futuras. Manipuladore
de erros discutido em detalhes num captulo posterior.
USANDO PAR
Quando voc co
voc pode usar parntese
s so avaliados da os teste

xpresso E
faria o Visual Basic avaliar a expresso no primeiro parnteses. Sem os parnteses, o
Visual Basic avaliaria o primeiro teste

Expresso 1 And Expresso 2

Ele avaliar ento este resultado primeiro com o operad
exemplo, se Expresso 1 False, Expresso 2 True
rnteses avaliaro para False. Sem os pa acima com os pa
Escrever o teste
eclarao. d
Bertolo Lio #02 Trabalhando com Declaraes 194

TESTANDO O USO DO OPERADOR NOT

O operador Not usado para converter um resultado True para um valor False e
vice versa. Por exemplo, se a varivel X tem o valor 7, o teste Not X >0 retorna False.
O teste

ActiveCell.Value =""
retorna True se a clula est vazia. O teste
se a clula no est vazia. Uma clula pode parecer vazia e conter espaos.
este c
Visual Basic avaliar primeiro (X =0 And Y =0). Se este avaliar para False, ento Not
le avaliar para True, ento Not True retorna False. Se no
teses no que est acima,
ot X =0
o
a
TESTES DE STRING
o so limitados a testes numricos. Voc tambm pode fazer testes de
rings are mais complex than numeric testes. Os testes
e se entender pois nmeros so fceis de se lidar.
de string devem tambm levar em conta o seguinte:
Um


o Visual Basic fazer os testes string em case sensitive. Isto
eguinte testes
linda"

retornam False, no True. Para tornar um teste string case insensitive, voc pode fazer
uma das duas coisas:


Not ActiveCell.Value =""

retorna True
N aso o que est acima retornar True, pois espaos so os mesmos que letras.
Voc pode use parnteses with the Not operador. Por exemplo:

Not (X =0 And Y =0)

o
False retorna True. Se e
existise parn

N And Y =0

o Visual Basic primeiro avaliar X = 0. Da ento ele aplicar o operador Not a
resultado antes de continuar avaliando a declarao. Se X fosse 1 e Y fosse 1,
expresso com os parnteses avaliar para True. A expresso sem os parnteses avaliar
para False.
Testes n
string. Entretanto, testsusing st
muito fceis d numricos so
, testes Entretanto

a capitalizao da string.
O tamnho da string, o qual inclui qualquer espao em branco na string ou no final da
string.
A definio default n
significa que os s

"ABC" ="abc"
"Linda" ="
Bertolo Lies de VBA do Excel 195


Colocar a declarao opo Option Compare Text no topo do seu mdulo, antes de
quaisquer macros ou funes.
Co
onvert
ferentes tamanhos, um teste string tambm
r exemplo o teste seguinte
"ABC"
False
will find that many of the text strings given to your
ead from clulas include extra spaces. To remove extra
palavras, use the function Application.Trim. A
isquer leading e trailing spaces e quaisquer espaos extra
texto. Por exemplo:
May 1
e(string1)) =_
as (string ))
ar c mpara es ta > ou < num teste de string, o Visual Basic
strings so as mesmas exceto o
ue a string mais longa. Se as
onsideradas maiores que
pattern
sentar mltiplos caracterees na pattern string.
carac usado
nverter as expresses para o mesmo case usando o UCase, LCase, ou
Application.Proper para converter o case para maisculas, minsculas ou proper case
quando voc escrever o teste. Por exemplo:

UCase(string) =UCase(string)

c e as strings para maisculas e ento faz o teste.

do mesmo case, mas de di Se as strings so
retornar False. Po

="ABC "

tornar pois a primeira expresso de tamanho 3 caracterees e a segunda de re
tamanho quatro caracterees. You
ou r macros via caixas de entrada
spaces, included extra spaces in between
Application.Trim remove qua
numa string

" " becomes "May 1". O que segue mostra you could use it to remove extra
spaces from user input:

t ext Ent er ed = I nput Box( " Ent r ar coma descr i o do pr odut o" )
t ext Ent er ed = Appl i cat i on. Tr i m( t ext Ent er ed)
I f t ext Ent er ed = " " Then Exi t Sub

Voc pode evitar o uso de variveis e usar as funes Application.Trim e Ucase
diretamente num teste como o teste seguinte ilustra:

Application.Trim(Ucas
Application.Trim(Uc e 2

Se voc us o is como
compara a string alfabeticamente. Se as duas
comprimento, a string mais curta considerada menor q
strings forem idnticas exceto o case, strings minsculas so c
as strings maisculas.
O operador Like usado para comparar strings e ver se um string pattern
encontrada dentro de uma string. A sintaxe de um teste Like :

string Like

O
O
caracteree "*" pode ser usado para repre
teree "?" pode ser usado para representar caracterees nicos e "#" pode ser
para representar nmeros nicos. O que segue ilustra vrios testes Like:
Bertolo Lio #02 Trabalhando com Declaraes 196


resenta um nico
ns that a?c is just three caracterees e est sendo comparado a
menos que a declarao
o operador Like pode ser mostrada colocando o
mostrar a informao de ajuda do
ises como qual comando
querer to carry out uma srie de
acro ou fazer um
iferente de declaraes se o teste no for true.
O que segue ilustra a sintaxe da declarao If..Then:
se
ecl ar aes I f Test 1 Tr ue
e
ue
se so opcionais. O que segue ilustra a primeira
usada para testes
segue ilustra em
lse:
l . Font . Bol d = Tr ue
el l . Font . Bol d = Tr ue
nica no termina com uma End If, mesmo se um
o. Tambm, o uso de um caracteree continuao no
Teste Resultado
"abc" Like "a*c" True
"abdc" Like "a?c" False

O segundo teste False porque o ponto de interrogao rep
caracteree. Which mea
quatro caracterees, "abcd"".
Por favor note que os testes sero case sensitive a
mdulo. Option Compare Text esteja no topo do
Informao detalhada sobre
cursor sobre o operador Like e pressionando F1 para
Visual Basic sobre este operador.
ARAES IF..THEN DECL
A declarao If..Then permite uma macro tomar dec
dever ser executado. Por exemplo, voc pode
s somente se um teste particular for true. Ou parar a m declarae
o d conjunt


Syntax 1 I f Test Then decl ar ao se t r ue El se decl ar ao se f al
Syntax 2 I f Test 1 Then
d
El seI f Test 2 Then
decl ar aes I f Test 2 Tr ue
El seI f t est N Then
decl ar aes I f Test N Tr u
El se
decl ar aes se nenhumt est e Tr
End I f

As declaraes ElseIf e El
sintaxe:

If Y =0 Then X =0 Else X =1

If..Then e Sintaxe 1 acima a forma de linha nica da declarao
simples e curtos. A declarao Else expresso opcional. O que
n que no usam a declarao E linha nica as declaraes If..The

> 20 Then Act i veCel I f Act i veCel l . Val ue
ou
eCel l . Val ue > 20 Then _ I f Act i v
C Act i ve

a Note que a forma de linh
ontinuao for usad caracteree c
Bertolo Lies de VBA do Excel 197


muda de uma forma de linha nica para uma forma de mltiplas-linhas. Um End If no
exigido
ther sintaxe para uma declarao If, a forma multi-linha.

ecl ar aes a execut ar se o t est e aci ma t r ue
End I
t est e aci ma t r ue
l se
r se o t est e aci ma f al se
o t est e aci ma t r ue
es a execut ar se o t est e aci ma t r ue
st e Then
ecl ar aes a execut ar se o t est e aci ma t r ue
El se
a palavra Then
oc achar que uma
a linha nica e lhe d
muito m eIf
eclarao final Else opcional.
o Then numa declarao multi-linha If..Then, ento o
usando a forma de linha nica da declarao If..Then.
Quando
nha uma declarao completa.

Sub
gem de erro que voc ver se voc rodar a macro acima:
na forma linha nica, e se entrado causar uma mensagem de erro.
O que segue ilustra a o
I f t est e Then
d
f
ou: I f t est e Then
decl ar aes a execut ar se o
E
decl ar aes a execut a
End I f
ou: I f t est e Then
decl ar aes a execut ar se
El seI f t est e Then
decl ar a
El seI f t e
d
decl ar aes a execut ar i f nenhumt est e f or t r ue
End I f

Na forma de linha mltipla da declarao IF..Then
imediatamente segue cada teste e a ltima palavra da linha . V
eclarao multi-linha If..Then muito mais robusta que a form d
ais poder para decidir que aes tomar. Voc pode tantas declaraes Els
quanto voc precisar . Tambm, a d
Se uma declarao seguir
Visual Basic pensa que voc est
ela ento encontrar um Else, ElseIf ou End If um erro ocorrer. Por exemplo,
the cdigo seguinte resultar num erro porque o Visual Basic no sabe o que fazer com
o Else pois a primeira li
I f X > 5 Then Exi t
El se
decl ar aes
End I f

que segue a mensa O

A ordem em que voc escreve uma declarao multi-linha If..Then muito
portante. O Visual Basic executar as declaraes para o primeiro teste que true e im
Bertolo Lio #02 Trabalhando com Declaraes 198

ento pular para a primeira declarao aps a declarao End If. Por exemplo, a macro
egue projetada para negritar clulas maiores que 20, sublinhar aquelas entre 15 e
ra azul. Entretanto, ela no funciona
que voc ver?
' r emo
Test ar e mudar o f or mat o da cl ul a

esmo aquelas com
alores maiores do que 15 ou maior que 20, tm suas cores de fontes mudadas para
azul. E que
s esto
entre 1 tros
e so
a maneira alternativa de se escrever o que est acima to insure qua a ao
facilmente entendida est ilustrada pela
lo operador And.
i mX As Var i ant
l . Val ue
quer f or mat ao sobr e a cl ul a at i va:
Cel l . Cl ear For mat s
Test ar e mudar o f or mat o da cl ul a
I f X
l seI f X > 15 And X <= 20 Then
r l i ne = xl Si ngl e
que s
20, e mudar a fonte daquelas entre 10 e 15 pa
corretamente. Por

Sub I f Test Demo( )
Di mX As Var i ant
X = Act i veCel l . Val ue
ver qual quer f or mat ao sobr e a cl ul a at i va:
Act i veCel l . Cl ear For mat s
'
I f X > 10 Then
Act i veCel l . Font . Col or I ndex = 5
El seI f X > 15 Then
Act i veCel l . Font . Under l i ne = xl Si ngl e
El seI f X > 20 Then
Act i veCel l . Font . Bol d = Tr ue
End I f
End Sub

e acontece que todas as clulas maiores do que 10, m O qu
v
ntretanto, nenhuma das clulas so negritadas ou esto sublinhadas. O
acontece que o primeiro teste If true no somente para clulas cujos valore
0 e 15, mas tambm para clulas com valores maiores que 15. Assim os ou
dois testes nunca sero atingidos. Somente as declaraes para o primeiro teste tru
executadas num conjunto de declaraes If..End If.
Um
correta tomada e que a inteno da macro
seguinte macro. Esta usa testes de ligao pe

Sub I f Test Demo( )
D
X = Act i veCel
' r emover qual
Act i ve
'
> 10 And X <= 15 Then
Act i veCel l . Font . Col or I ndex = 5
E
Act i veCel l . Font . Unde
El seI f X >20 Then
Act i veCel l . Font . Bol d = Tr ue
End I f
ub End S
Bertolo Lies de VBA do Excel 199


DECLARAES DO..LOOP

Um Do..Loop usado para repetir uma srie de declaraes over e over again.
Ela comea com a palavra Do e termina com a palavra Loop. Entre as palavras Do e
Loop voc entra com um conjunto de declaraes para realizar as aes que voc quiser.
O que segue ilustra a forma mais simples de um Do..Loop:

Do
decl ar aes
I f t est e Then Exi t Do
decl ar aes
Loop

Tal como um Do..Loop repetir as declaraes at que o teste seja true e a
instruo Exit Do seja executada para parar o lao. Quando o Exit Do for executado, o
comando continua na primeira declarao seguinte declarao Loop.
O que segue ilustra usando o estilo Do..Loop acima para inserir linhas em branco
a cad cinco linhas, at que uma clula em branco seja encontrada:

Sub I nser t RowsExampl e1( )
Di mcel l ToUse As Range
Set cel l ToUse = Act i veCel l . Of f set ( 5, 0)
Set i s usado t o assi gn a Range var i vel t o i t s obj e o,
5 r ows per t ence cl ul a at i va
xi t Do
d
Do..Loop for rodado. O que segue ilustra o
so des
estando
entre as declaraes Do e o Loop so rodadas se o teste for true. Se voc quiser rodar as
declaraes entre as declaraes Do e o Loop no mnimo uma vez antes de verificar o
teste, coloque as declaraes While e Until no final do loop. Por exemplo:


'
'
t
nest e caso a cl ul a
Do
I f cel l ToUse. Val ue = " " Then E
cel l ToUse. Ent i r eRow. I nser t
Set cel l ToUse = cel l ToUse. Of f set ( 5, 0)
Loop
En Sub

Voc tambm pode usar as palavras chave While e Until com um Do..Loop para
especificar um teste que checado quando o
u ta abordagem:

Do Whi l e t est e t r ue
decl ar aes
Loop
ou:
Do Unt i l t est e t r ue
decl ar aes
Loop

Na sintaxe acima, o teste primeiro verificado e ento as declaraes
Bertolo Lio #02 Trabalhando com Declaraes 200

Do
ecl ar aes d
Loop
diferente

ue macro also inserts blank rows every five rows, but uses a While
ermine when to stop instead of an If declarao.
Act i veCel l . Of f set ( 5, 0)
ser t
se. Of f set ( 5, 0)
NEXT
os problemas com o Do..Loops determinar quantas vezes os comandos
o nmero de
ext:
o
como um contador. Ela definida inicialmente para um, e da
o do For..Next ela incrementada por um. O For..Next pra de
gual a 5 (mas as declaraes so rodadas quando I for
ca da declarao For..Next
r o To end nmer o
nt er
uma varivel que serve como um contador de lao. Geralmente, uma
varive o
r o nome da varivel counter aps a declarao
Whi l e t est e t r ue
ou: Do
decl ar aes
oop Unt i l t est e t r ue L

Also, voc pode include an If declarao among the declaraes between the Do
and the Loop declaraes that triggers an Exit Do declarao in a Do..Loop that uses a
While ou Until declarao. This allows you to exit the Do..Loop based on a
teste declarao.
O que seg
det declarao to

Sub I nser t RowsExampl e2( )
Di mcel l ToUse As Range
et cel l ToUse = S
Do Whi l e cel l ToUse. Val ue <> " "
cel l ToUse. Ent i r eRow. I n
Set cel l ToUse = cel l ToU
Loop
End Sub
DECLARAES FOR..
Um d
faro o lao. A declarao For..Next resolve este problema especificando
teraes que ocorrer. O que segue ilustra uma simples declarao For..N i

Sub For Demo( )
Di mI As I nt eger
For I = 1 To 5
MsgBox " Al " & I
ext N
End Sub

Quando esta macro rodar ela mostrar uma caixa de mensagem que diz al cinc
ezes. A varivel "I" atua v
atravs de cada itera
fazer o lao depois que I ficar i
igual a 5).
O que segue a sintaxe tpi

For count er = st ar t nme
decl ar aes
Next cou

Counter
l chamada "Counter", ou uma nica letra varivel tal como "I", "J ", ou "K" s
usadas para a varivel counter. Coloca
Bertolo Lies de VBA do Excel 201


Next opcional, mas uma boa maneira de documentar qual lao For..Next que o Next
pertenc . Se voc colocar o nome counter aps a declarao Next, o Visual Basic
confirm e counter
ounter.
r quanto incrementar o contador usando a
For:
2
p for deixado de fora, a varivel counter incrementada por um em cada
valor negativo para o Step iniciar com um grande
o contador que decresce para um pequeno nmero final. Por
xempl
eis que tenham sido atribuidas
alores para comear com nmero, terminar com nmero, e step nmeros ao contrrio
das ent


r permitir um lao anterior For..Next, ento voc pode fazer isto
usando

e
ar que existe um correspondente For que usa aquele nome particular d
e mostra uma mensagem de erro se no puder encontr-lo.
O nmero Start o nmero que voc gostaria de usar como ponto de partida do
lao For..Next. Normalmente, o nmero "1". O nmero End o valor final para o
C
Se voc quiser, voc pode especifica
arte da declarao palavra chave Step como p

For I = 1 To 10 St ep
decl ar aes
Next

Se Ste
lao. Voc tambm pode usar um
nmero inicial para
e o:

For I =10 To 1 Step -1
declaraes
Next

Se voc quiser, voc pode especificar variv
v
radas de nmeros para estes valores. Ou voc pode usar a propriedades que
retorna nmeros tais como a propriedade Count ou a propriedade Rows. Desta maneira,
sua macro pode determinar o nmero de vezes a repetir o procedimento For..Next. Por
exemplo:
i St ar t = 5
i End = 22
For I = i St ar t To i End
decl ar aes
Next I

Se voc quise
a declarao Exit For. Geralmente, isto feito com uma declarao If..Then. Por
exemplo:
For I = 1 To 10
decl ar aes
I f t est e i s t r ue Then Exi t For
decl ar aes
Next I
Bertolo Lio #02 Trabalhando com Declaraes 202

DECLARAES FOR EACH..NEXT

A declarao For Each..Next lhe permite repetir um conjunto de aes sobre os
plo, se voc selecionar um
conjunto de comandos em
. Um outro exemplo seria repetir um conjunto de aes sobre as
para a declarao For Each..Next:

i mcl ul a As Range
t i on
exemplo, um range de
emento um nome varivel que usado para
leo. Por exemplo, uma clula ou planilha individual
nome que voc der ao elemento pode ser descritivo,
rir a uma clula individual. Ou o nome pode ser
. Por favor note que certas palavras no podem ser
pois estas so palavras chaves do Visual Basic. A
que eu prefiro usar para as diferentes colees:
Membro da Coleo
WorkS
wkBook ou oBook
oChart ou cht
o lao anterior For Each..Next, ento voc pode fazer isto usando
. Geralmente, isto feito com uma declarao If..Then. Por
ue Then Exi t For
Quando uma declarao Exit For executada, o Visual Basic salta para a
primeira declarao seguinte declarao Next.
elementos individuais de uma coleo ou array. Por exem
range de clulas, ento este comando lhe permitir repetir um
cada clula no range
planilhas numa pasta.
O que segue a sintaxe tpica

For Each el ement o I n a col eo
decl ar aes
Next count er

Por exemplo um range de clulas uma coleo de clulas. O que segue far o
lao por cada clula na sua seleo e mostrar seu valor numa caixa de mensagem:
Sub ShowConst ant Val ue( )
D
For Each cl ul a I n Sel ec
MsgBox cl ul a. Val ue
Next
End Sub

Uma coleo um grupo de objetos parecidos. Por
clulas ou the planilhas numa pasta. Um el
identificar um indivduo numa co
pode ser um elemento. A varivel
por exemplo "clula" quando se refe
genrico, por exemplo "X" ou "item"
eet ou Workbook usadas, tais como Sh
tabela que segue lista alguns dos nomes

Variable Name for A
Nome da Coleo
heets wkSheet
range of clulas clula
Sheets oSheet
Charts oChart ou cht
WorkBooks
ChartObjects

Se voc quiser deixar
it For a declarao Ex
exemplo:

e t r I f t est

Bertolo Lies de VBA do Excel 203


Se voltar e olhar a macro MathAction do captulo 4, voc ver que ela u
comando For Each..Next para cir
sou o
cular por cada clula na seleo. O que segue ilustra
comando For Each..Next que torna em negrito todas as clulas que tenham um valor
esenha uma caixa pontilhada ao redor delas. Se o valor for menor do
a 20, qualquer negrito e bordas sero removidos.
Bol dCel l s( )
l a As Range
l ao por cada cl ul a na sel eo
cl ul a I n Sel ect i on
a. Val ue > 20 Then
f aze
e f or f al se
End I
zoom, e retorna voc folha que voc estava quando a macro
comeo
Di mc
i mwkSheet As Wor ksheet
t i va at ual
do
End
o se a f ol ha est i ver vi s vel
r
um
maior do que 20 e d
que ou igual

Sub
Di mcl u
' f azer o
For Each
I f cl ul
' r a f omat ao se o t est e f or t r ue
cl ul a. Font . Bol d = Tr ue
cl ul a. Bor der s. Li neSt yl e = xl Thi n
El se
' r emover a f or mat ao se o t est
cl ul a. Font . Bol d = Fal se
cl ul a. Bor der s. Li neSt yl e = xl None
f
Next
End Sub

A macro que segue define o zoom em todas as planilhas numa pasta para a
mesma definio de
u. Ela tambm ilustra o uso da coleo de planilhas na pasta ativa.

Sub Set Zoom( )
ur r ent Sheet As Wor kSheet
Di mdesi r edZoom
D
' ar mazenar a f ol ha a
Set cur r ent Sheet = Act i veSheet
esej ado. Most r ar a ' pr ompt par a o zoomd
' def i ni o do zoomat ual na cai xa de ent r ada
' obt er o zoomdesej ado.
desi r edZoom= I nput Box _
( pr ompt : =" Ent er Desi r ed Zoom" , _
def aul t : =Act i veWi ndow. Zoom)
r sel eci ona ' sai r se nenhumval or ent r ado ou cancel a
I f desi r edZoom= " " ou desi r edZoom= 0 Then
ha na past a ' f azer o l ao emcada pl ani l
For Each wkSheet I n Act i veWor kbook. Wor ksheet s
. Vi si bl e Then I f wkSheet
t ' f aa i s
wkSheet . Sel eci onar
Act i veWi ndow. Zoom= desi r edZoom
End I f
Next
al ' r et or nar f ol ha i ni ci
ona cur r ent Sheet . Sel eci
End Sub
Bertolo Lio #02 Trabalhando com Declaraes 204


Se voc quiser rodar a macro acima numa folha de grficos, ento voc muda a

r t s( )
t As Obj ect
I n Act i veSheet . Char t Obj ect s
d

Prin ema onde voc obtem uma
gr
App

lim
DE
To permite-se desviar uma macro para qualquer linha
Go
GoT
ou
Por exem
ou GoT
de nmeros e linhas de rtulos:

linha For Each para para ler:

For Each cht Sheet I n Act i veWor kbook. Char t s

A macro que segue ilustra o uso de um lao For Each..Next para selecionar cada
grfico que est embutido numa planilha e visualizar o grfico de modo que voc possa
decidir se voc quer imprimir ou no.

vi ewCha Sub Pr e
Di moChar
or Each oChar t F
oChar t . Act i vat e
Act i veChar t . Pr i nt Pr evi ew
Next
En Sub

Se voc quiser imprimir os grficos sem visualizao, ento mude o
tPreview para o PrintOut. Se voc deparar com um probl
mensagem de erro "Printout Method of Application Class Failed" aps imprimir 4 a 5
ficos, coloque a seguinte declarao dentro do lao:

l i cat i on. Wai t Now + Ti meVal ue( " 00: 00: 10" )
Isto adiciona um atraso de dez segundos entre os grficos para permitir a
peza do buffer da impressora..
CLARAES GOTO
Uma declarao Go
daquela macro. Voc no pode us-la para sair de uma macro. A sintaxe da declarao
To muito simples:

o Li ne Number
GoTo Li ne Label
plo:
GoTo 100
o Next St ep

Uma linha nmero um nmero nico que voc usa para identificar um linha no
seu mdulo. Ela no se refere ao nmero real de linhas quando voc contar do topo.
Nem tem as linhas de nmeros que estarem em ordem. Ela apenas um identificador
numrico de uma localizao. Uma linha rtulo pode ser qualquer combinao de
caracterees (exceto caracterees especiais como *, $, etc..) que comecem com uma letra e
terminem com dois pontos. Linhas de rtulo so usadas muito mais freqentemente do
que linhas de nmeros, pois elas conduzem mais significado. O que segue so exemplos
de linhas
Bertolo Lies de VBA do Excel 205


100
ero deve ser nica dentro de um mdulo. Lihas
esmas regras de nomeao que as
GoTo desviar para uma linha de rtulo
e ilustra este uso de uma declarao GoTo:
r r o. At i vi dade par al i zada"
is elaboradas do que
quela acima. Manipulao de erros discutida em detalhes no ltimo captulo.
aes GoTo tornaro uma macro difcil de
lguma coisa estiver errada. Voc geralmente
o melhor usando declaraes If..Then, Do..Loops, e comandos
or..Ne
decl a
Whi l e

200
ErrorMsg:
ExitCommands:

Cada linha rtulo e linha de nm
de rtulos no so case sensitive e seguem as m
variveis.
declarao O uso mais comum de uma
quando um erro ocorrer. O que segu

Sub SuaMacr o( )
' especi f i car qual r t ul o i r se exi st i r umer r o
On Er r or GoTo Er r or Rout i ne
' execut ar as decl ar aes da macr o
' sai r da macr o se nenhumer r o ocor r er
Exi t Sub
' venha pr c se umer r o ocor r er
Er r or Rout i ne:
MsgBox " Ocor r eu umE
End Sub

Rotinas de erros que voc escrever podem ser muito ma
a
Por favor saiba que muitas declar
entender e de se removerem erros se a
icar numa situa f
F xt.
DECLARAES WHILE..WEND
A declarao While..Wend muito semelhante ao Do While..Loop. O que segue a
sintaxe para esta declarao

Whi l e t est e
r aes
Wend

Para sair de um lao While..Wend, o teste deve tornar-se falso ou uma
declarao GoTo deve ser usada. Por exemplo:

Sub Whi l eExampl e( )
Act i veCel l . Val ue <> " "
Act i veCel l . Of f set ( 1, 0) . Sel ect
I f Act i veCel l . Row > 100 Then GoTo next St ep
Wend
next St ep:
' Macr o cont i nua daqui
End Sub

Bertolo Lio #02 Trabalhando com Declaraes 206

PARANDO MACROS QUE NO QUE

Mais cedo ou mais tarde voc escrever um Do
REM PARAR
..Loop ou a For..Next que nunca
ra a execuo do lao. Isto acontece se o teste parar o nunca for encontrado, ou se
oisa no lao est reiniciando o contador de lao. Quando isto acontecer, sua
p
alguma c
macro kfica rodando e rodando at um erro run-time ocorrer ou voc interromp-lo. O
modo mais simples de interromper um lao infinito pressionar a tecla ESC. (Voc
pode precisar pressionar repetidamente se a macro emitir o comando recalcular). Isto
far a seguinte caixa aparecer:


At este ponto, voc pode:
Parar a macro selecionando o End .
Fazer a macro continuar selecionando o boto Continue.
Ir para mode debug e ir dando os passos pela macro selecionando o boto Debug.
Selecionar o boto Goto e ir linha que era para ser executada quando voc parou a
macro.
Mostrar a informao ajuda que realmente no ajudar voc com o problema com a
sua macro.

Por favor note que se seu lao mostrar continuamente uma caixa de mensagem,
voc no dever ser capaz de pressionar a tecla ESC rpido o suficiente para
interromper o lao (Eu sei, isto tem acontecido comigo!). Se isto acontecer, voc deve
fechar o Excel, o qual dever exigir desligar seu computador. Assim, antes de voc
testar uma macro contendo um lao, voc dever salvar o seu arquivo. Se voc tiver
uma macro "run away" que no ir parar de executar, e pressionar o ESC e ele no
funcionar, voc tem uma alternativa: Se o Visual Basic editor est aberto, voc pode ir
para ele e clicar o boto reiniciar (aquele um com o cone quadrado) para parar a macro.
Isto para a macro. Ele fecha tambm os user forms que no quer fechar.
Bertolo Lies de VBA do Excel 207


DECLARAES WITH..END WITH

A declarao W srie de declaraes
obre um nico objeto sem ter que digitar nome do objeto em cada declarao Tais
eclara
que segue ilustra como usar uma declarao With..End para especificar a propriedade
el l . Font
w"
Bol d"
uito mais digitao:

ct i veCel l . Font . Font St yl e = " Bol d"
lexas do que aquelas acima, e
entre as declaraes With e a
Bor der s. Wei ght = xl Medi um
xl Thi ck
End Wi t h

Por favor note que voc pode embutir um With..End With dentro do outro.
Entretanto, voc deve ser cuidadoso!
ith..End With usada para executar uma
s
d es simplificam o cdigo e torna as macros ligeiramente mais rpidas.

No captulo 5 voc viu as declaraes With..End With usadas com as
propriedades de PageSetup. Its use avoided having escrever a palavra PageSetup 34
vezes. O que segue a sintaxe tpica de uma declarao With..End With:

Wi t h obj et o
decl ar aes
End Wi t h

O
fonte de uma clula:

Wi t h Act i veC
. Name = " Cour i er Ne
. Font St yl e = "
. Si ze = 12
. Under l i ne = xl Si ngl e
Col or I ndex = 5 .
End Wi t h

O que segue atinge o mesmo resultado, mas exige m

Act i veCel l . Font . Name = " Cour i er New"
A
Act i veCel l . Font . Si ze = 12
Act i veCel l . Font . Under l i ne = xl Si ngl e
Act i veCel l . Font . Col or I ndex = 5

Declaraes With..End With podem ser muito mais comp
odem ter declaraes Do..Loops, If e outras declaraes p
End With. Por exemplo:

Wi t h Act i veCel l
I f . Val ue > 1000 Then
. Bor der s. Wei ght = xl Thi n
El seI f . Val ue > 100 Then
.
El seI f . Val ue > 1 Then
. Bor der s. Wei ght =
End I f
Bertolo Lio #02 Trabalhando com Declaraes 208

A DECLARAO SELECT CASE

Val ue
ase Val ue Range 1
decl ar aes
Case Val ue Range 2
decl ar aes
Case Val ue Range n
decl ar aes
Case El se
decl ar aes
End Sel eci onar

As palavras Selecionar Case e End Case so exigidas para iniciar e parar uma
declarao Selecionar Case. Somente uma declarao Case Simples exigida. A
declarao Case Else opcional. Declaraes mltiplas podem ser colocadas entre cada
declarao Case. Por favor note que voc no pode misturar valores numa declarao
case se voc misturar nmeros e strings, co obter uma mensagem de erro "Tipos
incompatveis" quando voc executar a sua macro.

Voc tambm pode escrever a declarao Selecionar Case no seguinte formato,
se voc tiver apenas uma declarao que voc queira executar para um dado caso. Note
que dois pontos so usados para separar o teste case da declarao da macro que ser
executada.

l eci onar Case Var i abl e Val ue
la pode ser a declarao que chama uma outra macro. Esta
segunda abordagem permite voc manter a suas declaraes Selecionar Case
compactas, mas permite tambm que elas sejam muito poderosas.
A tabela que segue ilustra as declaraes de range de valor usadas com a
declarao Selecionar Case:

Um Range de Valor pode ser por exemplo:
Um nico valor - Case 3
A declarao Selecionar Case freqentemente usada em vez de uma
declarao If..Else. A Selecionar Case um teste If no formato de tabela, e
perfeitamente ajustado para selecionar de um conjunto de opes dependendo do valor
de uma nica varivel. O que segue a sintaxe tpica da declarao Selecionar Case:

Sel eci onar Case Var i abl e
C
Se
Case Val ue Range 1: St at ement
Case Val ue Range 2: St at ement
Case Val ue Range n: St at ement
se El se: St at ement Ca
End Sel eci onar

Usando dois pontos permite voc colocar duas ou mais declaraes numa linha.
O Visual Basic remover quaisquer espaos na frente dos dois pontos.
A declarao que est acima pode ser muito simples, tal como definir um valor
para uma varivel. Ou e
Bertolo Lies de VBA do Excel 209


Uma srie de valores separados por vrgulas - Case 4,5,6
m range de valores expressos como valor1 At valor2 - Case 7 To 11
ualquer combinao destas expresses
valo
ase " Level 1"
s case para o mesmo case. Somente o primeiro teste que a match is
tais como >, <, >=, < =, ou =.
b D
r Spe
el eci onar Case car Speed - 100
se
se
se
ANDOS ANINHADOS
tambm pode usar mltiplos comandos de controle, aninhados
um dentro do outro. Por exemplo:

For I = 1 To 5
decl ar aes
For J = 1 To 10
decl ar aes
Next J
decl ar aes
Next I

U
Um range teste expresso como teste Is de operador de valor - Case Is >12
Q
Os res Case podem tambm estar em ordem alfabtica:

C
Case " Level 2B" , " Level 3"

Testes com valores alfabticos sero case sensitive a menos que voc tenha
posto uma declarao Option Compare Text no topo do mdulo ou voc converter todas
s strings e valore a
that one that ser usado pelo Visual Basic, even if a match possvel num teste
subseqente numa declarao Case. A palavra chave Is exigida para testes range, os
uais so testes que usam operadores aritmticos q
O que segue ilustra using a declarao Selecionar para determinar a multa que se
deve pagar por ultrapassar 100 km/h:

Su et er mi neFi ne( )
Di mcar Speed As I nt eger
i mmul t a As I nt eger D
ca ed = Val ( I nput Box( " Ent r ar coma vel oci dade do car r o" ) )
I f car Speed = 0 Then Exi t Sub
' det er mi nar a mul t a usando a decl ar ao case
S
Ca I s < 1: mul t a = 0
Case 1 To 5: mul t a = 10
ase 6 To 15: mul t a = 50 C
Ca 16 To 25: mul t a = 100
a I s >= 26: mul t a = 200 C
End Sel eci onar
MsgBox " A mul t a $" & mul t a
End Sub
OM C
Neste captulo foram ilustrados vrios comandos de controles principais do
Visual Basic. Entretanto, estas ilustraes tiveram somente um nico comando de
controle por vez. Voc
Bertolo Lio #02 Trabalhando com Declaraes 210

ilustra o aninhamento de um For..Next dentro de outro. O que segue ilustra o
ninhamento de declaraes If:

lao For..Next. Quando aninhar comandos, cuidado
ue o contador para cada loop seja nico.
ARA OBJ ETOS
ever uma expresso teste envolvendo um objeto.
selecionado uma clula ou range de clulas
ntrole InputBox ou uma refEdit num userform.
palavra chave Is deve ser usada em vez disto. E para ver se uma
Nothing deve ser usada.
o comparao. Voc deveria
ul a As Range
ost r ar uma apl i cao cai xa de ent r ada par a obt er t ext o a ser
sg = " Ent r ar como t ext o a ser encont r ado"
ci onado
Sub
ent r ado
At i vi dade par ada. "
f azer uma pr ocur a. Resul t ados so
na var i vel chamada Cel l
no pr eci sa especi f i car umar gument o " Af t er "
et c
a
I f Test 2 t hen
I f Test 2
I f Test 3
.
.
End I f
End I f
End I f

Voc pode aninhar tantos comandos dentro de outro quanto voc queira. E, voc
pode aninhar diferentes comandos dentro de cada outro. Por exemplo, voc pode
aninhar um Do..Loop dentro de um
q
DECLARAES CONDITION P
Volta e meia voc precisar escr
Um caso tpico seria ver se o usurio tem
quando prompted a fazer isto por um co
Um outro caso tpico seria ver se a declarao Find tem retornado uma clula contendo
a string procurada.
Comparaes de objetos no podem usar operadores de comparao normal tais
como =, >, <, etc.. A
varivel objeto tem sido atribuida a um objeto, a palavra chave
O que segue ilustra o uso do mtodo Find e um objet
escrever a seguinte macro e test-la numa planilha contendo vrias entradas:

Sub Fi nd_A_Mat ch( )
Di mt ext ToBeFound As St r i ng, msg As St r i ng
Di mcl
' m
' encont r ado
m
t ext ToBeFound = Appl i cat i on. I nput Box( msg)
' Sai r semuma mensagemse cancel ar f or sel e
I f t ext ToBeFound = Fal se Then Exi t
' det er mi nar se qual quer t ext o f oi
I f t ext ToBeFound = " " Then
MsgBox " Nenhumt ext o f oi ent r ado.
Exi t Sub
End I f
' usar o mt odo Fi nd par a
' ar mazenados
' Not e que voc
S l ul a = Cel l s. Fi nd( What : =t ext ToBeFound, _
LookI n: =xl For mul as, _
LookAt : =xl Par t , _
Sear chOr der : =xl ByRows, _
Bertolo Lies de VBA do Excel 211


Sear chDi r ect i on: =xl Next , _
Mat chCase: =Fal se)
' t est e par a ver se qual
usando umt est e I S
quer t ext o compat vel f oi encont r ado
f c
sgBox t ext ToBeFound & " encont r ado em" & _
m ela pode ser atribuida a uma
o Set.
ada foi encontrado, o que significa que a varivel objeto clula no
ndo a palavra chave comparao Is e a palavra
ido objeto usado.
as propriedades da clula
gem.
Basic porque a
ecionar o boto
o cancelar da InputBox do Visual Basic, ela
Desde que isto o mesmo que no entrar
OK, a InputBox Microsoft Excel permite a macro
dife a
captulo
O mtodo Find tem argumentos adicionais que podem ser mexidos e acima apenas
o a Para
.
teis.
a,
alho

voc
voc
screver uma macro, voc dever procurar maneiras de usar os comandos acima.
xatam
de
'
I l ul a I s Not hi ng Then
MsgBox t ext ToBeFound & " no encont r ado. "
Exi t Sub
El se ' Se o t ext o f or encont r ado, v cl ul a onde est o t ext o
cl ul a. Sel ect
M
cel l . Addr ess
End I f
End Sub

Pontos chaves sobre a macro acima e o mtodo Find:
A sada do mtodo Find um objeto clula. Assi
varivel usando o comand
Para testar se n
for a atribuida, uma comparao usa
Nothing que representa um no atribu
Desde que a sada do mtodo Find um objeto clula,
pode ser mostrada como ilustrado na ltima caixa de mensa
A InputBox Microsoft Excel usada em vez da InputBox Visual
xcel retorna o valor False se o usurio sel InputBox Microsoft E
cancelar. Se o usurio selecionar o bot
ring de tamanho zero (""). retorna uma st
com qualquer texto e selecionar
renciar e aconselhar o usurio do erro. A InputBox Microsoft Excel chamad
pela declarao Application.InputBox. Ambas so cobertas em detalhes no
sobre comandos teis.

rgumento What. Voc poder normalmente definir todos os argumentos.


mais informao sobre o mtodo Find, coloque o cursor nele e pressione a tecla F1
Voc encontrar tambm uma cobertura adicional no captulo sobre comandos
O argumento After clula opcional
UMRIO S
Voc encontrar que quanto mais voc usar os comandos de controle acim
menores e menores as suas macros vo ficando. Its far mais eficiente e menos trab
para escrever macros que usam declaraes Do..Loops, For..Next, e declaraes If than
not using such comandos de controle. Adicionando tais comandos s macros que
gravar aumentaro tremendamente para voc as suas utilidades. Sempre que
e
E ente como til usar uma macro para eliminar trabalhos repetitivos, usar um
comando de controle tambm til pois ele elimina declaraes desnecessrias
macros.
Bertolo Fase #3: VBA do Excel Avanado 212



Lio 3: Trabalhando com Funes
Cdigo VBA do Excel para Funes
Trs tpicos nesta lio:
- usar funes Excel dentro de macros,
- criar novas funes Excel com VBA do Excel e,
- usar funes VBA dentro de macros.
Funes Existentes no Excel
Existem centenas de funes disponveis no VBA. A maioria das funes que voc
ange
lo da sua pasta voc acessa esta
tras funes do Excel clicando
bre de ferramenta
encontra no Excel so disponveis nas macros desta forma:
R ( " C1" ) . Val ue=
Appl i cat i on. Wor ksheet Funct i on. Sum( Range( " A1: A32" ) )
esta sentena soma os valores da clula A1 a A32 e armazena o total na clula C1.
Usar funes do Excel pelo VBA reduz substancialmente o tempo de clculo e cria
folha de planilha sem frmulas que voc pode mais facilmente enviar aos outros.
Novas Funes Excel
Voc pode criar novas funes no Excel. Por exemplo, a funo criada pelo cdigo
abaixo simplesmente multiplicar o valor de uma clula por 2.

Funct i on f ct Doubl e( var I nput )
f ct Doubl e = var I nput * 2
nd Funct i on E

Uma vez o cdigo desta funo esteja num md
acessa as ou
u
nova funo da mesma maneira que voc
barra so o cone da funo na ou da barra de menu

funo ("fctDouble" neste exemplo) e siga as instrues.
i on. Val ue) = " t ot o" t hen. . .
u
n. . .
"Inserir/Funes". Na caixa de dilogo selecione a categoria "Definida pelo usurio" e
selecione sua nova
Funes VBA
Aqui esto algumas funes VBA que eu uso nas minhas macros Excel:
LCase, Ucase
As declaraes IF, a SELECT CASE e DO WHILE so todas case sensitive.
Quando voc testar uma string de caracterees e voc no souber se o usurio entrar
com letras minsculas, use as funes LCase ou UCase dentro de seu teste e escreva a
string no case apropriado:

I f LCase( Sel ect
o
Sel ect Case LCase( Sel ect i on. Val ue)
ou
Do Whi l e LCase( Sel ect i on. Val ue) <>" t ot o"
I f UCase( Sel ect i on. Val ue) = " TOTO" t he
u o
Bertolo Lies de VBA do Excel 213


Sel ect Case UCase( Sel ect i on. Val ue)
u
DO WH
at voc executar o procedimento novamente. Ela no
o
I LE UCase( Sel ect i on. Val ue) <>" TOTO"

NOW()
NOW() uma funo Excel mas tambm uma funo VBA. Com o seguinte cdigo a
frmula Excel NOW() inserida na clula A1. A clula "A1" mostrar a data do dia e
sta data mudar cada vez que a pasta for aberta: e
Range( " A1" ) . For mul a = " =Now( ) "
Com o seguinte cdigo, a clula "A1" pegar a data quando o procedimento for
xecutado e manter este valor e
mudar cada vez que voc abrir a pasta.
Range( " A1" ) . Val ue = Now( )
Bertolo Lio #03 Trabalhando com Funes 214


CRIANDO FUNES


As funes Definidas pelo usurio (UDF =User Defined Functions) so como as
macros pois elas consistem de declaraes e tambm so chamadas de procedimentos.
Porm, uma funo diferente de uma macro, pois ela retorna com um valor. Uma
funo Definida pelo usurio pode ser usada exatamente como as funes do Microsoft

finida pelo
a que usada em clulas
io muito fcil de
man eclaraes de comentrio.
segu
os
es
sando
MAnip
ornando as Funes Private
eterminando A Clula Que Chama Uma Funo

De Uma Outra Pasta
s
m Monitoramento de Funo
Excel, quer dizer, includa em suas planilhas eletrnicas e macros para fornecer as
espostas que voc precisa. Voc dever escrever e usar uma funo De r
usurio toda vez que voc precisar de uma frmula complex
anas. Uma funo Definida pelo usur mltiplas e est sujeita a mud
se ter e pode ser documentada com d

O inte so os tpicos deste captulo:

Sobre Funes
unes Versus Macr F
Nom de Funo
Um Exemplo de Funo Definida pelo Usurio
Sintaxe E Projetos de Funo

U Variveis e Matrizes Em Funes
Especificando Um Tipo Para Uma Funo
specificando Tipos Para Argumentos de Funo E
Tornando Opcionais os Argumentos de Funo

Usando Tipos Usurio Como Argumentos
ulando Um Nmero Desconhecido de Argumentos
Retendo Valores Aps Rodar Uma Funo
T
Tornando as Funes Volteis Garantir o Re-Clculo

D
Determinando Uma Clula de Argumentos
Chamando Funes
Funes Que Atuam Como Macros

Usando o Assistente de Funo
Recalculando Fune
U
Bertolo Lies de VBA do Excel 215


SOBRE FUNES

Uma funo um nome para um conjunto de declaraes que retornam um valor. P
exemplo,
or
SUM(), AVERAGE(), IRR() so funes embutidas que voc poder ter que
a clula da planilha.
e
Inserir do menu Microsoft Excel, e depois Funo,
usar. Uma funo normalmente usada numa frmula num
Entretanto, uma funo pode ser tambm usada numa macro ou numa outra funo. S
voc for a uma planilha e selecionar
o painel seguinte ser mostrado:



Como voc pode ver folheando o painel anterior, a Microsoft Excel tem muitas, mu
funes. As funes que voc criar so adicionadas na categoria de funo Defin
pelo usurio e so chamadas de funes Definidas pelo usurio.

As funes Definidas pelo usurio so escritas em mdulos exatamente com
macros. Se uma funo Definida pelo usurio for uma funo de propsito esp
nto voc
itas
idas
o as
ecial,
dever pr esta funo em um mdulo na pasta que a usar. Se voc tiver
no seu
e
vrias funes de propsitos gerais, voc dever mant-las em um mdulo
arquivo de Pessoal.Xls.
Bertolo Lio #03 Trabalhando com Funes 216

FUNES VERSUS MACROS

A lista seguinte compara e contrasta as Funes Definidas pelo Usurio e as macros:

Funes comeam com a palavra Funo e terminam com End Function.
Macros podem ser atribudas a botes, menus e objetos. Funes no podem ser
ps,
eclaraes.
acros no retornam um valor.
Funes tm uma varivel nelas com o mesmo nome que a funo. Seu valor
e r o.
des das clulas e outros objetos, deletar e
adicion
lquer
a.
Exit
omento, usando a declarao Exit

Macros comeam com Sub e terminam com End Sub.

Funes podem ser usadas em clulas de frmulas. Macros no podem.


assim atribudas.

Ambas podem chamar outras funes, usar testes If, usar os laos Do..Loo
For..Next e outros comandos do Visual Basic.

Funes retornam um valor quando elas terminarem de rodar suas d
M


qu etornado. Macros n

Macros podem mudar as proprieda
ar objetos. Funes no podem a menos que chamadas por uma macro.

Ambos macros e funes podem obter propriedades de informaes de qua
objeto, tais como valores de clulas em qualquer planilh

Nomes de Funo e nomes de macro seguem as mesmas regras.

Funes podem ser encerradas a qualquer momento usando a declarao
Function. Macros podem ser encerradas a qualquer m
Sub.

A exigncia bsica de uma funo que ela contenha uma varivel que tenha o mesmo
nome que a funo. Seja qual for o valor colocado nesta varivel pela funo, o valor
que a funo retorna.
Bertolo Lies de VBA do Excel 217


NOMES DE FUNES

O nome que voc d u
nomes de variveis e macros.
ma funo segue as mesmas convenes daquelas de
igual a


se
o preo de um item, e o preo dependente da quantidade que ele comprado,
inte:
301-70
r uma frmula If numa clula. Por
la seguinte calcularia o preo
I f ( C
oc
vrias celas diferentes, ou se a tabela de preo for mais
udar os
preos.
nt i dade < 701 Then
Para usar esta funo, voc apenas digitar =CalcPreo(quantidade) numa clula.
ero ou uma referncia de cela. Insira um mdulo em
ranco e crie a funo anterior e da teste-a em uma folha na mesma pasta. Como voc
Tambm, voc no deveria fazer seu nome de funo
uma referncia de clula. Em algum lugar na sua funo voc precisa incluir
uma linha que fixa uma varivel pelo mesmo nome que a funo para o valor que voc
quer que a funo retorne. Caso contrrio, a funo retornar um valor default para o
seu tipo. (Que seria zero quando as funes forem do tipo Variant a menos que
declaradas o contrrio).
UM EXEMPLO DE FUNO DEFINIDA PELO USURIO
Para ilustrar uma funo Definida pelo usurio, digamos que voc preci
calcular
como ilustrado na tabela segu

Quantidade Comprada Preo
0-100 $10
101-300 $9
0 $8
701 ou mais $7

Uma maneira de manipular isto seria escreve
exemplo, se a quantidade estivesse na clula C7, a frmu
para aquela entrada:

= 7<101, 10, I F( C7<301, 9, I F( C7<701, 8, 7) ) )

Esta frmula seria fcil de manter se voc s precisasse isto em uma cela. Mas, se v
precisasse determinar preo em
complexa, ento voc teria dores de cabea. Especialmente, se voc tiver de m


O seguinte um exemplo de uma funo que calcula preo:

Funct i on Cal cPr eo( quant i dade As I nt eger )
I f quant i dade < 101 Then
Cal cPr eo = 10
El seI f quant i dade < 301 Then
Cal cPr eo = 9
El seI f qua
Cal cPr eo = 8
El se Cal cPr eo = 7
End I f
End Funct i on

Quantidade pode ser um nm
b
Bertolo Lio #03 Trabalhando com Funes 218

v, voc obtm o mesmo resultado que a declarao Se, mas a entrada mais compacta.
E, voc
com uma declarao Select Case:
a funo definida pelo usurio:
t a de ar gument os) As Type
e uma
arive para um valor. No h restries no
e da
funo, e fornecer valores para os argumentos entre os parnteses. Voc no pode
nomear os argumentos na equao. Os valores fornecidos devem estar na ordem que a
funo aguarda receb-los. Voc pode usar referncias de clulas para fornecer os
valores. Tambm, voc pode usar a funo como parte de uma frmula complexa.

Quando voc usar a funo numa macro, voc dever escrever a declarao que
faz uso do valor retornado. Por exemplo, voc pode ajustar a varivel igual ao valor
retornado, usar o valor retornado num clculo, ou usar o valor retornado como uma
expresso teste.

poderia usar esta funo em muitas clulas da planilha apenas precisando
manter seu cdigo no mdulo.

A funo anterior pode tambm ser escrita usando uma declarao Select Case,
que tambm foi discutida em um captulo anterior. A declarao Select Case um
ajuste melhor para funes tal como esta. O seguinte o que a funo se pareceria se
fosse escrita

Funct i on Cal cPr eo( quant i dade As I nt eger )
Sel ect Case quant i dade
Case 0 To 100: Cal cPr eo = 10
Case 100 To 300: Cal cPr eo = 9
Case 300 To 700: Cal cPr eo = 8
Case I s >= 701: Cal cPr eo = 7
End Sel ect
End Funct i on

SINTAXE E DESIGN DE FUNO

Segue a sintaxe tpica para um

Funct i on nomedaf uno ( l i s
decl ar aes
nomedaf uno = expr esso
End Funct i on

Uma funo tipicamente tem uma lista de argumentos que ela espera receber.
Os argumentos esto separados por virgules e entre parnteses. Os nomes dos
argumentos so tambm os nomes das variveis que a funo usar nos seus clculos.

algum ponto na funo voc assum Como ilustra a sintaxe acima, em
l que tenha o mesmo nome que a funo v
valor que voc pode ter para a funo retornar. Por exemplo, voc pode escrever a
funo que retorna um nmero, uma outra que retorne um texto string e uma outra que
retorne True ou False. Uma funo pode mesmo retornar uma referncia a objeto.

Para usar a funo numa planilha, voc digitaria um sinal de igual, o nom
Bertolo Lies de VBA do Excel 219


Para usar a funo num procedimento voc digita o nome da funo seguida por
arnteses. Se voc precisar passar valores para a funo, ento aqueles valores
rico, ou um valor string.
que segue ilustra a chamada de funes de uma macro:
das variveis declaradas na lista de
a funo. Voc pode tambm ter arrays na
ilustra isto:

Di mPr eos( 1 To 12) , J As I nt eger , r espost adoUsur i o As Bool ean
arrays so partes da lista de argumentos da funo,
listadeCustos e infoNovas. O array listadeCustos tem declarado a sua dimenso. Isto
significa que a macro solicitante deva usar um array que tenha o mesmo nmero de
elementos, neste caso 5. O array infoNovas no tem suas dimenses declaradas. Isto
significa que a macro solicitante pode usar um array de qualquer tamanho quando ela
chamar esta funo. H tambm um terceiro array nesta funo, Preos, o qual criado
pela funo juntamente com duas variveis a serem usadas na funo, J e
respostadoUsurio.

Tome cuidado de no usar uma palavra chave restrita numa lista de argumentos
da funo. O Excel a detectar como um erro de sintaxe. Por exemplo, a seguinte
funo declarao (a qual usa a palavra chave do tipo restrita) ser destacada usando a
fonte de erro de sintaxe (normalmente vermelho)

p
devero estar dentro dos parnteses e separados por virgulas. Se os parnteses no so
usados, a funo no retornar um valor. A ordem em que voc passa valores a uma
funo deve ser a ordem que a funo aguarda receb-los a menos que voc especifique
os nomes dos argumentos. Se voc quiser, voc pode especificar os nomes dos
argumentos seguidos por dois pontos e um sinal de igual (:=). Por exemplo, voc pode
passar uma nica clula, uma seleo de clulas, um valor num
O

Funct i onName( 12, 88, 33)
Funct i onName( pr i mei r oNome: =" J oo" , i dade: =35)

Por favor, lembre-se que voc no pode misturar as duas aproximaes de
fornecer valores a uma funo quando usada em suas macros. E, se voc fornecer
valores e no precisar fornecer todos os valores, voc deve usar virgulas como
placeholders a menos que voc fornea os nomes do argumento.
USANDO VARIVEIS E ARRAYS EM FUNES
As funes no so restringidas ao uso
argumentos da funo. Voc pode declarar e usar tantas variveis e arrays que voc
precisar numa funo, exatamente como voc faz em macros. E, funes podem usar
nvel de mdulo e variveis de nvel global. A lista de argumentos apenas um modo
de passar valores para certas variveis num
lista de argumentos de uma funo. O que segue
Funct i on FaaAl gumaCoi sa( X As I nt eger , _
l i st adeCust os( 1 To 5) As St r i ng, _
i nf oNovas( ) As St r i ng, _
doTest e As Bool ean)
' decl ar aes
End Funct i on

No exemplo acima, dois
Bertolo Lio #03 Trabalhando com Funes 220

Funct i on Checar Ti po( t i po)

A menos que voc perceba que o argumento seja uma palavra chave restrita,
voc se convencer que Visual Basic est quebrado! Se voc ligar a checagem de
sintaxe e re-digitar parte da declarao, o Visual Basic mostrar a mensagem de erro
"Expected: identifier" para esta mensagem e destacar a palavra "tipo". Ligando a
checagem sintaxe quando voc no puder compreender um problema de sintaxe da
expresso um modo de se obter conhecimento adicional ao problema de sintaxe.

Quando uma funo permite uma macro solicitante passar um array de qualquer
tamanho a ela, ento ela pode usar as funes UBound e LBound para determinar o
tamanho do array. A sintaxe :

UBound(arrayname, nmero de dimenso)
LBound(arrayname, nmero de dimenso)

Por exemplo, UBound(NewInfo, 1) retorna o nmero de elementos da primeira
menso de um array chamado NewInfo. LBound(NewInfo, 1) retorna o nmero de
elemen mido
o valor que ela retorna ser um tipo
String, etc..) se voc quiser. Para fazer isto, usar a
parnteses. Declarar um tipo para uma funo
opcion
o s uma boa prtica como tambm ela
ajuda e
rData no precisa ser
justada para False pois a funo declarada como Boolean e o valor inicial da varivel
ta, ento voc
di
tos iniciais do array. Se um nmero de dimenso no fornecido, assu
ser um.
ESPECIFICANDO UM TIPO PARA UMA FUNO
Voc pode declarar a funo, e assim
particular (Boolean, Integer, Long,
notao Quando tipo seguido de
al. Se voc no declarar um tipo para uma funo, seu tipo considerado como
Variant. O que segue, ilustra a declarao de uma funo tipo:

Funct i on Pr eoComput ador ( quant i dade) As I nt eger

ou Funct i on Checar Val or ( nomedoEmpr egado) As Bool ean

Declarar um tipo para uma funo n
vitar erros ao se usar uma funo. Tambm, ela ajusta o valor inicial para a
funo baseada no tipo declarado. Por exemplo, a funo seguinte:

Funct i on Checar Dat a( val or Dat a) As Bool ean
I f val or Dat a > 100 Then Checar Dat a = Tr ue
End Funct i on

retornar False, a menos que o teste seja true. A varivel Checa
a
ChecarData ento False.

Por favor, note que se voc tiver uma funo retornar uma da
dever declarar o tipo da funo como Date.

Bertolo Lies de VBA do Excel 221


ESPECIFICANDO TIPOS PARA ARGUMENTOS DE FUN
uma boa idia declarar os tipos dos argumentos de uma fu
tipos para os argumentos numa funo uma prtica muito boa, pel
voc declara os tipos de variveis numa macro. Entretanto, no
como um dos tipos se voc estiver usando a funo num
#NAME? como resultado de sua funo se
nisso, usar Object
v
O
no. Declarar os
a mesma razo que
dever usar Range
a planilha. Voc obter um
voc us-la numa planilha. Ao investir
ou Variant como o tipo para uma varivel que realmente uma
arivel range.
ra as variveis na lista de argumento da funo ChkValues:
Z As St r i ng) As Bool ean
clarado.
icitante so de tipos diferentes daqueles dos argumentos da funo, a
mensagem de erro seguinte aparecer:

Para resolver, voc precisa ou tornar os tipos iguais ou prefixar o argumento da
funo com a palavra chave ByVal se a varivel tem o valor propriedade. Por exemplo:

Funct i on Test ar Val or ( ByVal qual quer Nmer o As Si ngl e)
TORNANDO OS ARGUMENTOS DA FUNO OPCIONAL
Se voc quiser tornar um argumento opcional, inclua a palavra chave Opcional
na frente do argumento na lista argumento. Por exemplo:

Funct i on Ti poCust o( or der NumAs I nt eger , _
Opt i onal cost Code As Var i ant )

Uma vez tendo definido a varivel como tima, todas variveis subseqentes
devero ser declaradas opcionais tambm. Tambm, todas variveis opcionais devem
ser do tipo Variant.
Para determinar se um argumento optional foi fornecido, voc dever usar a
funo IsMissing (argumento). Se o argumento no foi fornecido, IsMissing retorna
True. Se ele foi fornecido, IsMissing retorna False. O que segue ilustra o teste para um
argumento opcional.

I f I sMi ssi ng( cost Code) Then cost Code = " Unknown"

O seguinte decla

Funct i on ChkVal ues( t est Resul t s As Bool ean, _
Y As I nt eger , _


Note que a declarao Function pode ser declarada atravs de linhas mltiplas
usando um espao seguido pelo caracteree sublinhado, ( _ ). Tambm, o tipo da funo
por si s de

Se uma outra macro chamar a funo e as variveis usadas para fornecer valores
macro sol
Bertolo Lio #03 Trabalhando com Funes 222

USANDO ARGUMENTOS DO TIPO USURIO
O Visual Basic permite voc usar tipos como argumentos numa funo usurio. Por
empl
tireCenter como do tipo infoClientes, a qual uma do tipo usurio,
Funct i on CheckDat a( descr i odaDat a, Par amAr r ay aDat a( ) As
Var i ant )
mazenada na varivel
res para que a
plo, varivel dataDescrip atribudo o valor " Info Junho". Ao array
um array de uma nica dimenso
ca dimenso. Para determinar o tamanho do array, usar as funes
lor do array como o elemento 1. Entretanto, o primeiro
lemento no array ainda ser 0, e ele no ser assumido como um valor. Isto pode
emas a menos que voc escreva suas declaraes para manipular esta
ituao.

ex o
Funct i on DoMor e( t i r eCent er As i nf oCl i ent es)
declara a varivel
criada usando uma declarao Type.
MANIPULANDO UM NMERO DESCONHECIDO DE ARGUMENTOS
Se voc no souber quantos argumentos uma funo receber, voc pode tornar
o ltimo argumento de uma funo um array, e colocar a palavra chave ParamArray na
frente do nome array. Tambm, voc deve declar-la como sendo do tipo Variant. Por
exemplo
Declara o ltimo argumento, aData, como um array. Ele preenchido com quaisquer
valores que forem fornecidos seguindo a descrio que est ar
descriodaData. Se ParamArray usada, voc no pode especificar nomes de
argumento quando voc chamar a funo. Voc deve fornecer valo
funo aguarda receber os valores.

O que segue ilustra a chamada da funo acima:
dat aOk = CheckDat a( " I nf o J unho" , 23, 44, 55, 21, - 43)
Neste exem
aData atribudo os valores 23 at -43, e acaba sendo
com cinco elementos.

Note que o tamanho do array no foi declarado. O array resultante ser um
array de uma ni
LBound e Ubound (discutidas anteriormente neste captulo). Por favor, note que se
voc tem uma declarao Option Base 1 no topo do seu mdulo, o Visual Basic
assumir o primeiro va
e
causar probl
s
Ilustraes do uso ParamArray encontrada no captulo anterior sobre macros.
Bertolo Lies de VBA do Excel 223


RETEND

Se voc q
rodar, dec

Se
O VALORES APS RODAR UMA FUNO
que segue
set numa funo que usa a
A declarao End por si s usada para parar a atividade da macro.
asic na pasta editado.
usada no mdulo onde ela est armazenada.
unes private no podem ser usadas em planilhas nem aparecero no coringa de
te:
uecer, o Visual Basic automaticamente re-arranjar as palavras na
rdem certa! O que segue ilustra uma tal declarao:

TEIS - INSERIR RECALCULATION
a funo que obtm
ni ci al * Range( " A1" ) . Val ue
uiser ter uma varivel exceto um argumento retendo seu valor aps a funo
lare-a com a palavra chave Static em vez da palavra chave Dim.
voc colocar a palavra Static na frente da palavra Function, isto faz quaisquer
variveis declaradas na funo reter seus valores entre chamadas da funo. Por favor,
ote isto aplica s variveis declaradas na funo, no aos argumentos. O n
ilustra isto:

St at i c Funct i on CheckDat a( X As I nt eger )

Existem vrias situaes que fazem as variveis serem re
palavra chave Static para reter valores de varivel:



O cdigo Visual B

A pasta fechada.
ORNANDO AS FUNES PRIVATE T
Colocando a palavra Private na frente da palavra Funo, voc pode restringir a
funo de modo que ela pode somente ser
F
funes. O que segue ilustra o uso da palavra Priva
r i vat e Funct i on CheckDat a( X, Y) P
Voc pode colocar ambas Static e Private na frente da Funo. Private vai primeiro,
mas se voc esq
o
Pr i vat e St at i c Funct i on CheckDat a( Y, Y)
TORNADO AS FUNES VOL
Se voc escrever uma funo que obtenha um ou mais valores indiretamente, tal
como referir a uma clula via a declarao na funo, a funo normalmente no
ecalcular quando aquelas clulas mudarem. O que segue ilustra r
um valor indiretamente:
Funct i on Pr eodeDescont o( pr eoI ni ci al ) As Si ngl e
I f Range( " A1" ) . Val ue = 0 Then
Pr eodeDescont o = pr eoI ni ci al * 0. 9
El se
Pr eodeDescont o = pr eoI

End I f
End Funct i on

Bertolo Lio #03 Trabalhando com Funes 224

Na funo acima, a referncia indireta a clula A1. Se a seguinte frmula for colocada
to porque o E5
udada a funo
e clula A1 indiretamente. Qualquer
er clula numa pasta variar, voc
opo da funo, logo abaixo da declarao da
o
declarao.
DETERMINANDO A CLULA SOLICITANTE PARA UMA FUNO
possvel determinar qual clula chamada (usada) a funo usando uma das
seguintes expresses:

Chamando o objeto clula: Application.Caller
endereo de clula somente: Application.Caller.Address
endereo com arquivo & folha: Application.Caller.Address(External:=True)

A segunda forma acima retornar "$B$4" se a funo estivesse na clula B4. A
terceira forma retornar "[Book1.XLS]Sheet1!$B$4" se a clula B4 estiver na pasta
Book1.Xls e na folha Sheet1.
DETERMINANDO UM ARGUMENTO DE CLULA
Declarando um argumento de uma funo como do tipo Object ou tipo Variant,
voc pode usar o argumento para no somente obter valor dos argumentos de clula,
mas tambm us-lo para obter outros valores nas clulas relacionadas. A seguinte
funo ilustra isto:
Funct i on Dat aDescr i p( qual quer Cl ul a As Obj ect )
Appl i cat i on. Vol at i l e
Dat aDescr i p = qual quer Cl ul a. Val ue & " " & _
qual quer Cl ul a. Of f set ( 0, 1) . Val ue
End Funct i on
Se a clula A1 contm o nome "Joo" e clula B1 contm "Eduardo",
=DataDescrip(A1) retornar "Joo Eduardo". Note que a funo foi declarada Volatile
de modo que ela recalcula quando referncias indiretas so mudadas. A referncia
indireta acima qualquerClula.Offset(0,1).Value.


na clula G5
= Pr eodeDescont o ( E5)
A funo acima recalcular sempre que clula E5 mudada. Is
referenciada diretamente pela funo. Entretanto, se a clula A1 m
no recalcular. Isto porque a funo se refer
referncia a uma clula atravs da lista de argumento uma referncia direta. Qualquer
outra referncia uma referncia indireta.

Para ter a funo recalculate quando qualqu
precisa incluir a seguinte declarao no t
funo:
Appl i cat i on. Vol at i l e
Escreva a funo acima num mdulo e teste-a com e sem a declara
Application.Volatile seguinte funo
Bertolo Lies de VBA do Excel 225


CHAMANDO FUNES DE UMA OUTRA PASTA
Se a
deve coloc
funo. U
exemplo, s
precisa to u
funo que voc quer usar numa planilha clula est numa outra pasta, voc
ar o nome da pasta da funo (tipo e nome de arquivo) na frente do nome da
m ponto de exclamao separar o nome da pasta do nome da funo. Por
e a funo CalcPreo estivesse localizada na sua pasta Personal.XLS e voc
s-la numa pasta diferente, voc poder entrar com o seguinte numa clula
de planilha:
=Per sonal . Xl s! Cal cPr eo( val or )
se o nome do arquivo for comprido, ento o nome do arquivo ficaria entre aspas. Se
voc usar esta aproximao e o arquivo que contm a funo no estiver aberto (ou
pegar fechado), ento a funo retornar #NAME?.


funo. Isto elimina tambm o problema
#NAME? se o arquivo da funo est fechado.
ara ajustar uma referncia:

lado do arquivo que voc quer se referir a ele . Uma marca
(checkmark) aparecer. Se a funo est no seu arquivo Personal.XLS, ento voc
clicar neste um. Se o arquivo contendo a funo no est carregado no Excel, ento
usar o boto Browse para especificar o arquivo.
Feche o painel selecionando OK

Se voc re-locate ou renomear um file que fez uma referncia, voc precisar to re-
establish a referncia ou else Microsoft Excel ser incapaz de avaliar as funes pois ele
no pode encontr-las e retornar o valor erro #NAME?. Veja a descrio minuciosa no
Captulo xxxx para mais detalhes sobre como manipular referncias.
Um modo de se evitar a declarar a localizao do arquivo de uma funo seria
criar o que chamado de um arquivo add-in que contenha a funo. Criao de add-ins
discutida no ltimo captulo. Um outro modo de se evitar a declarar o nome da pasta
ajustar uma referncia pasta contendo a

P
V para a pasta solicitante
V para qualquer mdulo naquela planilha. Se nenhum existir adicione um.
Enquanto na folha de mdulo, selecione Ferramentas, Referncias. Isto mostrar
o seguinte menu (Por favor, note que suas referncias podem ser diferentes daquelas
mostradas abaixo).
Clique na caixa ao
Bertolo Lio #03 Trabalhando com Funes 226

FUN

Funes que so usadas n a. Por
exemplo, elas no podem formatar a clula, nem mudar o valor numa clula.
Entreta
lor macro solicitante para indicar seu
ucesso ao trmino de suas tarefas. Por exemplo, ela pode retornar True para todas as
tarefas que foram feitas com sucesso, ou False se um problema ocorreu. Tambm, a
no pode parar a atividade da macro usando a declarao End. Se voc no quiser
uma fu
Uma vantagem de se usar funes que atuam como macros que elas no aparecem na
lista de
USAN
assistente de funes selecionando Inserir, Funo dos
enus Microsoft Excel. O seguinte painel aparecer:
ES QUE ATUAM COMO MACROS
uma clula de planilha no pode modificar a planilh
nto, funes que so chamadas por uma macro podem modificar as planilhas e
outros objetos no Excel. Por exemplo, elas podem deletar linhas, mudar a folha ativa, e
selecionar uma clula diferente. Na essncia, se a funo foi chamada por uma voc
pode ter que fazer qualquer coisa que uma macro possa fazer.

A habilidade para ter funes que atuam como se fossem macros adiciona um
poder tremendo ao Visual Basic. Voc pode escrever uma funo que faa um nmero
de tarefas tais como adicionar ou deletar linhas, abrir planilhas, e validar dados. E
quando a funo feita, ela pode retornar um va
s
fu
no para retornar um valor, no coloque os argumentos nos parnteses. Se uma
funo usada sem parnteses, ento ela tratada como uma declarao stand alone
exatamente como uma chamada a uma macro.

macro quando voc selecionar Ferramentas, Macro. Entretanto, elas aparecem
na lista de funes definidas pelo usurio.
DO O ASSISTENTE DE FUNES
Se voc criou uma funo e no a declarou Private, voc a encontrar listada sob
as funes definidas pelo usurio no assistente de Funes. Se voc estiver numa
planilha, voc pode acessar o
m

Bertolo Lies de VBA do Excel 227


Quando voc selecionar Definida pelo usurio na caixa pop up categoria,
aparecero as funes que voc criou em qualquer pasta ou suplemento (pasta ou add-
in). Quando voc selecionar uma funo de usurio, o assistente levar voc s
necessidades de entrada. Assim,


. Por
favor, note que quando voc entrar com os dados nos campos de entrada, o valor
mostrado no canto superior direito do painel acima par a funo alterado.
Initialmente, ela configurada como #VALUE.
RECALCULANDO FUNES
Se voc modificar a funo, voc precisar re-calcular sua planilha para que a
modificao seja refletida em quaisquer frmulas de clulas, mesmo se o clculo
ajustado para ser automtico. Faa isto pressionando Ctl-Alt-F9 (no apenas F9) todas
ao mesmo tempo. Esta aproximao tambm funciona se voc abrir um arquivo
contendo clulas com funo frmulas que foram corretamente calculadas quando voc
fechou o arquivo, mas elas mostraro #VALUE! Quando voc reabrir o arquivo.
UM MONITORAMENTO DE FUNO
O que segue uma funo que eu escrevi par monitorar um valor chave em uma
das minhas planilhas. Eu no quero mudar o valor do lado de fora de um intervalo
estreito. Como eu poderei usar esta funo em outro lugar, eu a escrevi de um jeito
genrico, de modo que eu posso us-la para monitorar outras clulas chaves. Quando a
funo detectar uma condio for a dos limites, uma caixa de mensagem pops up, diz-
me que eu tenho um problema. A razo porque eu uso a funo em vez de uma macro
que uma funo re-avaliada pelo Microsoft Excel toda vez que os valores clula
monitoradas variarem (se calcular for ajustado para automtico).

O que segue a funo:
Uma vez preenchidos todos os campos de entrada exigidos, selecione OK.
O Microsoft Excel inserir a frmula para a funo selecionada na caixa de edio
Bertolo Lio #03 Trabalhando com Funes 228


val or I nf er i or As Si ngl e, _
MsgDeAdver t enci a As St r i ng)
Encont r ar Val or = " Nos Li mi t es"
I f Cel ul aObser vada. Val ue > val or I nf er i or Or _
Cel ul aObser vada. Val ue < val or I nf er i or Then
Li mi t es"
a
eguinte frmula numa
clula p
escreva a funo acima num mdulo e prove-a com um valor
teste. E oc
fora
ado,

Funct i on Encont r ar Val or ( Cel ul aObser vada As Obj ect , _
val or Super i or As Si ngl e, _






Encont r ar Val or = " For a Dos
MsgBox MsgDeAdver t enci
End I f
End Funct i on

Para usar a funo para auditor a clula B5, eu entrarei com a s
rxima:

=PESSOAL. XLS! Encont r ar Val or ( B5, 80, 90, " Cl ul a B5 est
For a dos Li mi t es" )

Eu sugiro que voc
la pode ser uma funo que voc pode fazer uso dela! Por favor, note que v
somente obter a mensagem de advertncia quando o valor variar e quando ele est
dos limites.
. Se outras variaes na pasta no mudarem o valor que est sendo observ
mensagens de advertncias adicionais no aparecem, mesmo quando o valor esteja fora
dos limites.
Bertolo Lies de VBA do Excel 229


Como
s funes podem ser adicionadas caixa de dilogo Inserir
Fune o, escrevendo os seus
cdigo sigla inglesa UDF (user-
o no a mesma coisa que uma sub-rotina
Macro quando
ntas/Macro/Macros, no aparecem as funes criadas pelo usurio,
as UDF entes na categoria

funo na janela Macro abaixo, porm, o Excel reconhece
e habili
Fazer Aparecer a Funo Criada Na Caixa de Dilogo Inserir
Funes do Excel
Como j sabemos , a
s. Tambm sabemos que podemos construir uma fun
s no VBEditor. Neste caso elas so chamadas pela
defined function)
Entretanto, observe que uma fun
quando o assunto macro executvel. Portanto, na lista da janela
escolhemos Ferrame
. Mas l na caixa de dilogo Inserir funo elas esto pres
UDF. Como edit-las, ento?
Ao digitar o nome da
ta as opes relacionadas funo que digitamos.


uma nova janela de dilogo (a da direita) aberta. Nesta Clicando em
janela voc tem a op
Opes
o de inserir a descrio de sua funo.
, por meio de
seguinte linha de comando no seu cdigo:
Appl i cat i on. Macr oOpt i ons Macr o: =Mi nhaFuno, Cat egor y: =1
1 refere-se categoria Financeira, por exemplo. Uma outra
e refere-se descrio da funo. A descrio auxilia o usurio
quanto
descrio.
i on. Macr oOpt i ons Macr o: =Mi nhaFuno, _
Est a f uno soma os i t ens sel eci onados. ,
Para adicionarmos as funes caixa de dilogo Inserir Funes
cdigos, basta inserir a
A cat egor y: =
caracterstica important
ao objetivo da funo. Na janela da direita da figura acima s entrar com a
Para fazer isto por meio de cdigo, fazemos:
Appl i cat
Desci pt i on: =
Cat egor y: =1
Bertolo Lio #03 Trabalhando com Funes 230

Para que o cdigo acima funcione importante que ele esteja em uma sub-rotina
tes de utilizarmos a funo. Se ele for colocado diretamente na
ESUMO

plexas
c deve manter em muitas clulas numa planilha, voc pode agora
nes para suas planilhas. Funes tm tambm benefcios
semelh um outro significado do poder de
lificar as suas macros.
que seja executada an
funo nada ocorrer.

R
Voc achar que escrever funes para usar me suas planilhas adiciona uma
nova dimenso no seu uso do Microsoft Excel. Em vez de escrever com
expresses If que vo
criar e manter fu
antes quando usadas em macros. Isto
adicionar e simp
Bertolo Fase #3: VBA do Excel Avanado 231


Lio
seguir a maioria das coisas do VBA funcionando com databases
v
4: Trabalhando com Databases
ara realmente con
oc deve habilitar estas funcionalidades no Excel. Visite o website on Excel e
estude os captulos sobre databases e funcionalidades do databases. Quando voc
trabalhar num database Excel voc deve primeiro verificar que todos os filtros esto
ste fim voc iniciar seu procedimento com estes dois conjuntos de
linhas d database.
ct
I f Then
Sel ect i on. Aut oFi l t er
I f

End I f

Sabendo que um database um conjunto de linhas e colunas conectadas voc pode
selecion-las todas com:

Range( " A3" ) . Sel ect
Sel ect i on. Cur r ent r egi on. Sel ect

Uma vez feito isto, voc pode contar o nmero de linhas (registros) e o nmero de
colunas (campos) com o seguinte cdigo:

var NbRows=Sel ect i on. Rows. Count
var NbCol umns=Sel ect i on. Col umns. Count

De fato o nmero de registros o nmero de linhas menos um (a linha de ttulo) e aqui
est o cdigo:

var NbRecor ds=Sel ect i on. Rows. Count 1

Classificando Dados com VBA

Existe um pedao de cdigo que o Gravador de Macros pode escrever para voc e para
classificao de dados. O GM escrever alguma coisa como esta:

Range( " J 3" ) . Sel ect
Range( " A2: U3" ) . Sor t Key1: =Range( " J 3" ) , Or der 1: =xl Ascendi ng,
Header : = _
xl Guess, Or der Cust om: =1, Mat chCase: =Fal se,
Or i ent at i on: =xl TopToBot t om, _
Dat aOpt i on1: =xl Sor t Nor mal

A linha 2 a linha de ttulo e a linha 3 aquela uma de muitos registros. O GM est
somente filtrando o primeiro registro porque eu no selecionei todos eles. Para corrigir
esta situao, eu modifiquei o cdigo para isto
P
desligados. Para e
e cdigo. Primeiro selecione qualquer clula dentro do

Range( " A3" ) . Sel e
Act i veSheet . Aut oFi l t er Mode = Tr ue
End I f
Act i veSheet . Fi l t er Mode = Tr ue Then
Act i veSheet . ShowAl l Dat a
Bertolo Lio #03 Trabalhando com Funes 232


Range( " J 3" ) . Sel ect
Sel ect i on. Cur r ent Regi on. Sor t Key1: =Range( " J 3" ) ,
Or der
chCase: =Fal se,
Or i ent at i on: =xl TopToBot t om, _
Dat aOpt i on1: =xl Sor t Nor mal

Eu poderia tambm mudar a ordem de classificao e eu geralmente modifico o
argumento cabealho e removo o DataOption porque verses mais antigas do Excel
cometero erros com ela. Assim o cdigo final :

Range( " J 3" ) . Sel ect
Sel ect i on. Cur r ent Regi on. Sor t Key1: =Range( " J 3" ) ,
Or der 1: =xl Descendi ng, Header : = _
xl Yes, Or der Cust om: =1, Mat chCase: =Fal se,
Or i ent at i on: =xl TopToBot t om
1: =xl Ascendi ng, Header : = _
xl Guess, Or der Cust om: =1, Mat
Bertolo Fase #3: VBA do Excel Avanado 233


Lio
armetros e informao
disso que podemos criar pequenos e inteligentes sistemas que solicitem
dados aos usurio, trate esses dados e devolv ltados, armazenando informaes
Doze controles diferentes podem ser adicionados ao userform. Eles so
chamados: Label, TextBox, ComboBox, ListBox, CheckBox, OptionButton,
ToggleButton, Frame, CommandButton, TabStrip, MultiPage, ScrollBar. Eles esto
mostrados na Caixa de ferramentas abaixo

Criando um userForm no VBA do Excel

(pasta) na janela de projetos (projects window) (se no estive
visvel, selecione Exibir, Project Explorer ou clicando no cone na Barra de
zenar o userform,
mbm pode criar um userform usando o boto
m userform ento adicionado, e o que segue
com q
5: Criando Formulrios do Usurio (Userforms)

formulrio (form) ou userForm tambm conhecido como um GUI (Graphical
User Interface). O form usado para requerer valores, p
do usurio para empregar nos procedimentos VBA. Isto so usados para fazer
o interfaceamento entre a pasta de trabalho Excel e o usurio da aplicao, visando
facilidade e controle.
Atravs de um userform podemos fazer com que o usurio da nosa aplicao
trabalhe apenas em um ambiente personalizado, sem precisar digitar nas planilhas. A
vantagem
O
a os resu
necessrias em planilhas Excel. Em outras palavras, servem muitas vezes para despoluir
as planilhas.
Para criar um userform, v ao VB editor (Alt+F11 se voc estiver no Excel),
selecione o projeto r

Ferramentas Padro do Microsoft Visual Basic) onde voc quer arma
e da selecione Inserir, UserForm. Voc ta
Inserir da barra de ferramentas padro. U
ue ele se parece:




Aqui esto os objetos necessrios
para compor o formulrio de
interfaceamento da aplicao

Bertolo Lio #05 Criando Userforms 234

Na lista de componentes do seu projeto o nome do seu userform aparece
toda vez que voc quiser trabalhar no seu userform voc d
troles num userform novo. Os objetos so
adicion
forma de grade. Quaisquer objetos tais como botes
um duplo clique no seu nome na janela VBAProject.

Como voc pode ver, no h con
ados ao userform usando a barra de ferramentas chamada Caixa de
Ferramentas, discutida posteriormente. A configurao default para um userform
aquela de um instantneo em ou
listas q gos
o timo. Entretanto, se voc tiver de colocar um grande nmero de objetos
userform, voc pode ou desligar a grade, ou mudar o seu tamanho, e/ou
mas manter o instantneo habilitado. Para fazer qualquer coisa desta,
selecio
ue voc adicionar a ficaro ancoradas na grade do formulrio. Para dilo
simples, ist
sobre um
ocult-la,
ne Ferramentas, Opes, e a guia Geral:



Use as configuraes da grade do formulrio para mudar o tamanho da grade ou
para remov-la. Uma unidade de grade pequena, como 3, permite uma colocao muito
r a grade, e ainda reter o alinhamento na proprieda-
de grad
de volt entas
boa de objetos. E, voc pode desliga
e (Alinhar controles grade). Isto o melhor de ambos mundos.

Voc pode fechar a barra Caixa de ferramentas clicando no seu "X" e cham-la
a clicando no cone da caixa de ferramentas na barra de ferram
Para del tar um userform, primeiro selecione o form (d um duplo clique no seu
nome l no Project Explorer). Da, selecione Arquivo, Remover UserForm. Se voc
mudou o nome do userform, o nome aparecer como parte do item de menu remover no
lugar da palavra UserForm.
e


Bertolo Les sobre Macros em VBA do Excel 235


Testando o Userform
Toda vez que voc quiser ver seu userform (produto acabado ou funcionando em
progresso) em ao ou quando voc quiser test-lo esteja seguro de que o userform est
selecionado (e no um dos controles) clique no boto "Executar" na barra de
ferramentas ou tecle F5. Seu userform se mostrar com o Excel no fundo (background).
Para retornar ao VB Editor apenas clique no "X" do userform.
Tab Order
Quando as pessoas usam um form elas precisam mover de um controle para o
prximo entrando com um valor num deles e clicando "Enter" ou "Tab". Para se
assgurar que o usurio move de um controle ao prximo voc precisa definir a tab
order. Para fazer isto, clicar com o boto direito do mouse no prprio form e selecionar
o item "Tab Order". Siga as instrues. O primeiro controle na lista ser aquele um que
est ativo (cursor brilhante) quando o form est ativado. Levando os controles que no
sero usados pelo usurio para o final da lista. Na seo "Controles e suas
Propriedades" abaixo ver como desativar um controle tab ".
Carregando um Userform
Para carregar um formulrio em sua planilha, precisamos gerar uma macro que
tenha os comandos de inicializao do userform, e devemos executar essa macro pelas
formas j vistas anteriormente (por botes de controles e eventos).
iniciali
Para carregarmos um formulrio, usamos o comando Load e, para exib-lo,
usamos o mtodo Show. Vejamos o exemplo a seguir, que carrega o Userform1 na
zao da pasta de trabalho xxxxx.xls. Para isso, usamos o evento Open da Pasta
de trabalho:
Pr i vat e Sub Wor kbook_Open( )
Load User For m1
User For m1. Show
End Sub
Da mesma forma, podemos ocultar um formulrio pelo mtodo Hide
scarregar um for
e
boto de coma
s
de mulrio da memria com o comando Unload. No necessrio
ocultar um formulrio antes de descarreg-lo da memria.
Poderamos fazer um outro exemplo em que o formulrio carregado e exibido
atravs de botes de controle, por exemplo o ndo .
As Propriedades do Userform
Como um objeto Excel, um userform possui propriedade , mtodos e eventos.
Quando voc der um duplo clique no nome do form na janela VBAProject do
VBE o form aparece e a janela Propriedades lhe mostra as propriedades do form.
Bertolo Lio #05 Criando Userforms 236

Para muda utra propriedade de um elecione o form e
pressione F4, ou ibir, Propriedades. Um dilogo como o que segue
aparecer. Clicando no seu boto direito superior fecha o dilogo.



r o nome ou o
selecione Ex
userform, s
Este drop down permite voc mudar
para outros objetos e rever e/ou mudar suas
propriedades.
janela de propriedades


Do Excel 2000 em diante passou a existirem duas propriedades de userform
dicionais: ShowM a
para False, o que permite voc mostrar um userform e permite que a sua macro
continue a rodar. Por favor note que se voc usar estas propriedades e trocar a macro
com algum que esteja rodando o Excel 97, um erro ocorrer.
A acima mostra a lis
odal e RightToLeft. A propriedade ShowModal pode ser configurada
ortografia errada.
janela de propriedades ta Alfabtico, isto , em ordem
alfabtica. Clicando na guia Categorizado ela agrupa as propriedades relacionadas e lhe
rmite comprim pe ir ou expandir as propriedades que so mostradas, usando o pequeno +
ou caixas que aparecem esquerda das categorias.
Propriedade (Name)
Voc pode mudar o nome "(Name)" do form. Quando voc nomeia um form
sempre use o prefixo "frm" como em "frmDatabase" e seja to descritivo para voc
quanto possa ser de modo que seu cdigo ser fcil para ler. Sempre use uma ou mais
letras maisculas no nome. Quando voc escrever "frmDatabase.Show" em letras
minsculas, o Excel colocar em maisculo quaisquer letras deixando voc saber que o
nome est com
Por favor note que os espaos no so permitidos.
Propriedade BackColor
Essa propriedade define a cor do fundo (background) do formulrio. Abrindo a
flecha da caixa de combinao, aparece as cores da paleta do sistema.
Propriedade BorderColor
Bertolo Les sobre Macros em VBA do Excel 237


Define a cor da borda do formulrio.
Propri
o
Propriedade Font
ro de fontes do sistema, configurando como os textos sero
ulrio.
MouseIcon
icial do formulrio. Por default o userform aparece no centro
e use as propriedades " " e " " para definir a nova posio.
edade BorderStyle
Determina o estilo da borda.
Pode ser : frmBorderStyleNone ou frmBorderStyleSingle.
Propriedade Caption
O nome que vai aparecer na faixa azul no topo do formulrio.
Propriedade Enabled
Ativa ou desativa o formulrio. Desativar um formulrio significa no poder
fazer coisa alguma com ele; portanto, tome cuidado com essa propriedade.
Voc pode desabilitar o "X" do form com a propriedade "Enable" definida com
"False".
Exibe a caixa pad
exibidos nos outros objetos adicionados ao formulrio.
Propriedade ForeColor
Define a cor daquilo que ser impresso no formulrio.
Propriedade Height
Determina a altura do form
Propriedade Left
Demarca a distncia do formulrio ao canto esquerdo da tela.
Propriedade
Define um ponteiro do mouse personalizado quando estiver sobre o formulrio.
Para que esse cursor fique ativo, na propriedade MousePointer, voc deve escolher a
opo 99 frmMousePointerCustom.
Propriedade MousePointer
Voc pode ter o ponteiro do mouse mudado quando estiver sobre o form com
esta propriedade.
Propriedade Picture
Opta por uma figura como fundo do formulrio.
Propriedade PictureSizeMode
Determina a forma que a figura ser disposta no formulrio
Propriedade StartPosition
Indica a posio in
da tela. Se voc quiser ver ele mostrado em algum outro lugar defina a "Start" para "0-
Manual" Top Left
Propriedade Top
Bertolo Lio #05 Criando Userforms 238

Define a distncia entre o topo do formulrio e o topo da planilha.
Propriedade Width
Delimita a largura do formulrio.
Propriedade Zoom
Aumenta ou diminui a distncia de visualizao dos componentes do formulrio.

A seguir apresentadaremos os MTODOS a serem usados para este objeto
Userform:
Mtodo Hide
Como dissemos anteriormente, ele oculta um formulrio sem descarreg-lo da
memria.
Mtodo Show
Exibe um formulrio quando j carregado na memria.
Mtodo PrintForm
Imprime a imagem do formulrio na impressora padro do sistema.

A seguir apresentadaremos os EVENTOS a serem usados para este objeto
Userform. Os eventos que sero mostrados na seqncia servem para uma gama de
utros controles e, portanto, podemos, mais frente, apenas expandir o conceito.
vento DoubleClick
Acontece sempre que o formulrio receber um clique duplo.
vento Deactivate
Ocorre quando um formulrio for desativado.
vento Initialize
Sucede-se toda vez que um formulrio for carregado para a memria.
vento KeyDown
Ocorre quando uma tecla pressionada. Sua declarao possui dois argumentos:
eyCode As MSForms.ReturnInteger e Shift As Integer. KeyCode retorna o cdigo da
cla pressionada; Shift retorna 1 caso a tecla Shift esteja pressionada e 0, caso
ontrrio.
vento
o
Evento Activate
Ocorre quando o formulrio for ativado.
Evento Click
D-se toda vez que o formulrio for clicado.
E
E
E
E
K
te
c
E KeyUp
Bertolo Les sobre Macros em VBA do Excel 239


Ocorre quando uma tecla solta. Os argumentos se comportam como no evento
KeyDown.
Evento KeyPress
Ocorre quando uma tecla presionada tambm, mas retorna o cdigo da tabela
ASCII da tecla.
Evento MouseDown
contece quando um boto do mouse pressionado. Possui os seguintes
argumentos: Button As Integer, Shift As Integer, X As Single, Y As Single, onde Button
representa o boto clicado; Shift representa o estado da tecla Shift; X e Y representam a
posio atual do mouse.
Evento MouseUp
-se quando um boto do mouse solto. Possui os mesmos parmetros de
MouseDown.
Evento MouseMove
corre quando o mouse movimenta-se pelo formulrio.
Evento QueryClose
ealiza-se antes que o formulrio seja fechado. Possui o argumento Cancel para
cancelar o evento caso seja desejado.
Evento Resize
corre sempre que o formulrio seja redimensionado
Evento Terminate
ucede-se aps o formulrio ser fechado.
Event
e quando h uma mudana da propriedade Zoom do formulrio.
A
D
O
R
O
S
o Zoom
Ocorr
Bertolo Fase #3: VBA do Excel Avanado 240


Lio 6: Adicionando Controles aos UserForms
Caix A a de Ferramentas do Userform
A Caixa de Ferramentas para userforms chamada barra de ferramentas Caixa
de ferramentas. Ela se parece com o que segue:


O que segue so o que os diferentes controles fazem:
inha Um: Selecionador de Objetos
Inserir um Rtulo (Label)
Inserir uma Caixa de Texto
Inserir uma Caixa de Combinao (Combo)
Inserir uma Caixa de Listagem
Linha D
Inserir um Boto Alternncia
s Inserir uma Tab Strip
a
olamento
dicio
nho
desejad
use neles e na janela propriedades voc pode mudar as propriedades do
controle selecionado. Voc tambm pode clicar com o boto direito do mouse neles e
selecionar "Propriedades".
Gerenciando Controles
neles segurando-os e movendo-os ao
redor. Voc pode redimension-los selecionando-os e usando os diferentes
L
ois Inserir uma Caixa de Verificao (Check)
Inserir um Boto de Opo
Inserir um Moldura (Frame)
Inserir um Boto
Linha Tr
Inserir uma Multi-pgin
uma Barra de R Inserir
Inserir um Boto de rotao
a Imagem Inserir um
Linha Quatro Inserir um ReferenceEdit
Caixa
A nando Controles
Para adicionar controles ao form voc clica com o boto esquerdo do mouse
sobre aquele controle que voc quiser na caixa de ferramentas, segure o boto apertado
e arraste o controle sobre o form. Voc pode agora expandir o controle para o tama
o. Uma vez que todos os seus controles estejam no form voc clica com o boto
esquerdo do mo
Voc pode mover os controles clicando
Bertolo Lies de VBA do Excel 241


identificadores ao redor deles. Voc pode copi-los e col-los clicando com o boto
direito do mouse sobre eles e escolhendo o item de menu certo.
ma vez tendo adicionado seus controles voc poder querer alinhar alguns
deles ou redimensionar alguns de modo que eles fiquem todos do mesmo tamanho. Para
fazer isto voc primeiro precisa selecionar muitos controles ao mesmo tempo. Para fazer
isto clique com o boto esquerdo do mouse no form prximo a um dos controles que
voc quiser selecionar. Segure e arraste desenhando uma moldura que inclua muitos
controles.
U

Quando soltar o boto todos os controles que voc tocou pela moldura estaro
selecionados.

Clique com o boto direito do mouse em qualquer um dos controles e este menu
contextual aparece:

Voc pode ento alinhar os controles ou torn-los do mesmo tamanho
um qui esto aqueles mais importantes e suas propriedades.
Quando voc selecionar um controle sobre o userform suas propriedades esto
As propriedades e o nmero de propriedades

Os Controles e suas propriedades
Existem 12 diferentes controles que podem ser adicionados ao userform ou a
a planilha regular. A
mostradas na Janela de propriedades.
diferem dependendo do tipo de controles que voc selecionou. Estas propriedades
Bertolo Lio #07 Cdigo VBA do Excel para UserForms 242

podems ser mudadas na Janela de propriedades do VB editor ou pode ser mudada
m procedimento VBA.

aisculas nos
(cbxCitx, txbNomeCidade). Seja to descritivo quanto possvel para tornar
omando (cmb), rtulos
l e listagens (lbx), caixas
oto de rdio (rdb), botes de alternncia (toggle)
ps (tsp), multi pginas (mpg), barras de rolamento
) e ref edits (rfe). Os
cujos
to,
as caixas de combinao, os botes de opo e as caixas de
ade. Val ue
lo usurio na caixa de texto chamada tbxNomeCidade e
folha ativa.
les existem estas propriedades gerais que lhe permitem
te, a cor da fonte, a cor do fundo (background), o tipo de background, o tipo
utras caractesticas de design.

mu
ressantes que eu uso com diferentes
ente
caixas
dades
tulo so:
ornar o controle invisvel para as teclas "Tab" e "Enter" (Ver Tab Order
- Word
form e servem
ions dos
t Ir Executar Submeter Cancelar
As outras propriedades interessantes do boto de comando so:
- WordWrap para ser capaz de escrever mais que uma linha sobre um boto,
- ControlTipText que gera uma pequena caixa de comentrio quando o usurio mover o
mouse sobre o controle. Voc pode usar esta propriedade para dar explicaes e
instrues sobre o boto de comando,
programaticamente nu
Defina a propriedade "Name" de todos os controles que voc se referir nos seus
tos VBA. Eu o encorajo a usar prefixos e algumas letras m procedimen
us nomes se
seu cdigo mais claro. Os prefixos que eu uso so: boto de c
b), caixas de combinao (cbx), caixas de texto (txb), caixa d (l
de verificao (check boxes) (ckb), b
es) (fra), tab stri (tbt), molduras (fram
(scroll bars) (scb), botes de rotao (spin) (spb), imagens (img
controles que particularmente precisam ser bem chamados so os controles
o as caixas de tex valores eventuais voc estar usando nos seus procedimentos com
as caixas de listagens,
verificao. Por exemplo:
Range( " A1" ) . Val ue = t xbNomeCi d
tomar o valor entrado pe
entrar com ele na clula A1 da
ra a maioria dos contro Pa
definir a fon
borda e o de
A propriedade "Caption" contm o texto que mostrado num rtulo, num boto
de comando, numa check box, num boto de opo, num frame, numa tab strip ou numa
lti pgina.
Abaixo esto as outras propriedades inte
controles.
Rtulos
Os rtulos so controles passivos significando que o usurio nunca realm
atua nele. Est l para informar ao usurio e para rotular outros controles como
de texto, caixas de combinao ou caixa de listagens. As outras proprie
interessantes do r
- TabStop para t
acima).
Wrap para habilitar a escrever mais que uma linha num rtulo.
Botes de Comando
Os botes de comando so geralmente colocados no fundo do
para completarem a transao para a qual o formulrio foi criado. Os capt
o es so geralmente " ", " ", " ", " ". b
Bertolo Lies de VBA do Excel 243


- Enabled e Visible so propriedades que voc pode mudar programaticamente para
esabilitar ou desenhar um boto comando invisvel seguinte a uma seleo anterior
um outro controle do userform,
TabIndex a propriedade que voc muda pela functionalidade "Tab Order" como
ostrado acima na seo "Tab Order".
aixas de Texto (Text Boxes)
A caixa de texto o controle mais simples para exigir uma entrada do usurio. O
surio digita alguma coisa nela e este valor pode ento ser usado no seu procedimento
BA.
As outras propriedades interessantes das caixas de texto so:
WordWrap habilitar a escrever mais do que uma linha num boto,
ControlTipText que gera pequenas caixas de comentrio quando o usurio move o
ouse sobre o controle. Voc pode usar esta propriedade para dar explicaes e
strues a respeito do boto de comando,
Enabled e Visible so propriedades que voc pode mudar programaticamente para
esbilitar ou desenhar um boto de comando invisvel seguido de uma seleo prvia
" como
aquela que lhe permite escolher um caractere para os usurios
eterem passwords,
th para limitar o nmero de caracterees entrados pelo usurio,
- alue ou Text que o texto mostrado na caixa de texto quando o userform for ativado
("Entrar com seu Nome" por exemplo)
Molduras (Frames)
Os Frames so tambm um controle passivo. Frames so usados para
melhorarem o layout do userform. Voc pode us-los ao redor de um grupode botes de
opo ou caixas de verificao ou ao redor de um grupo de caixas de texto ou caixas de
combinao que tenham alguma coisa em comum.
Se voc tiver dois conjuntos de 3 botes de opo num userform e voc no
coloc-los dentro de um frame eles todos funcionanro juntos e voc pode escolher
somente um dos seis. Se voc colocar cada conjunto num frame voc pode escolher um
dos trs em cada conjunto.
d
n
-
m
C
u
V
-
-
m
in
-
d
num outro controle do userform,
- TabIndex uma propriedade que voc muda pela functionalidade "Tab Order
mostrado acima na seo "Tab Order".
- PasswordChar
subm
- MaxLeng
V

Caixas de Verificao (Check Boxes) e Botes de Opo (Option Buttons)
As caixas de verificao e os botes de opo so ambos usados para oferecer ao
o
e
ve ima
so
usurio uma escolha. A principal diferena entre caixas de verificao e botes de op
que se voc tiver 5 de cada num form um usurio pode marcar todas as 5 caixas d
rificao mas pode somente selecionar um dos botes de opo. Veja a nota ac
bre frame e botes de opo. Se voc no quiser usar frame para criar grupos de
Bertolo Lio #07 Cdigo VBA do Excel para UserForms 244

bo
Todos os botes de opo dentro do mesmo GroupName funcionam juntos.
As outras propriedades interessantes das caixas de verificao e botes de opo so:
WordWrap ser capaz de escrever mais do que uma linha na caption,
- ControlTipText a qual gera uma pequena caixa de comentrio quando o usurio mover
o mouse sobre o controle. Voc pode usar esta propriedade para dar explicaes e
instrues a respeito do boto de comando,
- Enabled e Visible so propriedades que voc pode mudar programaticamente para
desabilitar ou renderizar invisvel um boto de opo ou uma caixa de verificao
seguida de uma slelo prvia num outro controle do userform,
Caixas de Combinao (Combo Boxes) e Caixas de Listagens (List Boxes)
A diferena entre a caixa combo e a caixa de listagem que a caixa combo
uma lista drop-down e o usurio pode submeter um nico valor um dos valores da lista
drop-down ou qualquer outro valor. A caixa de listagem mostra um certo nmero de
valores com ou sem a barra de rolamento (scroll bar) e o usurio pode selecionar nela
um ou mais valores mas no um valor que no est na lista.
tes de opo voc precisar usar a propriedade "GroupName" dos botes de opo.
-
Combo Box List Box


Caixas Combo
As propriedades interessantes das caixas de combinao so:

- RowSource Os valores que devero aparecer na lista drop-down da caixa combo so
submetidos na propriedade RowSource. Por exemplo Sheet1!A1:A12 contratar a lista
com os valores residindo nas clulas A1 at A12 da folha com o Caption "Sheet1". As
regras para submeter a propriedade RowSource a caption da folha onde a lista reside
seguida por um ponto de exclamao (!), os endereos da primeira clula, dois pontos e
os endereos se a ltima clula.

NOTA IMPORTANTE: Se houver um espao ou um caractere especial na caption da
folha onde a lista reside voc deve cerc-lo com aspas simples como em 'Esta
folha'!A1:A12.
- ListRows o nmero de valores mostrados na lista drop-down. Se voc mostrar menos
do que a lista complete uma barra de rolamento (scroll bar) adicionada
automaticamente.

- MatchRequired por default definida para false significando que o usurio pode
Bertolo Lies de VBA do Excel 245


submeter qualquer valor na caixa combo. Se voc quiser que o usurio fique limitado
aos valores da lista defina esta propriedade para True.
- Text dever conter um valor mostrado na caixa combo quando o userform estiver
ativado (Selecione uma Cidade, por exemplo).
- ControlTipText que gera uma pequena caixa de comentrio quando o usurio mover o
mouse sobre o controle. Voc pode usar esta propriedade para dar explicaes e
instrues a respeito da caixa combo.
- ColumnCount o nmero de colunas de valores que voc quiser mostrar na drop-down
lista. Por exemplo se voc quiser mostrar parte nmero e parte nome na lista voc
submeter uma RowSource como Sheet1!A1:B12 com a parte nmeros na coluna A e a
parte nomes na coluna B
- ColumnWidth a largura de todas as colunas quando mostrada na lista drop-down da
caixa combo.
- BoundColumn a coluna da qual o valor desenhado para o valor final da caixa
combo. Por exemplo se a parte nmero estiver na coluna A do RowSource e a parte
nome estiver na coluna B do RowSource quando o usurio selecionar um valor somente
a coluna A ou coluna B ser igual ao final valor da caixa combo. Assim se voc definir o
valor de BoundColumn para 1 a parte nmero torna-se o valor final. Se voc definir
BoundColumn para 2 a parte nmero torna-se o final valor.
Caixas Combo em Cascata
Aqui est um simples form exigindo do usurio selecionar um tipo de madeira
para seu revestimento de cho e da uma cor. Nem todas as cores esto disponveis para
todos os tipos de madeira. Quando o tipo de madeira for selecinado na primeira caixa
combo o usurio dever somente ser capaz de selecionar uma cor que est disponvel
para o tipo de madeira selecionado. Estas so as caixas de combinao em cascata.

Voc define a lista de valores para a primeira caixa combo na propriedade
RowSource como descrito acima. Para a lista de valores na segunda caixa combo
alguma programao necessria. Com o cdigo apropriado voc pode mesmo evitar o
boto "Selected". O procedimento move to logo o usurio tenha selecionado uma cor.
Voc tambm pode validar a entrada para ficar certo que o usurio selecionou
ambos um tipo de madeira e a cor.
Veja o captulo sobre o cdigo VBA para userforms e controles.
Caixas de Listagens
As propriedades interessantes das caixas de listagens so:
- RowSource Os valores que devero aparecer na lista drop-down da caixa combo so
submetidas na propriedade RowSource. Por exemplo Sheet1!A1:A12 empregar a lista
Bertolo Lio #07 Cdigo VBA do Excel para UserForms 246

com os valores residindo nas clulas A1 at A12 da folha com o Caption "Sheet1". As
regras para submeter a propriedade RowSource a caption da folha onde a lista reside
seguida por um ponto de exclamao (!), os endereos da primeira clula, dois pontos e
os endereos se a ltima clula.

NOTA IMPORTANTE: se houver um espao ou um caractere especial na caption da
folha onde a lista reside voc deve cera-lo com aspas simples como em 'Esta
folha'!A1:A12.

- MultiSelect definida para 1 se voc quiser que o usurio seja capaz de selecionar
muitos valores da lista.
- Height O nmero de valores mostrados na lista dependero da altura da caixa de
listagem. Voc pode definir a altura aqui ou no prprio userform esticando-o. Se o
nmero de valores no seu RowSource for maior que aquele que pode ser mostrado na
caixa de listagem uma barra de rolamento adicionada automaticamente.
- Text dever conter o valor mostrado na caixa combo quando o userform estiver
ativado (Selecione uma Cidade, por exemplo).
- ControlTipText que gera uma pequena caixa de comentrio quando o usurio move o
mouse sobre o controle. Voc pode usar esta propriedade para dar explicaes e
instrues a respeito da caixa combo.
- ColumnCount o nmero decolunas de valores que voc quiser mostrar na caixa de
listagem. Por exemplo se voc quiser mostrar parte nmero e parte nome na lista
submeter umaa RowSource como Sheet1!A1:B12 com a parte nmeros na coluna A e a
parte nomes na coluna B
- ColumnWidth a largura de todas as colunas mostradas na lista drop-down da caixa
combo.
- BoundColumn a coluna da qual o valor desenhado para o valor final da caixa
combo. Por exemplo se a parte nmero est numa coluna A do RowSource e a parte
nome est na coluna B do RowSource quando o usurio selecionar um valor somente a
coluna A ou coluna B ser iguala o valor final da caixa combo . Assim se voc definir o
valor da BoundColumn par 1 a parte nmero torna-se o valor final. Se voc definir
BoundColumn para 2 a parte nmero torna-se o valor final Multi Pginas
O controle multi pginas usado para desenvolver userforms mais elaborados
onde o usurio pode ver um diferente conjunto de controles em cada uma das multiplas
pginas. No exemplo abaixo o usurio pode escolher um conjunto de parmetros
primrios numa pgina e a conjunto de parmetros secundrios na segunda pgina.
Bertolo Lies de VBA do Excel


247


BOTES DE COMANDO NOS USERFORMS E MOSTRAR/OCULTAR
USERFORMS
Para demonstrar como mostrar um userform e como os botes funcionam, crie
um userform em branco e desenhe dois botes nele usando a ferramenta boto na
barra de ferramentas caixa de ferramentas. Quando voc fizer isto, o dilogo dever se
parecer como este:















Se os seus botes no estiverem alinhados, clique num boto e pressione F4 para
mostrar a janela de propriedades. Da ento verifique os valores da posio. Use o drop
down no topo para saltar entre os botes. Ou, clique no boto flecha na barra de ferra-
mentas e selecione ambos os botes clicando e desenhando uma caixa de seleo ao
redor dos botes. Ento, com o boto direito do mouse selecione Formatar, Alinhar e
escolha as margens de alinhamento.






Bertolo Lio #07 Cdigo VBA do Excel para UserForms 248

















Voc pode tambm selecionar Formatar, Criar mesmo tamanho para o tamanho
s objetos.
















O prximo passo mudar o texto nos botes para OK e Cancelar. Voc pode
fazer isto ou clicando na caixa, ou mudando o texto da Caption na janela de proprie-
dades. Aps mudar os nomes, mudar a fonte em cada caixa selecionando um boto de
cada vez, mostre a janela propriedades (F4), e d um duplo clique na propriedade fonte.
Isto mostra um dilogo que lhe permite mudar a fonte. Mude a fonte para 14 pontos,
negrito. O que segue agora com o que o userform se parece:





do


Bertolo Lies de VBA do Excel


249













A seguir, mude os nomes dos botes na caixa propriedades para Boto_OK e
Boto_Cancelar. Isto os torna mais simples de se trabalhar ao invs dos seus nomes
default.
O prximo passo criar um mdulo que mostrar o dilogo. Para fazer isto
selecione Inserir, Mdulo no menu do VB editor. Inserir o seguinte cdigo neste
mdulo:
Sub Most r ar _Meu_User For m( )
User For m1. Show
' cdi go que ar mazena a i nf or mao do userform
Unl oad User For m1
' o que est aci ma r emove o user f or mda memr i a
End Sub

Se o nome do seu userform no for "userform1", use seu nome dado ao userform
no cdigo acima. Voc pode mudar o nome de um userform daquele que fora atribuido
a ele pelo VB editor selecionando o userform, mostrando a janela de propriedades e
mudar a propriedade Name. Nenhum espao ou caracteree especial so permitidos.
Execute esta macro pressionando F5, ou clicando no boto Executar. O userform
ser mostrado.




Bertolo Lio #07 Cdigo VBA do Excel para UserForms

250





















Porm, os botes OK e Cancelar no funcionam! Isto porque nenhuma m
fora atribuida a eles. Para liberar o userform neste caso, voc deve clicar no boto
fechar (o pequeno boto X) no canto superior direito do dilogo mostrado. Voc pode
tambm fechar um userform indo ao Visual Basic editor e clicando no boto Redefinir
(o quadradinho em azul na barra de ferramentas do VB editor se ela estiver aberta).
Para fazer os botes OK e Cancelar responderem, voc precisa fazer o seguinte:

D um duplo clique no boto OK. O Excel designar uma macro ao boto chamada
de macro " Boto_OK_Click", e coloca voc no mdulo contendo a nova macro de
modo que voc possa edit-la. (Este mdulo diferente de um mdulo normal, ver
discusso no Cdigo de Mdulo abaixo).
Coloque o seguinte cdigo nesta macro:

Sub Bot o_OK_Cl i ck ( )
' Def i ni r uma var i vel pbl i ca par a i ndi car que bot o f oi cl i cado
bRespost a = Tr ue
' ocul t ar o f or m
User For m1. Hi de
End Sub

D um duplo clique no boto Cancelar. O Excel atribuir uma macro ao boto
chamada de macro " Boto_Cancelar_Click". Coloque as seguintes declaraes
nesta macro:

Sub Bot o_Cancel ar _Cl i ck ( )
' def i ni r a var i vel pbl i ca par a i ndi car qual bot o f oi cl i cado
acro

Bertolo Lies de VBA do Excel 251


bRespost a = Fal se
' ocul t ar o f or m
User For m1. Hi de
' Voc pode t ambmusar a decl ar ao " Me. Hi de"
End Sub

Modique a macro Mostrar_Meu_UserForm para o seguinte:

Sub Most r ar _Meu_User For m( )
User For m1. Show
' r emover o f or mda memr i a ( se val or es do f or em
' necesr i os voc pr i mei r o consul t ar o obj et o do f or mpar a
' def i ni r a pr opr i edade e da r emover o f or m.
Unl oad User For m1
I f Not bRespost a Then
MsgBox " Sel eci onou Cancel ar "
End
End I f
I f bRespost a Then
MsgBox " sel eci onou OK"
End I f
End Sub

Finalmente, coloque a seguinte declarao no topo do mdulo contendo a macro
Mostrar_Meu_UserForm. Ela poder ficar logo abaixo de quaisquer declaraes
Option.

Publ i c bRespost a As Bool ean

Agora, quando voc rodar a macro Mostrar_Meu_UserForm e clicar no boto OK ou
Cancelar, o cdigo associado com o clique do boto executar. Neste caso, o boto
oculta o form e ajusta a varivel para pblica. Na macro principal, o userform
removido da memria e o cdigo determina qual ao tomar baseado no valor da
varivel pblica
Um Exemplo
A seguir mostramos como criar um formulrio e como program-lo:
1. Pressione as Teclas Alt +F11, para entrar no editor de Visual Basic.
2. Ative as seguintes opes:
D um clique no menu Exibir e escolha a opo Project Explorer
D um clique no menu Exibir e escolha a opo J anela propriedades

Bertolo Lio #07 Cdigo VBA do Excel para UserForms

252



















2. No menu Inserir escolha a opo UserForm. Isto insere o Formulrio que
programaremos com controles. No Project Explorer se observar que se inseriu
o UserForm.





Bertolo Lies de VBA do Excel


253
Tambm d um clique no Formulrio USERFORM1 que dever ativar a Caixa de
Ferramentas, se ele no se ativar d um clique no menu Exibir e escolha a opo Barras
de ferramentas e clique na opo Caixa de ferramentas de controle.
1. Escolha na Caixa de Ferramentas o Controle Rtulo, aquele tem um A, e arraste-o
desenhando no Formulrio USERFORM1 o rtulo. Ele ganhar o nome Label1,
depois d um clique no rtulo desenhada e poder modificar o nome de dentro e
coloquemos a Nome. Se por erro deres um duplo clique no rtulo, voc ser enviado
janela de programao do rtulo, da ento d um duplo clique em UserForm1 que
se encontra no Project Explorer.







2. Escolha na Caixa de ferramentas o controle Caixa de texto, o que tem ab e arraste-o
desenhando no formulrio USERFORM1 a caixa de texto ao lado do rtulo Nome.
A caixa de texto deve de estar vazia e seu nome ser Textbox1, o nome somente
aparecer na janela de propriedades do controle.






3. Faa os dois passos anteriores igualmente, colocando Endereo na Label2 e
Telefone na Label3 e tambm redimensione a sua Textbox. Isto ficar assim depois
de fazer isto
Bertolo Lio #07 Cdigo VBA do Excel para UserForms

254

Se tiveres algum problema ao desenhar os rtulos ou as caixas de texto,
somente troque o nome do Rtulo ou da Caixa de texto na J anela propriedades. A
opo se chama (Name).
O Erro que marcar pode ser Nome Ambguo, mas se se trocar o Nome do
controle se resolver o erro. Podes por qualquer nome no lugar de Label1.





Somente altere isto se marcar erro, se NO deixe assim.
Os controles como as Rtulos e Caixas de textos podem modificar algunas
opes na J anela Propriedades. Para fazer isto necessrio ter conhecimento sobre as
propriedades dos controles. No altere as propriedades se no as conhece.
4. Escolha na Caixa de ferramentas o controle Boto de Comando e arraste-o
desenhando no Formulrio USERFORM1 um boto. Ser criado a um boto de
comando rotulado CommandButton1. Depois d um clique no nome do boto
desenhado e poder modificar este nome. Coloquemos a Inserir. Se por erro deres
um duplo clique no boto, sers enviado janela de programao do boto, para
voltar, somente d um duplo clique em UserForm1 que se encontra no Project
Explorer.
Assim ficar o Formulrio formado pelos controles:







Bertolo Lies de VBA do Excel


255

Agora d um duplo clique sobre o controle Textbox1 para program-lo e depois
inserir o seguinte cdigo:
Pr i vat e Sub Text Box1_Change( )
Range("A9").Select
ActiveCell.FormulaR1C1 = TextBox1
End Sub
Isto indica que se v A9 e escreva o que h no Textbox1
Nota.-O que esta em azul (Claro e escuro) foi gerado automticamente pelo Excel, voc somente
escrever o que esta em Negrito.
Para voltar ao Formulrio e programar o Textbox seguinte d um duplo clique
em UserForm1 que se encontra no Project Explorer, ou simplemente d um clique em
Exibir Objeto no mesmo Project Explorer.


Agora d um duplo clique sobre o controle Textbox2 para program-lo e depois
inserir o seguinte cdigo:
Pr i vat e Sub Text Box2_Change( )
Range("B9").Select
ActiveCell.FormulaR1C1 = TextBox2
End Sub
Isto indica que se v B9 e escreva o que h no Textbox2
Para voltar ao Formulrio e programar o Textbox seguinte d um duplo clique
em UserForm1 que se encontra no Project Explorer, ou simplemente d um clique em
Exibir Objeto no mesmo Project Explorer.
Agora d um duplo clique sobre o controle Textbox3 para program-lo e depois
inserir o seguinte cdigo:
Pr i vat e Sub Text Box3_Change( )
Range("C9").Select
ActiveCell.FormulaR1C1 = TextBox2
End Sub
Isto indica que se v C9 e escreva o que h no Textbox3
Para voltar ao Formulrio e programar o Boto de Comando Inserir d um
duplo clique em UserForm1 que se encontra no Project Explorer, ou simplemente d
um clique em Exibir Objeto no mesmo Project Explorer.
Agora d um duplo clique sobre o controle Boto de Comando para program-
lo e depois inserir o seguinte cdigo:
Pr i vat e Sub CommandBut t on1_Cl i ck( )
Remi nser i r uma linha
Selection.EntireRow.Insert
Remo Empt y Li mpa os Textbox
TextBox1 = Empty
TextBox2 = Empty
Bertolo Lio #07 Cdigo VBA do Excel para UserForms

256
TextBox3 = Empty
RemA decl ar ao Text box1. SetFocus Env a o cur sor ao Text box1
par a vol t ar a capt ur ar os dados
TextBox1.SetFocus
End Sub
Nota.-O comando Rem empregado para colocar comentrios dentro da programao, o comando
Empty empregado para esvaziar as Textbox.
Agora pressione o boto Executar Sub/UserForm que se encontra na barra de
ferramentas ou simp F5.


Ativar-se- o Userform1 e tudo o que se escrever nas Textbox se escrever no Excel e
quando pressionares o boto Inserir, se inserir uma linha, esvaziaro as Textbox e
depois se mostrar o cursor no Textbox1.
lemente a tecla de funo
Bertolo Lies de VBA do Excel


257
TRABALHANDO COM FRMULAS
de suma importncia saber aplicar Frmulas em Macros do Excel, j que a
maioria das folhas de clculos as envolvem, por exemplo os Inventrios, as Normas ou
qualquer outro tipo de folha as levam, por isso que nesta lio se mostra como
manejar Frmulas em Macros de Excel.

Pressione as Teclas Alt +F11, para entrar no editor de Visual Basic.
1. Ative as seguintes opes:
D um clique no menu Exibir e escolha a opo Project Explorer
D um clique no menu Exibir e escolha a opo J anela propriedades
1. No menu Inserir escolha a Opo UserForm. Isto insere o Formulrio que
programaremos com controles. No Project Explorer se observar que se inseriu
o UserForm.
Agora criars um formulrio com o seguinte aspecto:





o formulrio ter:
Tr s r t ul os
Tr s Text box
UmBot o de Comando
Os dados que se perguntaro sero Nome e Idade, os Dias Vividos sero gerados
automaticamente quando se inser a idade. A seguir se mostra como se devem de
programar estes Controles:
Programao dos Controles:

Pr i vat e Sub CommandBut t on1_Cl i ck( )
Sel ect i on. Ent i r eRow. I nser t
Text Box1 = Empt y
Text Box2 = Empt y
Text Box3 = Empt y
Text Box1. Set Focus
End Sub

Pr i vat e Sub Text Box1_Change( )
Range( " A9" ) . Sel ect
Act i veCel l . For mul aR1C1 = Text Box1
End Sub

Pr i vat e Sub Text Box2_Change( )
Range( " B9" ) . Sel ect
Act i veCel l . For mul aR1C1 = Text Box2
Remaqu se cr i ar a For mul a
Bertolo Lio #07 Cdigo VBA do Excel para UserForms

258
Text Box3 = Val ( Text Box2) * 365
RemO Text box3 guar dar o t ot al da mul t i pl i cao do Text box2 por
365
RemO Comando Val per mi t e conver t i r umval or de Text o a umVaor
Numr i co
RemI st o se deve a que os Text box no so Numr i cos e devemos de
Conver t - l os
End Sub

Pr i vat e Sub Text Box3_Change( )
Range( " C9" ) . Sel ect
Act i veCel l . For mul aR1C1 = Text Box3
End Sub
Isto vai permitir que quando se executar o formulrio e se der a idade o resultado
dos dias vividos aparecer no Textbox3 e se escrever tambm em Excel. O comando
Val um comando de Visual Basic que te permite converter um valor de texto a um
valor numrico. Lembrem-se que o Comando Rem se utiliza para colocar comentrios
nicamente e no afeta programao.
Este Arquivo desta Macro se chama Macros de Idade e est incluido aqu.
Geraremos outro exemplo, crie o seguinte Formulrio com os seguintes dados:

5 Rtulos
5 Textbox
1 Boto de Comando
Os dados que se perguntaro sero Nome, Dias Trabalhados, Pagamento Dirio,
Bonos e Saldo Lquido.






Gere o seguinte cdigo:

Pr i vat e Sub CommandBut t on1_Cl i ck( )
Sel ect i on. Ent i r eRow. I nser t
Text Box1 = Empt y
Text Box2 = Empt y
Text Box3 = Empt y
Text Box1. Set Focus
End Sub


Bertolo Lies de VBA do Excel


259
Pr i vat e Sub Text Box1_Change( )
Range( " A9" ) . Sel ect
Act i veCel l . For mul aR1C1 = Text Box1
End Sub

Pr i vat e Sub Text Box2_Change( )
Range( " B9" ) . Sel ect
Act i veCel l . For mul aR1C1 = Text Box2
End Sub

Pr i vat e Sub Text Box3_Change( )
Range( " C9" ) . Sel ect
Act i veCel l . For mul aR1C1 = Text Box3
End Sub

Pr i vat e Sub Text Box4_Change( )
Range( " D9" ) . Sel ect
Act i veCel l . For mul aR1C1 = Text Box4
Remaqui se cr i ar a f or mul a
Text Box5 = Val ( Text Box2) *Val ( Text Box3) + Val ( Text Box4)
RemO Text Box5 guar dar o t ot al
End Sub

Pr i vat e Sub Text Box5_Change( )
Range( " E9" ) . Sel ect
Act i veCel l . For mul aR1C1 = Text Box5
End Sub

Quando se introduzir os bonos, automaticamente se gerar o Saldo Lquido.
Este exemplo vem no Arquivo Macros de Saldo Lquido
USANDO INFORMAO COM UMA TEXTBOX
Pode-se buscar informao com uma Textbox programando-a da seguinte forma:




Desenhe uma Rtulo, um Textbox e um Boto de Comando e agregue o seguinte
Cdigo:
Pr i vat e Sub Text Box1_Change( )
Range( " A9" ) . Sel ect
Act i veCel l . For mul aR1C1 = Text Box1
End Sub



Bertolo Lio #07 Cdigo VBA do Excel para UserForms

260
Pr i vat e Sub CommandBut t on1_Cl i ck( )
Cel l s. Fi nd( What : =TextBox1, Af t er : =Act i veCel l ,
LookI n: =xl For mul as, LookAt _
: =xl Par t , Sear chOr der : =xl ByRows, Sear chDi r ect i on: =xl Next ,
Mat chCase: = _
Fal se) . Act i vat e
End Sub
Observe que foi incluido na programao do boto Buscar Agora que buscar o
que est no Textbox1 na hora que se pressionar.
TRABALHANDO COM O ASSISTENTE






A seguir se mostram alguns cdigos do Assistente:
Este cdigo permite tornar visvel o ajudante ou seja mostr-lo. Se desejares
ocult-lo somente troque a opo True por False.
Assistant.Visible = True
Este cdigo permite Mover o Asistente a um novo lugar, somente troque os
valores numricos e trocar de posio.
Assistant.Move 430, 230
Este cdigo permite ativar um efeito de animao, quando escrever o sinal de
Igual depois de Assistant.Animation =, aparecer um menu com diferentes efeitos de
animao
Assistant.Animation = msoAnimationListensToComputer
Este exemplo permite criar um Novo Asistente para poder manipular com uma pergunta
e que tu a contestes. A varivel t guardar o valor da resposta, se o valor -3 significa
que Sim e portanto apagar a linha.
Sub Bal oDoOf f i ce( )
Assi st ant . On = Fal se
I f MsgBox( " Habi l i t ar o Assi st ent e do Of f i ce?" , _
vbYesNo, " Assi st ant e est Desl i gado" ) = vbYes Then
Assi st ant . On = Tr ue
Assi st ant . Vi si bl e = Tr ue
Assi st ant . Ani mat i on = _
msoAni mat i onGet At t ent i onMaj or
End I f
Wi t h Assi st ant . NewBal l oon
. Text = " Desej as Apagar est e Regi st r o?"
. But t on = msoBut t onSet YesNo
. Headi ng = " Adver t nci a"
t = . Show
O assistente o personagem do Office
que se ativar e nos ajudar com suas
janelas que podemos manipul-las, por
exemplo, pode-se dar animao, mover-
se, fazer perguntas, etc.
Assistente do Office -
chamado Clip
Outro Assistente do
Office - chamado Mimi

Bertolo Lies de VBA do Excel 261


End Wi t h
I f t = - 3 Then
Assi st ant . Ani mat i on = msoAni mat i onEmpt yTr ash
Sel ect i on. Ent i r eRow. Del et e
End I f
End Sub

Outros Assistentes ( Pingo, F1, Office Logo, Merlin, Natureza, Rex) encontram-se na
Galeria de Assitentes do Office.
Bertolo Lio #07 Cdigo VBA do Excel para UserForms

262
Lio 7: Cdigo VBA do Excel para UserForms
l amigos, estamos de novo aqu para mostrar como se manipularo Consultas
nos Formulrios, acessos s Macros do Excel sem necesidade de entrar no
Visual Basic e alguns mtodos mais fcil de trabalhar.
ELABORANDO UMA CONSULTA
Todo Registro de informao deve de ter sua prpria Consulta, Baixa e Modi-
ficao, por isso que neste novo captulo nos concentraremos nele, primeiramente em
poder consultar a informao que j se escreveu na Folha do Excel, obviamente desde
uma Macro combinada com Visual Basic, observemos o seguinte exemplo:
1. Pressione as Teclas Alt + F11, para entrar no editor de Visual Basic.
2. Ative as seguintes opes:
D um clique no menu Exibir e escolha a opo Project Explorer
D um clique no menu Exibir e escolha a opo J anela propriedades
No menu Inserir escolha opo UserForm. Isto insere o Formulrio que
programaremos com controles. No Project Explorer se observar que se inseriu o
UserForm.
Agora criars um formulrio com o seguinte aspecto:




o formulrio ter:
Tr s r t ul os
Tr s Text box
Tr s Bot es de Comando
Os dados que se perguntaro sero Nome, Endereo e Telefone. Os trs botes nos
serviro para o seguinte:

Consultar - consultar a informao que tenhamos inserido com o boto inserir.
Baixa - poder eliminar algum dado que se consultou e no o queremos.
Inserir - ter a fun-o de inserir os registros, como os exerccios anteriores. A seguir
se mostra como se devem de programar estes Controles:
Programao dos Controles:
BOTO DE CONSULTA
Pr i vat e Sub CommandBut t on1_Cl i ck( )
Cel l s. Fi nd( What : =TextBox1, Af t er : =Act i veCel l ,
LookI n: =xl For mul as, LookAt _
: =xl Par t , Sear chOr der : =xl ByRows, Sear chDi r ect i on: =xl Next ,
Mat chCase: = _
Fal se) . Act i vat e
Act i veCel l . Of f set ( 0, 1) . Sel ect
O
Bertolo Lies de VBA do Excel 263


Text Box2 = Act i veCel l
Reml i nha que cont mo ActiveCell.Offset(0, 1).Select per mi t e
mover - se uma col una di r ei t a, por t ant o depoi s da busca das
pr i mei r as l i nhas comCell.Find se encont r a o Nome da pessoa se
move segui nt e col una e a l i nha TextBox2 = ActiveCell Per mi t e
capt ur ar o val or da cl ul a ao Textbox2 e asi mmost r ar o dado da
cl ul a no TextBox2.
Act i veCel l . Of f set ( 0, 1) . Sel ect
Text Box3 = Act i veCel l
RemCada vez que se escr ever l i nha ActiveCell.Offset(0,
1).Select si gni f i ca que se t emque mover - se uma col una
di r ei t a.
RemSe o nome que t r at as de consul t ar no se encont r a poder i a
ger ar umer r o por que f al har a o Cel l . Fi nd i st o pode ocor r er no
Wor d 97, eu t r abal ho como Wor d 2007 e no t enho esse pr obl ema.
Mas i st o se sol uci onar a comuma r ot i na de er r o.
End Sub

BOTO BAIXA
Pr i vat e Sub CommandBut t on2_Cl i ck( )
Sel ect i on. Ent i r eRow. Del et e
Range( " A9" ) . Sel ect
Text Box1 = Empt y
Text Box2 = Empt y
Text Box3 = Empt y
Text Box1. Set Focus
End Sub


BOTO INSERIR
Pr i vat e Sub CommandBut t on3_Cl i ck( )
Range( " A9" ) . Sel ect
Sel ect i on. Ent i r eRow. I nser t
Text Box1 = Empt y
Text Box2 = Empt y
Text Box3 = Empt y
Text Box1. Set Focus
End Sub

CAIXAS DE TEXTO
Pr i vat e Sub Text Box1_Change( )
Range( " A9" ) . For mul aR1C1 = Text Box1
Remest a pr i mei r a l i nha t r ocar est as duasque t e par ece
t odav a mas cur t a
Range( " A9" ) . Sel ect
Act i veCel l . For mul aR1C1 = Text Box1
End Sub

Pr i vat e Sub Text Box2_Change( )
Range( " B9" ) . For mul aR1C1 = Text Box2
End Sub

Pr i vat e Sub Text Box3_Change( )
Range( " C9" ) . For mul aR1C1 = Text Box3
Bertolo Lio #07 Cdigo VBA do Excel para UserForms 264

End Sub
Se com o Boto Consulta tens um erro quando no encontra pessoa, ento ters de
agregar isto a teu cdigo do Boto Consultar
BOTO DE CONSULTA
Pr i vat e Sub CommandBut t on1_Cl i ck( )
On Error Goto aoencontro
Remest a l i nha ger a uma r ot i na de er r o se Excel encont r ar um
er r o se o di sser que se v r t ul o aoencontro que est def i ni da
mai s adi ant e no cdi go. No use a j anel a de er r o se no t i ver es
pr obl emas hor a que no encont r ar es a pessoa. Lembr e- se se voc
comet er qual quer er r o o Excel se di r i gi r ao r t ul o a noencontro
e i gnor ar qual quer er r o, at umque voc comet er na pr ogr amao.
Cel l s. Fi nd( What : =TextBox1, Af t er : =Act i veCel l ,
LookI n: =xl For mul as, LookAt _
: =xl Par t , Sear chOr der : =xl ByRows, Sear chDi r ect i on: =xl Next ,
Mat chCase: = _
Fal se) . Act i vat e
ActiveCell.Offset(0, 1).Select
TextBox2 = ActiveCell
ActiveCell.Offset(0, 1).Select
TextBox3 = ActiveCell
RemTambmse pode ut i l i zar est e cdi go par a l er a i nf or mao
das cl ul as ou que est emazul . A di f er ena que se at r i buam
os val or es s var i vei s e depoi s se descar r egamos Text Boxs.
ActiveCell.Offset(0, 1).Select
Endereo = Activecell
ActiveCell.Offset(0, 1).Select
Telefone = Activecell
TextBox2 = endereo
TextBox3 = Telefone
aoencontro:
RemAqu se esqui va o er r o
End Sub
O que lhe aparece incrvel como uma Macro combinada com Visual Basic
pode fazer at o impossvel
Bom j que temos elaborado um exerccio de consultas de dados, agora
acessaremos ao formulrio do Excel sem necesidade de entrar no Editor de Visual
Basic.
Para realizar este exerccio devemos permanecer dentro do Editor de Visual Basic
para poder introduzir o cdigo em um Mdulo, portanto devers seguir os seguintes
passos:
D um clique no menu Inserir e escolha a opo Mdulo
Escreva dentro do Mdulo o nome do mdulo em este caso Sub Entrada
Quando voc escrever Sub Entrada aparecer da seguinte manera:
Sub Ent r ada( )
Load User For m1
User For m1. Show
End Sub

Voc dever escrever as duas linhas que esto no meio que so:
Bertolo Lies de VBA do Excel 265


Load User For m1
User For m1. Show
A primeira linha significa que carregue na memria o formulrio que se chama
UserForm1, a segunda linha significa que o mostre, isto quer dizer que no mdulo
estamos escrevendo o cdigo de uma macro que permitir carregar o formulrio do
Excel sem necessidade de entrar no Editor de Visual Basic.
Veja se no Project Explorer aparece o Mdulo que criamos.
Bertolo Lio #07 Cdigo VBA do Excel para UserForms

266








Se quisermos voltar ao form UserForm1
Bom j est visto, agora salvamos do Editor de Visual Basic e voltemos ao Excel.
D um clique no menu Arquivo do Editor de Visual Basic
Escolha a opo Fechar e voltar ao Microsoft Excel
Agora que estamos no Excel, podemos inserir uma imagem, ou um boto, ou qualquer
grfico, por exemplo:
D um clique no menu Inserir
Escolha a opo Figura, seguido por Figura Do Arquivo
Inserir qualquer Figura e d a ela o tamanho que voc desejares.
D um clique no boto direito do mouse sobre a Figura
Escolha a opo Atribuir macro
D um clique na Macro que se chama Entrada, fcil, foi a nica que fizemos
De um clique em OK
D um clique fora da imagem em qualquer clula e dai se pressionar a imagen
carregar o formulrio.
COMO AGREGAR INFORMAO A UMA CAIXA DE COMBINAO E UMA
CAIXA DE LISTAGEM
Bem, comearemos com como agregar informao a uma Caixa de
Combinao (ComboBox) e a uma Caixa de listagem (ListBox).
Primeiramente devers criar o seguinte formulrio dentro de Visual Basic.
ulrio somente d um duplo clique em
Bertolo Lies de VBA do Excel


267


Insira um Caixa de Combinao Caixa de Listagem (Listbox)
e um Boto.

Agora que j criastes a interface, vamos programar ao boto, e veremos como se
lhe podem agregar informao por meio de cdigos a estes dois novos controles.
D um duplo clique no boto e escreva as seguintes linhas dentro do procedimento.

Pr i vat e Sub CommandBut t on1_Cl i ck( )
ComboBox1. AddI t em" J oo J os"
ComboBox1. AddI t em" Pedr o da Font e"
ComboBox1. AddI t em" Sal vador da Luz"
Li st Box1. AddI t em" J oo J os"
Li st Box1. AddI t em" Pedr o da Font e"
Li st Box1. AddI t em" Sal vador da Luz"
End Sub

Bem vamos analizar o significado destas linhas:
ComboBox1.AddItem "Joo Jos "
A opo AddItem significa que vais agregar um dado de texto, portanto se
entende como vais agregar a Joo Jos ao Combobox1, logo eu posso agregar os dados
que quiser a um Combobox ou a uma Listbox com a opo AddItem, ento ao se
pressionar o boto aparecero os dados que se encontram escritos e poders selecionar
qualquer um deles, lembre-se que a informao vai se agregar segundo tuas neces-
sidades.
Agora se desejares agregar nmeros a um Combobox ou ListBox escreva o
seguinte cdigo em um boto:
Pr i vat e Sub CommandBut t on1_Cl i ck( )
For X=1 t o 50
Li st box1. AddI t emst r ( x)
Next
End Sub

A instruco For-Next um ciclo contador que te permite contar de um nmero
at um outro. Por exemplo, digo-lhe que conte desde o 1 at 50 e o que se encontrar
dentro do ciclo For-Next, o executar o que estiver dentro o nmero de vezes, a X uma
varivel numrica em que se guarda o valor, cada vez que o ciclo d uma volta aumenta
um nmero, portanto X vai valer desde 1 at 50, e a instruo Str para converter o
Lembre-se de que do Excel se
utiliza a tecla ALT +F11 para
entrar no Visual Basic,
seguido do menu Inserir e
form, bem creio










a (Combox), uma
depois User
que j o sabes.
Bertolo Lio #07 Cdigo VBA do Excel para UserForms

268
valor numrico da X em valor de texto, j que a opo AddItem guarda somente texto,
claro esta que tambm pode funcionar sem esta instruo em alguns casos.
Portanto o Listbox1 vai guardar os nmero do 1 ao 50, sem necesidade de ires
pondo de um por um, imagine.
Li st box1. AddI t em1
Li st box1. AddI t em2
Li st box1. AddI t em3
J te quero ver no cdigo para que chegues ao 50, hahahahahahaha.
Bem, isto para se introduzir os dados a um ListBox e ComboBox, mas como
posso usar estes dados para envi-los para uma clula? No exemplo seguinte eu te
explico:
D um duplo clique na Listbox e escreva o seguinte cdigo:
Pr i vat e Sub Li st Box1_Cl i ck( )
Range( " A9" ) . Sel ect
Act i veCel l . For mul aR1C1 = Li st Box1
End Sub
Assim fcil, cada vez que escolher um dado que se encontre em um Listbox1
ele o enviar clula A9, escrevendo-o a. Se desejares, podes fazer em um Combobox,
somente trocando a Listbox1 por Combobox1 e se acabou.
Agora se desejares agregar os dados ao Listbox ou Combobox sem nenhum boto a
pressionar, escreva o seguinte cdigo:
Pr i vat e Sub User For m_Act i vat e( )
ComboBox1. AddI t em" J oo J ose"
ComboBox1. AddI t em" Pedr o da Font e"
ComboBox1. AddI t em" Sal vador da Luz"
Li st Box1. AddI t em" J oo J os"
Li st Box1. AddI t em" Pedr o da Font e"
Li st Box1. AddI t em" Sal vador da Luz
End Sub
A chave est no procedimento UserForm_Activate(), isto quer dizer que
quando se ativar o formulrio carregar o que tu o indicares, neste caso procures
introduzir os dados ao Listbox1 e Combobox1 automaticamente, veja o que te aparece.









Bertolo Lies de VBA do Excel 269


Agora se desejares tomar informao de uma clula e envi-la a um Combobox
ou Listbox escreva o seguinte cdigo num Boto:
Pr i vat e Sub CommandBut t on1_Cl i ck( )
Range( " A9" ) . Sel ect
Do Whi l e Act i veCel l <> Empt y
Act i veCel l . Of f set ( 1, 0) . Sel ect
Li st Box1. AddI t emAct i veCel l
Loop
End Sub
Percebestes bem, primeiramente movo ao range (clula) A9 porque a est o
incio de minha informao, depois a linha Do While Activecell<> Empty significa
Fazer enquanto as clulas no se encontrem vazias, a seguinte linha que
ActiveCell.Offset(1, 0).Select, significa abaixar uma Linha, a seguinte linha
ListBox1.AddItem ActiveCell, agrega a informao desta nova clula ao Listbox1 e a
linha Loop parte do ciclo Do While, ela sempre encera o ciclo, como o For-Next.
Portanto todos os nomes que estiverem depois de A9 sero enviados ao Listbox1 e
quando o ciclo topar com a clula A14 que se encontra vazia, a condio do Do While
parar a execuo de seu cdigo. Isto funciona caminhando linhas abaixo, mas se
desejares mover direita, por colunas, somente trocar a linha ActiveCell.Offset( 1,
0).Select, por ActiveCell.Offset( 0, 1).Select, quer dizer que se mova por coluna, no
por linha.
ActiveCell.Offset( Range, Column).Select .
Se se troca o 1 por outro nmero se mover o numero de vezes que tu indicar,
por exemplo, se quero baixar 10 linhas num golpe:
Acti veCell.Offset(10, 0).Select
Se quiser mover-me 20 colunas direita
Acti veCell.Offset(0, 20).Select
Assim funciona isto.
COMO SE EXECUTA UMA MACRO NA HORA DE ABRIR UMA PASTA
Agora veremos como se executa uma macro na hora de abrir uma pasta
Primeiramente insira um Mdulo do menu Inserir dentro do Visual Basic e escreva o
seguinte cdigo:
Sub Aut o_open( )
Load User For m1
User For m1. Show
End Sub
A magia est no procedimento Auto_open() que permite executar automatica-
mente o que se encontrar dentro, quando abrires uma pasta que contenha este cdigo,
neste exemplo quando se abre o pasta deve-se ativar o formulrio 1 que programamos.
Assim tudo o que agregares dentro deste procedimento se executar automaticamente
quando abrires uma pasta, o que achas?.
A seguir veremos como ordenar uma informao por ordem alfabtica
ascendente, um cdigo muito completo e bom que te permite localizar os dados e
orden-los, sem passar uma linha em branco.
Observemos o seguinte exemplo e aprendamos dele:
Percebe-se na janela seguinte que tenho dados em uma folha que comea na
linha A10 e termina na C16, o seguinte cdigo detectar donde se deve parar para poder
Bertolo Lio #07 Cdigo VBA do Excel para UserForms

270
ordenar os dados. necessrio criar o cdigo para ordenar dados, mas aqu eu te
mostro:












Programar isto num boto1
Pr i vat e Sub CommandBut t on1_Cl i ck( )
Remest e cdi go l ocal i za o l t i mo r egi st r o por mei o da r egi o
Range( " A10" ) . Sel ect
Do Whi l e Act i veCel l <> Empt y
Act i veCel l . Of f set ( 1, 0) . Sel ect
Loop
Remchega at o A17 donde no h i nf or mao e se vol t e uma
r egi o par a ser exat o coma segui nt e l i nha.
Act i veCel l . Of f set ( - 1, 0) . Sel ect
Remest e cdi go l ocal i za a l t i ma col una do l t i mo dado
Do Whi l e Act i veCel l <> Empt y
Act i veCel l . Of f set ( 0, 1) . Sel ect
Loop
Act i veCel l . Of f set ( 0, - 1) . Sel ect
Remest a l i nha guar da a var i vel cl ul aat i va na cl ul a exat a
donde est o l t i mo dado da l t i ma col una de i nf or mao, nest e
caso C16.
cl ul aat i va = Act i veCel l . Addr ess

Bertolo Lies de VBA do Excel 271


Remest e cdi go t oma o r ange desde A10 donde comea a
i nf or mao, at onde encont r ou o l t i mo dado C16, que o guar dar
var i vel cl ul aat i va. Sel eci ona de A10 at C16.
Range( " A10: " + cl ul aat i va) . Sel ect
Remest e cdi go or dena os dados nor den ascendent e, o cdi go f oi
ger ado emExcel , assi mque se no sabes ger - l o apenas copi e- o
daqui .
Sel ect i on. Sor t Key1: =Range( " A10" ) , Or der 1: =xl Ascendi ng,
Header : =xl Guess, _
Or der Cust om: =1, Mat chCase: =Fal se, Or i ent at i on: =xl TopToBot t om
End Sub
Assim como funciona este cdigo de Macros do Excel ordenando exatamente
desde A10 at onde esto os dados finais.
Bem, agora para converter a informao a Minscula ou Maiscula, o cdigo
muito parecido, somente observ-lo:
Pr i vat e Sub CommandButton2_Click()
Range( " A10" ) . Sel ect
Do Whi l e Act i veCel l <> Empt y
Act i veCel l . For mul aR1C1 = LCase( Act i veCel l )
Act i veCel l . Of f set ( 1, 0) . Sel ect
Loop
End Sub
Bertolo Lio #07 Cdigo VBA do Excel para UserForms

272
Assim a magia de Lcase que converte Minsculas e Ucase Maisculas,
comea em A10 e at que no encontra dados deixa de converter a Minsculas.
O seguinte Formulrio e cdigo mostrar fora de como se pode consultar e
modificar o dado que se encontrou.





Crie a seguinte Interface, 4 Rtulos, 3 Caixas de Textos (Textbox) e 3 Botes
No Rtulo 4, escreva o nmero 9 dentro dele.
Copie o seguinte cdigo:
Pr i vat e Sub CommandBut t on1_Cl i ck( )
Remno se escr eva nada nos Text boxs na hor a de i nser i r escr eva
No Tem
I f Text Box1 = Empt yThenRange( " A9" ) . For mul aR1C1 = " No t em"

Bertolo Lies de VBA do Excel 273


I f Text Box2 = Empt yThenRange( " B9" ) . For mul aR1C1 = " No t em"
I f Text Box3 = Empt yThenRange( " C9" ) . For mul aR1C1 = " No t em"
Range( " A9" ) . Sel ect
Sel ect i on. Ent i r eRow. I nser t
Text Box1 = Empt y
Text Box2 = Empt y
Text Box3 = Empt y
Text Box1. Set Focus
End Sub
Pr i vat e Sub CommandBut t on2_Cl i ck( )
On Er r or GoTo noencont r o
RemCdi go par a buscar , j o conhecemos
Cel l s. Fi nd( What : =Text Box1, Af t er : =Act i veCel l ,
LookI n: =xl For mul as, LookAt _
: =xl Par t , Sear chOr der : =xl ByRows, Sear chDi r ect i on: =xl Next ,
Mat chCase: = _
Fal se) . Act i vat e
Act i veCel l . Of f set ( 0, 1) . Sel ect
Text Box2 = Act i veCel l
Act i veCel l . Of f set ( 0, 1) . Sel ect
Text Box3 = Act i veCel l
Remo r t ul o 4 t oma o val or da r egi o at i va e per mi t e modi f i car
a i nf or mao que encont r ou, j que modi f i ques a i nf or mao
pr essi onas o bot o at ual i zar .
Label 4 = Act i veCel l . Row
noencont r o:
End Sub
Pr i vat e Sub CommandBut t on3_Cl i ck( )
RemVol t e a i ndi car a r egi o 9 par a escr ever nos Text boxs
Label 4 = " 9"
Range( " a9" ) . Sel ect
Text Box1 = Empt y
Text Box2 = Empt y
Text Box3 = Empt y
Text Box1. Set Focus
End Sub
Pr i vat e Sub Text Box1_Change( )
Remse nos damos cont a o r t ul o 4 ser ve par a l evar r egi o donde
i nt r oduzi mos os dados os modi f i camos, assi mque cada t ext box que
pr ogr amemos deve l evar est as l i nhas.
Range( " A" + Label 4) . For mul aR1C1 = Text Box1
End Sub

Pr i vat e Sub Text Box2_Change( )
Range( " B" + Label 4) . For mul aR1C1 = Text Box2
End Sub
Pr i vat e Sub Text Box3_Change( )
Range( " C" + Label 4) . For mul aR1C1 = Text Box3
End Sub

Bertolo Lio #07 Cdigo VBA do Excel para UserForms 274


MDULOS DE CDIGOS DE USERFORM
Quando voc der um duplo clique num objeto sobre um userform, o VB editor
atibuir automaticamente uma macro para o objeto, e criar o que chamado um m-
dulo de cdigo que contm as macros atribuidas para aqueles objetos do userform. Este
mdulo de cdigo no est mostrado na janela do Explorer. Voc pode acessar o mdulo
de cdigo por um duplo clique num objeto sobre o userform, d um clique com o boto
direito do mouse sobre o userform ou em um objeto sobre ele e selecione ver cdigo, ou
d um clique com o boto direito do mouse sobre o userform mostrado na janela de
projeto e selecione ver cdigo. Para retornar ao userform, d um clique com o boto
direito do mouse sobre a janela de cdigo e selecione ocultar. Voc pode tambm
alternar para trs e para frente selecionando o menu Exibir e selecionando ou o Cdigo
ou o Objeto.
Por favor note que embora voc possa criar variveis pblicas dentro um mdulo
de cdigo de userform, estas variveis pblicas no esto disponveis para os outros
mdulos. Para uma varivel pblica ficar disponvel a outras macros e mdulos, elas
devem ser criadas num mdulo normal.
PONTOS PRINCIPAIS SOBRE USERFORMS E BOTES
A seo anterior ilustra os seguintes pontos principais:
Para ver previamente um form, v folha de userform e pressione a tecla F5
O mtodo Show quando usado com um userform no retorna True ou False como
faz com uma folha de dilogo. Se voc tiver tentado a seguinte declarao,

bResponse = user f or m1. Show

A declarao ter sido destacada como contendo um erro de sintaxe desde que um
userform no retorna com um valor.
As macros atribuidas a um boto so armazenadas em separado daquelas macros
que voc criou para os seus mdulos.
Voc no pode atribuir macros a botes; por outro lado o VB editor faz isto para
voc, e dita o nome que ser usado. Se voc mudar o nome do boto, ento a macro
atribuida anteriormente no mais atribuida ao boto.
Voc poder minimizar o cdigo nas macros atribuidas aos botes e objetos. O que
voc dever fazer usar uma varivel global, tal como bResponse na seo acima,
para armazenar a resposta do usurio. Da ento, quando o controle retornar da
chamada da macro, aquela macro determina que ao dever ser tomada.

Um userform mostrado usando o mtodo Show. Entretanto, ela liberada usando
o comando Unload. Note que Show est presa ao nome do userform com um ponto,
e que Unload uma palavra solitria, com o nome userform seguindo-a (o que segue
assume o userform ser chamado de "userform1":

user f or m1. Show
' decl ar aes que obt mi nf or maes do userform
Unl oad user f or m1

Bertolo Lies de VBA do Excel


275
Se voc fosse usar a declarao userform1.Hide, isto ocultaria o dilogo, mas no
remova-o (unload) da memria. Se sua macro posta em ao como um resultado
de selees sobre o userform, ento voc poder usar Hide ao invs de Unload. Isto
discutido mais tarde neste captulo.
USANDO FRAMES NUM USERFORM
Um frame sobre um userform usado para agrupar botes de opes, de modo
que somente um boto num grupo possa ser selecionado. E tambm usado para
fornecer alguma ordem ao userform, enquadrando objetos relacionados no userform.
Se voc colocar um frame num userform aps voc ter colocado outros objetos,
o frame fica na frente, e ele oculta os outros objetos. O modo mais fcil para ocultar os
objetos visveis arrast-los para fora da rea do frame, e ento voltar completamente
sobre o frame. Se somente parte do item est no frame, ento somente a no coberta
visvel. Mudar o frame de lugar freqentemente exigido para se ver os objetos
ocultos.
USANDO BOTES DE OPES NUM USERFORM
Para ilustrar os botes de opo num userform, expanda o userform criado
anteriormente para ter trs botes de opes:













Os Botes de Opo podem ter um valor True ou um valor False. Sabendo isto,
o que segue a verso modificada da macro Show_Meu_UserForm que ilustra o uso
dos botes de opes:

Sub Show_Meu_User _For m( )
' def i na os val or es i ni ci ai s do bot o de opo
User For m1. Opt i onBut t on1. Val ue = Tr ue
User For m1. Show
I f Not bResponse Then End
' det er mi na qual bot o f oi sel eci onado
Wi t h User For m1
Sel ect Case Tr ue
Case . Opt i onBut t on1. Val ue:
MsgBox " Bot o 1 sel eci onado "
Case . Opt i onBut t on2. Val ue:
MsgBox " Bot o 2 sel eci onado "
Bertolo Lio #07 Cdigo VBA do Excel para UserForms

276
Case . Opt i onBut t on3. Val ue:
MsgBox " Bot o 3 sel eci onado"
End Sel ect
End Wi t h
Unl oad User For m1
End Sub

Pontos chaves no uso dos botes de opo:
A macro sabe quais botes de opes esto sendo questionados pois eles so
qualificados com o objeto chamado UserForm1. A declarao With...End With
usada para minimizar a digitao e tornar o cdigo mais eficiente vs. qualidade de
cada boto de opo com "UserForm1".

O valor inicial de um dos botes de opo configurado pela macro. Isto uma
boa tcnica de programao.
Numa aplicao real, voc pode mudar o texto do boto de opo, sua fonte, seu
nome, e quaisquer de suas outras propriedades.
USANDO CAIXAS DE LISTAGEM (LISTBOXES) NOS USERFORMS
Uma caixa de listagem (listbox) uma grande maneira de mostrar uma lista
de seleo a um usurio que ter de selecionar um ou mais itens da lista. Se a um
usurio permitido pegar somente um dos itens de uma listbox, ento voc pode obter o
texto e a posio na listbox do item selecionado (menos um quando o primeiro item for
0, o segundo 1, etc.) usando o cdigo como o que segue:

Di ml i st Text As St r i ng
Di ml i st Number As I nt eger
I f User For m1. Li st Box1. Li st I ndex = 1 Then
MsgBox " Nenhuma sel eo f oi f ei t a"
El se
l i st Text = User For m1. Li st Box1. Val ue & " sel eci onado"
l i st Number = User For m1. Li st Box1. Li st I ndex
MsgBox l i st Number & " " & l i st Text
End I f

Se a um usurio for permitido pegar mltiplas selees numa lista (configure-as
mudando a propriedade MultiSelect da listbox), da o que segue como voc retornaria
os itens selecionados e suas posies na caixa de listagem:

Di ml i st Text As St r i ng
Di ml i st Number As I nt eger
Di mI As I nt eger
User For m1. Show
Wi t h User For m1. Li st Box1
For I = 0 To Li st Count 1
I f . Sel ect ed( I ) Then
l i st Text = . Li st ( I )
l i st Number = I
MsgBox l i st Number & " " & l i st Text
Bertolo Lies de VBA do Excel 277


End I f
Next
End Wi t h
Unl oad User For m1

Existem vrias maneiras para especificar a lista-fonte a uma listbox:
Selecione a caixa de listagem no Visual Basic editor e mostre a janela de
propriedades. Da ento configure a propriedade RowSource para referir a um range
na pasta contendo o userform. Se voc estivesse especificando a linha fonte numa
pasta diferente, ento voc teria de estabelecer um link para aquela pasta, o que pode
ser bastante irritante. Tambm muito difcil especificar um range manualmente.
Voc precisa digitar nas declaraes como "'Plan1'!A1:A12".
Especificar um range numa planilha como lista usando a declarao no seu cdigo.
Por exemplo:


User For m1. Li st Box1. RowSour ce = " ' Pl an1' ! A1: A12"

Ou

User For m1. Li st Box1. RowSour ce = Sel ect i on. Addr ess( Ext er nal : =
Tr ue)

A segunda abordagem bem mais fcil e engloba que os nomes da planilha e da
pasta estejam incluidos na string endereo passada a RowSource. Tambm, voc pode
usar qualquer range, ele no tem de ser selecionado.
Se voc quiser fornecer a RowSource manualmente na janela de propriedades, o
modo mais fcil usar um nome do range para especificar a lista. Este modo, voc
pode mudar o range e no precisa modificar o RowSource. Por favor note que voc
no pode deletar um item de uma lista se ela est configurada por uma referncia a
um range. Voc precisar mudar os contedos do range e ento especificar a
propriedade RowSource se ela est no estilo A1.
Se voc especificar a propriedade RowSource e configurar a propriedade
ColumnHeads para True, a linha imediatamente acima da RowSouce torna-se uma
linha de ttulo na caixa de listagem.
Voc pode especificar uma propriedade RowSource que a largura das colunas
mltiplas. Se voc fizer isto, voc tambm precisar especificar o nmero de
colunas na propriedade ColumnCount. E, voc pode mudar o tamanho das colunas
que so mostradas digitando nelas nmeros seguidos por uma virgula na
propriedade ColumnWidths. A propriedade BoundColumns especifica o valor
coluna que retornado para uma seleo de lista. Por exemplo, voc pode mostrar
apenas uma coluna, mas ter outros valores de colunas retornados pela seleo da
lista. Para mais ajuda em como estas propriedades funcionam, selecione qualquer
uma destas propriedades e pressione a tecla F1.
Use o mtodo Additem na sua macro:

Wi t h User For m1. Li st Box1
. AddI t em( " J an" )
Bertolo Lio #07 Cdigo VBA do Excel para UserForms 278

. AddI t em( " Fev" )
. AddI t em( " Mar " )
End Wi t h

Crie um array, e da especifique que o array para a lista:

Di mMeuAr r ay( 1 To 3)

Se voc usar a abordagem array, este pode ser um array uni ou bidimensional.
Se for um array unidimensional, o resultado uma simples lista. Se for um array
bidimensional, o primeiro elemento do array determina o nmero de linhas. O segundo
elemento do array determina o nmero de colunas. Por favor note que ele est numa
aparncia somente; voc pode somente selecionar linhas inteiras na lista.
Voc pode se quiser especificar manualmente o range lista quando criar uma
caixa de listagem. Voc dever fazer isto primeiro selecionando a caixa de listagem e e
da mostrando a janela de propriedades. Selecione a propriedade RowSource e digite no
endereo do range. O endereo poder identificar folha e a pasta. Entretanto, se voc
mais tarde mudar o nome da pasta ou da planilha, a entrada manual no atualizada, e a
lista no ser atualizada.
Por favor note que voc poderia limpar a caixa de listagem antes de voc
preench-la. Por outro lado, a lista anterior pode ser retida e a nova lista adicionada
antiga. O mtodo Clear limpa um userform. Por exemplo, UserForm1.ListBox1.Clear
Para determinar o nmero de items in a caixa de listagem, use a propriedade
ListCount. Para determinar o nmero do item selecionado numa caixa de listagem, use a
propriedade ListIndex. E para determinar o texto do que foi selecionado, use a
propriedade Value. ENTRETANTO, voc deve obter os valores do dilogo antes de
voc remov-lo da memria. Se voc no fizer, voc obter a seguinte mensagem de
erro quando voc tentar obter um valor do userform:

MeuAr r ay( 1) = " J an"
MeuAr r ay( 2) = " Fev"
MeuAr r ay( 3) = " Mar "
User For m1. Li st Box1. Li st ( ) = MeuAr r ay

Portanto, voc poder primeiro liberar o dilogo com um boto que usa a propriedade
Hide. Da ento, depois de voc ter obtido os valores do dilogo, use a propriedade
Bertolo Lies de VBA do Excel


279
Unload para remover o dilogo da memria. O que segue ilustra isto, usando o seguinte
userform:















Neste dilogo as macros seguintes so atribuidas aos botes OK e Cancelar.
Note que o boto OK agora usa o mtodo Hide, no o mtodo Unload.

Pr i vat e Sub Bot o_Cancel ar _Cl i ck( )
bResponse = Fal se
Unl oad User For m1
End Sub

Pr i vat e Sub Bot o_OK_Cl i ck( )
bResponse = Tr ue
User For m1. Hi de
End Sub

O que segue a macro que preenche a caixa de listagem e da mostra os valores
selecionados pelo usurio. Por favor note que o valor ListIndex 1 se nada for
selecionado, 0 se o primeiro item selecionado e o nmero de items menos um se o
ltimo item for selecionado

Publ i c bResponse As Bool ean
' a decl ar o aci ma deve est ar no t opo do mdul o
Sub User _For m_Demo1( )
' l i mpar e pr eencher a cai xa de l i st agem
User For m1. Li st Box1. Cl ear
Wi t h User For m1. Li st Box1
. AddI t em( " J an" )
. AddI t em( " Fev" )
. AddI t em( " Mar " )
. AddI t em( " Abr " )
. AddI t em( " Mai " )
. AddI t em( " J un" )
. AddI t em( " J ul " )
. AddI t em( " Ago" )
Bertolo Lio #07 Cdigo VBA do Excel para UserForms 280

. AddI t em( " Set " )
. AddI t em( " Out " )
. AddI t em( " Nov" )
. AddI t em( " Dez" )
' most r ar o userform
User For m1. Show
' det er mi ne se OK f oi sel eci onado
I f Not bResponse Then
MsgBox " cancel ar sel eci onado"
Exi t Sub
End I f
' conf i r mar que aquel a sel eo f oi f ei t a
I f . Li st I ndex = 1 Then
MsgBox " Nenhuma sel eo f ei t a"
Exi t Sub
End I f
' most r ar o nmer o e o t ext o da sel eo
MsgBox " Nmer o do i t emsel eci onado na l i st a: " & _
. Li st I ndex + 1
MsgBox " t ext o do i t emsel eci onado: " & . Val ue
End Wi t h
Unl oad User For m1
End Sub

Se a propriedade MultiSelect da caixa de lista configurada para ou Multi ou
Extended, ento mltiplos itens podem ser selecionados na lista. Entretanto, quando isto
feito, ento se deve usar a propriedade Selected (nmero) para ver se um item da lista
foi selecionado. E, dai a Lista (nmero) para retornar a descrio do item. O que segue
ilustra isto.

Publ i c bResponse As Bool ean
' Se est e exempl o f or copi ado par a a mesma past a, decl ar e
' a var i vel bResponse soment e uma vez, no t opo do mdul o
Sub User _For m_Demo2( )
Di mI As I nt eger
Di mbSel ect i onMade As Bool ean
' l i mpe e pr eencha a cai xa de l i st agem
User For m1. Li st Box1. Cl ear
Wi t h User For m1. Li st Box1
. AddI t em( " J an" )
. AddI t em( " Fev" )
. AddI t em( " Mar " )
. AddI t em( " Abr " )
. AddI t em( " Mai " )
. AddI t em( " J un" )
. AddI t em( " J ul " )
. AddI t em( " Ago" )
. AddI t em( " Set " )
. AddI t em( " Out " )
. AddI t em( " Nov" )
. AddI t em( " Dez" )
Bertolo Lies de VBA do Excel


281
' most r ar o userform
User For m1. Show
' det er mi na se OK f oi sel eci onado
I f Not bResponse Then
MsgBox " cancel ar sel eci onado"
Exi t Sub
End I f
' r et or na o nmer o t ot al de i t ens na cai xa de l i st agem
MsgBox . Li st Count
' most r a o i t emsel eci onado
For I = 0 To . Li st Count 1
I f . Sel ect ed( I ) Then MsgBox . Li st ( I )
bSel ect i onMade = Tr ue
Next
End Wi t h
' r emove o userform da memr i a
Unl oad User For m1
i f Not bSel ect i onMade Then
MsgBox " Nenhuma sel eo f oi f ei t a"
Exi t Sub
End I f
End Sub
ADICIONANDO RTULOS (TEXTO) NUM USER FORM
Para adicionar texto a um userform muito simples: apenas clique no boto
Rtulo (Label) (o boto " ") na barra de ferramentas Caixa de ferramentas, desenhe
uma caixa do tamanho que voc precisar, e digite o texto. Se voc tiver a caixa de rtulo
selecionada, voc pode mostrar a caixa de propriedades e mudar as propriedades. Por
exemplo, voc pode mudar o tamanho e cor da fonte, a cor de background e muitas
outras propriedades. A melhor maneira para aprender mais acerca de adicionar rtulos
tentar as diferentes propriedades no userform teste. Rtulos nos userforms so
tipicamente entradas de texto que do direes ao usurio. Voc pode ter o texto
empacotado na caixa de rtulo, e voc pode especificar a fonte a ser usada no rtulo.
O que segue so algumas das principais propriedades de uma caixa de rtulo:

Caption - O texto que entrado na caixa. Este pode ser configurado quando voc criar
manualmente a caixa de edio, ou pode ser mudado interativamente:

User For m1. Label 1. Capt i on = " 123"

Se a mudana for feita por uma macro, o ttulo (caption) ou texto que aparece no
userform no VB editor no muda. Entretanto, o texto do rtulo que est mostrado
aquele especificado pela macro.

WordWrap - Permite empacotar palavras na caixa de texto

Visible - Permite o rtulo ocultar se configurado para False, mostrado se configurado
para True.
Bertolo Lio #07 Cdigo VBA do Excel para UserForms

282
USANDO CAIXAS DE TEXTO (TEXT BOXES) NOS USERFORMS
Uma caixa de texto (text box) um modo rpido e fcil de se obter as entradas
do usurio. O que segue ilustra uma caixa de texto onde o usurio deve entrar com um
nmero vlido, que neste caso definido como um nmero entre um e dez. Se o usurio
no entrar com um nmero vlido, ento uma mensagem dizendo que a entrada no foi
vlida mostrada e da ento o dilogo reapresentado.
O userform se parece com isto. A caixa de texto (textbox) foi adicionada usando
o boto caixa de texto da barra de ferramentas Caixa de ferramentas (ele o boto que
se parece com " ").










Os dois botes foram chamados de Boto_OK e Boto_Cancelar, e a eles foram
atribudos as seguintes macros:

Pr i vat e Sub Bot o_Cancel ar _Cl i ck( )
Unl oad User For m1
End
End Sub

Pr i vat e Sub Bot o_OK_Cl i ck( )
User For m1. Hi de
End Sub

O que segue a macro principal que mostra o dilogo userform e valida a
entrada.

Sub Obt er _Ent r ada_Usuar i o( )
Di ment r adaUsuar i o As Long
' Li mpar a cai xa de t ext o ant es de most r ar pel a pr i mei r a vez
User For m1. Text Box1. Val ue = " "
Do
User For m1. Show
ent r adaUsuar i o = Val ( User For m1. Text Box1. Val ue)
' uma ent r ada embr anco t or na- se umval or zer o
I f ent r adaUsuar i o > 0 And ent r adaUsuar i o <= 10 _
Then Exi t Do
MsgBox " O val or que voc ent r ou no est ava " & _
" ent r e 0 e 10. "
Loop
Unl oad User For m1
MsgBox ent r adaUsuar i o & " f oi ent r ado. "
Bertolo Lies de VBA do Excel


283
End Sub

Como quase todos os objetos userform que se pode usar, existe um tremendo
nmero de propriedades para uma caixa de texto. Par mostrar as propriedades, clique no
boto janela de propriedades da barra de ferramentas Padro do Microsoft Visual
Basic, ou selecione Exibir, J anela Propriedades, ou pressione F4. Para ver a
informao de uma dada propriedade, clique na propriedade e dai pressione o boto F1.
As vrias propriedades principais que so teis so:

Value A entrada feita na caixa
Multiline Permite linhas mltiplas de dados serem entradas.
Scrollbars Mostra barras de rolamento se so feitas entradas longas.
PassWordChar Especifica o uso de placeholders em vez de entradas reais quando
um password est sendo entrado.
Visible Mostra ou oculta a caixa. til se voc somente quiser editar a
caixa para aparecer se outras condies so encontradas.
Font Pemite-lhe especificar o tamanho e a fonte a serem usadas.

A maioria das propriedades de uma caixa de edio de texto destinada a serem
configuradas quando voc est desenvolvendo a caixa de edio de texto e permanecem
com aquelas configuraes. Algumas, tais como as propriedades Value e Visible so
destinadas a serem configuradas interativamente pelo seu cdigo.
COMBO EDIT NO USERFORM, CAIXAS DE LISTAGENS DROP DOWN
O que segue ilustra o preenchimento de uma caixa de combinao , lista
dropdown com os meses do ano e da ento determina o que foi selecionado:

Sub combo_box_demo( )
' l i mpa os cont edos da combobox
User For m2. ComboBox1. Cl ear
' pr eenche a cai xa de umr ange de uma pl ani l ha
User For m2. ComboBox1. RowSour ce = _
Thi sWor kbook. Sheet s( " pl an1" ) _
. Range( " a1: a12" ) . Addr ess( ext er nal : =Tr ue)
' most r a o userform
User For m2. Show
' most r a a ent r ada de usur i o ou a sel eo
Wi t h User For m2. ComboBox1
MsgBox " i t emnmer o " & . Li st I ndex & " sel eci onado. " & _
" El e " & . Text
End Wi t h
End Sub

Se o valor da ListIndex 1, ento isto indica que o usurio fez uma entrada na
caixa de texto ao contrrio de pegar um valor da lista. Tambm, a ListIndex comea no
zero para o primeiro item na lista, no um.
A lista numa caixa de combinao drop down exatamente como uma caixa de
listagem regular. Isto significa que voc pode usar arrays para atribuir valores lista, e
o array pode ser bidimensional.
Bertolo Lio #07 Cdigo VBA do Excel para UserForms

284
BOTES DE ALTERNNCIA E CAIXAS DE VERIFICAO DE USERFORM
Quando um boto de alternncia for clicado, ele alterna de selecionado
(aparncia pressionado) para no selecionado (aparncia de boto normal). Ele, como
uma CheckBox, tem um valor ou True ou False. Para configurar o valor inicial destes
objetos numa macro, especifique o userform, o nome do controle, e o valor a ser usado.
Por exemplo:

User For m1. Toggl eBut t on1. Val ue = Tr ue
User For m1. CheckBox1. Val ue = Fal se

Para determinar o valor do boto alternncia, pea seu valor antes de descarregar
o userform.
BARRAS DE ROLAMENTO (SCROLLBARS) E BOTO DE ROTAO
(SPINNERS) NO USERFORMS
O melhor modo de mostrar como as Barras de rolamento (Scrollbars) e
Boto de rotao (Spinners) funcionam por meio de um exemplo. O userform
seguinte contm um rtulo, um boto de rotao, uma barra de rolamento, e um boto
de comando.












Neste exemplo, quando voc usar ou o boto de rotao ou a barra de
rolamento, o valor na caixa de texto (textbox) muda. Limites tm sido impostos de
modo que o valor fique limitado entre 0 e 100. As propriedades seguintes da barra de
rolamento foram configuradas manualmente selecionando a barra de rolamento e
mostrando a janela de propriedades :

Pr opr i edade val or
Lar geChange 10
Mi n 0
Max 100

Configurando estas propriedades manualmente reduz a necessidade de se fazer
via cdigo.
O que segue o cdigo que foi colocado num mdulo regular:

' Decl ar ar no t opo do mdul o. Usado pel o cdi go userform
Bertolo Lies de VBA do Excel


285
Publ i c spi nVal ue As I nt eger
Sub Scr ol l AndSpi nner Demo( )
' Descar r ega o f or mapenas no caso da macr o cr ashed ant er i or ment e
' e el a no f or a descar r egada
UnLoad User f or m1
' I ni ci al i za a var i vel pbl i ca, a bar r a de r ol ament o, e o r t ul o
spi nVal ue = 50
User For m1. Scr ol l Bar 1. Val ue = spi nVal ue
User For m1. Label 1. Capt i on = spi nVal ue
' Most r a o f or m, e da descar r ega quando o cont r ol e r et or nar
' macr o
User For m1. Show
Unl oad User For m1
End Sub

O cdigo seguinte foi colocado no mdulo de cdigo do userform (acessvel por
um duplo clique sobre o userform). Clicando no boto de comando apenas fecha o form.
Clicando nas setas para cima ou para baixo do boto de rotao, aumenta-se ou
diminui-se os valores da spinValue. E, ento o rtulo alterado e o valor da barra de
rolamento alterado. Mudando a barra de rolamento, clicando ou na rea de rolamento,
sobre as setas para cima ou para baixo, ou arrastando a barra de posio muda o valor da
spinValue e tambm altera o rtulo.

Pr i vat e Sub CommandBut t on1_Cl i ck( )
Me. Hi de
End Sub

Pr i vat e Sub Scr ol l Bar 1_Change( )
' Tr at a de cl i car na bar r a ou t opo ou f undo
spi nVal ue = Scr ol l Bar 1. Val ue
Me. Label 1. Capt i on = spi nVal ue
End Sub

Pr i vat e Sub Scr ol l Bar 1_Scr ol l ( )
' Tr at a de mover a bar r a de r ol ament o por si s
spi nVal ue = Me. Scr ol l Bar 1. Val ue
Me. Label 1. Capt i on = spi nVal ue
End Sub

Pr i vat e Sub Spi nBut t on1_Spi nDown( )
' Tr at a de cl i car par t e de bai xo do bot o de r ot ao
spi nVal ue = spi nVal ue - 1
I f spi nVal ue < 0 Then spi nVal ue = 0
Me. Scr ol l Bar 1. Val ue = spi nVal ue
Me. Label 1. Capt i on = spi nVal ue
End Sub

Pr i vat e Sub Spi nBut t on1_Spi nUp( )
' t r at a de cl i car na par t e super i or do bot o de r ot ao
spi nVal ue = spi nVal ue + 1
I f spi nVal ue > 100 Then spi nVal ue = 100
Bertolo Lio #07 Cdigo VBA do Excel para UserForms 286

Me. Scr ol l Bar 1. Val ue = spi nVal ue
Me. Label 1. Capt i on = spi nVal ue
End Sub
USANDO UMA CAIXA REFEDIT NUM USERFORM
Uma caixa RefEdit usada para permitir o usurio especificar um range.
Entretanto, voc no pode selecionar J anela e mudar de uma janela para outra o
usurio deve usar a tecla CTL+Tab para se mover de uma pasta a outra. Para superar
esta limitao, adicione uma caixa de listagem (listbox) no seu userform que permita o
usurio ativar qualquer pasta. O que segue mostra como fazer isto:

Sub Exampl eWBRangeSel ect i on( )
Di mwb As Wor kbook
For Each wb I n Wor kbooks
User For m1. Li st Box1. AddI t emwb. Name
Next
User For m1. Show
Unl oad User For m1
End Sub

No mdulo cdigo para o form, coloque o seguinte cdigo, que limpa a caixa
refedit quando uma pasta for selecionada.

Pr i vat e Sub Li st Box1_Change( )
Wor kbooks( Me. Li st Box1. Val ue) . Act i vat e
Me. Ref Edi t 1. Text = " "
Me. Ref Edi t 1. Set Focus
End Sub

O cdigo seguinte ilustra como configurar o valor de uma caixa RefEdit, e como
perguntar seu valor. Por favor note que Application.ScreenUpdating deve ser configura-
do para True para o usurio selecionar um range.

Sub Ref Edi t _Demo( )
' def i ne a r ef er nci a i ni ci al na Ref Cai xa de edi o
User For m1. Ref Edi t 1. Val ue = Sel ect i on. Addr ess
' most r a o userform cont endo a Ref Cai xa de edi o
User For m1. Show
' most r a a sel eo do usur i o
MsgBox User For m1. Ref Edi t 1. Text
' Def i ne umobj et o par a se r ef er i r ent r ada do userform:
di manyR As Range
' o que segue assume que o usur i o f ez uma sel eo
Set anyR = Range( User For m1. Ref Edi t 1. Text )
anyR. Sel ect
' Remova o User f or msoment e aps a i nf or mao ser ar mazenada
' pel o l t i mo usur i o.
Unl oad User For m1
End Sub

Bertolo Lies de VBA do Excel 287


Por favor note que voc precisar de um boto de comando no seu userform que oculte
o userform.
CRIANDO UM USERFORM MULTI-PGINA
O que segue ilustra um userform com um controle Multi-pgina nele:











Voc cria um dilogo Multi-pgina criando um userform, clicando num boto
Multi-pgina na Caixa de Ferramentas, e da desenhando-o no userform. Da voc pode
adicionar objetos a cada uma das pginas. Voc pode tambm ter mais do que duas
pginas num userform Multi-pgina. O truque para adicionar uma nova pgina
primeiro clicar na pgina, e da ento dar um clique com o boto direito do mouse na
guia da pgina. Isto faz com que o dilogo seguinte aparea:







Se voc no clicar na guia, um popup diferente aparecer. Use o item de menu
Nova pgina no popup acima para adicionar uma nova pgina. Voc pode tambm usar
as opes deste popup para deletar, renomear, ou mover uma pgina. Finalmente, um
objeto Multi-pgina no precisa incluir o dilogo todo. Voc pode coloc-lo em apenas
uma parte do dilogo se voc quiser.
USANDO UMA GUIA STRIP NUM USERFORM
A guia nua est essencialmente na parte superior de um objeto multipginas.
Basicamente, voc tem um conjunto de objetos, tais como caixas de listagens
(ListBoxes) e botes de opo no seu userform. Quando voc clicar sobre uma dada
guia da guia strip, a macro atribuida a strip determina qual guia est ativa agora, e ativa
as propriedades dos objetos do userform. Por exemplo, voc pode ativar quatro guias e
atribuir a cada uma delas uma regio diferente de um pas. Clicando numa guia altera a
caixa de listagem (listbox) contendo os clientes daquela regio.
Para adicionar guias adicionais guia nua ligeiramente manhoso. Voc deve
clicar uma vez na guia nua, esperar cerca de um segundo, e clicar novamente. Se bem
sucedido, a banda de seleo ao redor da guia nua fica mais escura. Da ento, d um

Bertolo Lio #07 Cdigo VBA do Excel para UserForms

288
clique com o boto direito na guia nua, e um popup como aquele para um objeto Multi-
pgina aparece.
O cdigo seguinte ilustra uma macro que poderia ser atribuida guia strip para
fazer a ao de atualizar a informao sobre uma userform quando uma guia for
selecionada:

Pr i vat e Sub TabSt r i p1_Change( )
User For m2. Label 1. Capt i on = _
End Sub

O cdigo acima muda o rtulo num ero da guia
selecionada. Voc pode tambm escrever o cdigo no lugar de mudar qualquer objeto
userform e seu contedo. Por favor note que a primeira guia 0, a segunda 1, e assim
por diante. Tambm, em vez de combinar o cdigo na macro atribuida guia nua, voc
pode ter atribuido uma macro para chamar a macro do seu mdulo. Isto torna mais fcil
de manter este cdigo, acess-lo, e imprim-lo. Voc pode usar uma declarao IF ou
uma declarao Select Case para fazer isso. Por exemplo:

Sel ect Case User For m2. TabSt r i p1. Val ue
Case 1: macr o1
Case 2: macr o2
Case 3: macr o3
End Sel ect
INSERINDO IMAGENS NUM USERFORM
Para colocar uma figura num userform, simplesmente clique no boto Caixa de
Ferramentas aquele que parece uma cena de montanha e desenhe uma caixa sobre o
userform. Da ento, mostre janela de propriedades e usando a propriedade figura,
selecione uma figura para o interior da caixa. Voc pode mudar outras opes, tais
como o tamanho da figura para ajust-la na caixa. Voc pode tambm atribuir uma
macro imagem por um duplo clique nela. Uma vantagem de se usar uma figura que
voc pode colocar um design complexo na sua folha, tal como uma trademark ou logo.
CONFIGURANDO A GUIA ORDEM
Para configurar a guia ordem dos objetos num userform, simplesmente selecione
o userform e da ento selecione Exibir, Tab Order. No dilogo que aparecer, voc pode
mover os controles para cima e para baixo na guia order. Se voc no quiser mudar a
guia order dos controles no UserForm, use o mtodo SetFocus para especificar que
objeto ter foco quando voc mostrar o UserForm. Por exemplo, se voc quiser uma
caixa de listagem chamada ListBox1 como tendo o foco quando voc mostrar o
UserForm, use o seguinte modelo de cdigo para o evento Initialize do UserForm:

Pr i vat e Sub User For m_I ni t i al i ze( )
Li st Box1. Set Focus
End Sub

" Gui a " & User For m2. TabSt r i p1. Val ue & " sel eci onado. "
userform para estabelecer o nm
Bertolo Lies de VBA do Excel 289


Este cdigo colocado na folha de cdigo do userform, o qual voc pode acessar
selecionando o userform e selecionando Exibir, Cdigo. Da ento selecione Initialize no
drop down do lado direito com o userform selecionado no dropdown do lado esquerdo.
Quando voc mostrar o UserForm, o ponto de isero aparece dentro da caixa de
listagem, a despeito da guia order no userform
USANDO VARIVEIS PARA SE REFERIR AOS OBJETOS DO USERFORM
No seu cdigo voc pode se referir aos objetos sobre um userform pela
combinao do Nome do userform e o nome do objeto. Isto reduz a necessidade de se
criar variveis de objeto para userform objetos. Entretanto, existiro instances onde
variveis de objeto so teis. Qualquer das abordagens seguintes lhe permite declarar a
varivel e configurla igual a um objeto num userform:

Di mmyObj ect
Di mmyObj ect As Var i ant
Di mmyObj ect As MSFor ms. obj et o t i po

A ltima abordagem acima melhor pois ela especifica o tipo de objeto. Por exemplo

Di ml Box As MSFor ms. Li st Box
Set l Box = User For m1. Li st box1

Como informao, se voc no usar MSForms para qualificar o tipo de objeto,
voc obter um erro de sintaxe quando voc tentar executar sua macro. Se voc estiver
editando o cdigo num mdulo de userform, voc pode usar a varivel Me para se
referir ao userform. Isto simplifica grandemente a escrita do cdigo.
USANDO DUPLOS CLIQUES PARA FECHAR UM USERFORM
Dando um duplo clique num objeto userform tal como um boto opo ou um
item numa lista no fecha o dilogo. O default no fazer nada i. e., o userform
permanece mostrado. Entretanto, voc pode atribuir uma macro a cada objeto sobre um
userform que voc queira dando um duplo clique nele. Por exemplo, Se voc quiser que
o userform feche quando um usurio der um duplo clique num boto opo. Cada objeto
deve ter a sua prpria macro. Para criar macros que fecham quando num objeto dado
um clique duplo, voc deve primeiro ir ao mdulo que mantm o cdigo para objetos
num userform. O modo mais fcil de obter este mdulo dar um duplo clique em
qualquer objeto no userform. Por exemplo, se voc der um duplo clique num boto
opo, aparecer o cdigo como o seguinte:

Pr i vat e Sub Li st Box1_Cl i ck( )
End Sub

A menos que voc j tenha criado o cdigo do objeto que voc deu o duplo
clique nele, a macro estar vazia. O prximo passo selecionar no drop down do lado
esquerdo da folha de macro o objeto para o qual voc quer atribuir uma macro duplo
clique. No drop down do lado direito, selecione a propriedade para a qual voc quer
atribuir uma macro. Neste caso, a propriedade a propriedade "DblClick". Quando voc
clicar nele, o cdigo seguinte aparecer:
Bertolo Lio #07 Cdigo VBA do Excel para UserForms 290


Pr i vat e Sub Opt i onBut t on1_Dbl Cl i ck _
( ByVal Cancel As MSFor ms. Ret ur nBool ean)
End Sub

Assumindo que seu userform seja chamado de "UserForm1", voc dever
modific-lo para incluir a declarao seguinte:

Pr i vat e Sub Opt i onBut t on1_Dbl Cl i ck _
( ByVal Cancel As MSFor ms. Ret ur nBool ean)
User For m1. Hi de
End Sub

Este cdigo far o userform ficar oculto. Isto lhe permite determinar as selees
do usurio no userform. Por favor note que voc no libera o userform no cdigo acima.
Se voc liberar o userform, voc no ser capaz de determinar qualquer das selees do
usurio no userform.
CENTRALIZANDO USERFORMS NA TELA
A propriedade que centraliza um userform a propriedade StartUpPosition. Se
ela for configurada para 1CenterOwner ou 2CenterScreen, ento voc obter resultados
de centralizaes. Se voc tiver o Excel configurado como uma janela na sua prpria
tela do computador, ento CenterOwner centralizar o dilogo na janela do Excel. O
CenterScreen centralizar o dilogo no meio da tela, no importa para qual tamanho
voc configurou para a janela do Excel. A configurao default 1CenterOwner.
SOBRE AS FOLHAS DE DILOGOS DO EXCEL 5/7
Excel 5/7 usa folhas de dilogos em vez de userform. As Folhas de dilogos so
um pouco diferentes dos userforms. Poe exemplo,no h mdulos de cdigo ou cdigo
associados com objetos. No h vantagem de se usar folhas de dilogos do Excel 5/7
versus userforms. E, em muitos casos, so mais difceis de se usarem.
SUMRIO
Existem vrias chaves de trabalhar com objetos num userform. Uma delas
reconhecer que cada objeto tem um conjunto de propriedades que voc pode configurar,
mudar e interrogar. O nmero de propriedades de objeto tem aumentado dramati-
camente. O melhor modo de entender as propriedades de um objeto mostrar a janela
de propriedades do objeto e mudar as propriedades e observar o resultado. Um outro
ponto para os objetos que voc no precisa dizer tudo ao VB, qual coleo um objeto
pertence. Por outro lado, o VB sabe qual coleo um objeto pertence, assim simplifique
seu trabalho. Finalmente, embora existam muitos objetos e propriedades, importante
manter seu uso de userforms simples e focado. Evite userforms complexos e mani-
pulaes complexas dos objetos sempre que possvel.

Bertolo Fase #3: VBA do Excel Avanado 291


Lio 8: Cdigo VBA do Excel para Grficos e Arquivos Seqenciais
Grfico no Excel
em vindos amigos a mais esta lio de cdigo VBA do Excel, agora nos toca a
aprender mais uma coisa interessante sobre macros, trata-se dos grficos em
Excel que trabalharemos agora.
Um dos poderes do Microsoft Excel a habilidade de se criar grficos.
Com a verso 5 e a introduo de assistentes de grfico, criar grficos tornou-se muito
fcil. Voc pode criar grficos nas suas prprias folhas ou embutir os grficos nas
planilhas. A abordagem de embutir tem a vantagem de agrupar grficos relacionados
numa nica localizao.
Quanto mais grficos voc criar, mais trabalho manual voc deve ter que fazer
para modificar cada um deles. E, se os grficos forem grficos embutidos vs. folhas de
grfico separadas, voc deve selecionar cada grfico embutido antes de voc poder
imprim-los individualmente. Estas tarefas podem facilmente serem automatizadas por
uma macro.
O propsito desta lio mostrar-lhe como trabalhar com ambos, folhas de
grfico separadas e grficos embutidos. E, esta lio tambm fornecer vrias macros de
aplicaes a grficos.


Se observarmos os dados que vamos a graficar nos damos conta que na coluna A
se encontram os valores dos eixos (X) e na coluna B os valores sries (Y), estes dados
so necessrios para efetuar uma grfico que poder ficar assim
B
Bertolo Lio #08 Cdigo VBA do Excel para Grficos e Arquivos Seqenciais 292

Este grfico mostra as idades de 5 pessoas, os nomes esto no eixo valores e a
idade no eixo sries, agora veremos como se pode detectar estes dados por meio de uma
Macro
Ao graficar estes dados se gerou o seguinte cdigo:
Sub Macr o1( )
Range( " A5: B10" ) . Sel ect
Char t s. Add
Act i veChar t . Char t Type = xl Col umnCl ust er ed Est a a l i nha 3
Act i veChar t . Set Sour ceDat a
Sour ce: =Sheet s( " Pl an1" ) . Range( " A5: B10" ) , _
Pl ot By: = xl Col umns
Act i veChar t . Locat i on Wher e: =xl Locat i onAsObj ect , Name: =" Pl an1"
End Sub
1. A primeira linha indica o range donde esto os dados, eixos de valores e series
de valores,
2. A segunda linha indica que se agrega um grfico
3. A terceira linha indica o tipo de grfico que se deseja
4. A quarta linha indica como se acomodam os dados no grfico
5. A quinta linha indica onde se mostra o grfico, se na mesma folha ou em uma
folha separada.
A seguir se mostram alguns dos diferentes tipos de grficos Lnha 3:
Bertolo Lies de VBA do Excel


293
Idade
0
20
40
60
80
Liliana Beth Dani Rosa J oana
Idade

Acti veChart.ChartType = xlColumnClustered

Idade
0 20 40 60 80
Liliana
Dani
J oana
Idade

Acti veChart.ChartType = xlBarClustered








Acti veChart.ChartType = xlLineMarkers


Idade
0
20
40
60
80
Liliana Beth Dani Rosa J oana
Idade

Bertolo Lio #08 Cdigo VBA do Excel para Grficos e Arquivos Seqenciais

294
Idade
Liliana
Beth
Dani
Rosa
J oana

Acti veChart.ChartType = xlPie



Acti veChart.ChartType = xlXYScatter

Idade
0
20
40
60
80
Liliana Beth Dani Rosa J oana
Idade

Acti veChart.ChartType = xlAreaStacked

Idade
0
20
40
60
80
0 2 4 6
Idade
Bertolo Lies de VBA do Excel


295
Idade
Liliana
Beth
Dani
Rosa
J oana

Acti veChart.ChartType = xlDoughnut

Idade
0
50
100
Liliana
Beth
Dani Rosa
J oana
Idade

Acti veChart.ChartType = xlRadarMarkers

L
i
l
i
a
n
a
D
a
n
i
J
o
a
n
a
0
20
40
60
80
Idade
Idade

Acti veChart.ChartType = xlCylinderColClustered

Bertolo Lio #08 Cdigo VBA do Excel para Grficos e Arquivos Seqenciais 296

L
i
l
i
a
n
a
D
a
n
i
J
o
a
n
a
0
20
40
60
80
Idade
Idade

Acti veChart.ChartType = xlConeColClustered

L
i
l
i
a
n
a
D
a
n
i
J
o
a
n
a
0
20
40
60
80
Idade
Idade

Acti veChart.ChartType = xlPyramidColClustered
Se tu agregas ao final do cdigo principal alguma linha do tipo de grfico que
gostas, este se ativar, por exemplo:
Sub Macr o1( )
Range( " A5: B10" ) . Sel ect
Char t s. Add
Act i veChar t . Char t Type = xl Col umnCl ust er ed
Act i veChar t . Set Sour ceDat a
Sour ce: =Sheet s( " Pl an1" ) . Range( " A5: B10" ) , Pl ot By: = xl Col umns
Act i veChar t . Locat i on Wher e: =xl Locat i onAsObj ect , Name: =" Pl an1"
Act i veChar t . Char t Type = xl Pyr ami dCol Cl ust er ed
End Sub
Este cdigo se pode programar num boto ou qualquer outro controle do Visual Basic.
A seguir se mostra como se acomodam os dados Lnha 4:
Bertolo Lies de VBA do Excel 297


0
10
20
30
40
50
60
70
Idade
Liliana
Beth
Dani
Rosa
J oana

Acti veChart.SetSourceData Source:=Sheets(" Plan1" ).Range(" A5:B10" ), PlotBy:= _
xlRows
Nesta linha se mostra o grfico por Intervalos (Range)


Idade
0
20
40
60
80
Liliana Beth Dani Rosa J oana
Idade

Acti veChart.SetSourceData Source:=Sheets(" Plan1" ).Range(" A5:B10" ), PlotBy:= _
xlColumns
Nesta linha se mostra o grfico por Coluna
Esta a forma em que se mostram os dados do que fala a linha 4.
Bertolo Lio #08 Cdigo VBA do Excel para Grficos e Arquivos Seqenciais 298

A linha 5 fala de que se o grfico ficar na mesma folha ou simplemente pega uma folha
separada para ela, por exemplo:
Acti veChart.Location Where:=xlLocationAsNewSheet, Name:=" Grfico 1"
Esta linha indica que o grfico tenha sua prpria folha e que seu nome seja
Grfico 1.
Neste exemplo executo um cdigo com cada uma das caracteresticas explicadas
nas 5 linhas.

Range( " A5: B10" ) . Sel ect
Char t s. Add
Act i veChar t . Char t Type = xl Col umnCl ust er ed
Act i veChar t . Set Sour ceDat a
Sour ce: =Sheet s( " Pl an1" ) . Range( " A5: B10" ) , Pl ot By: = _xl Col umns
Act i veChar t . Ocat i on Wher e: =xl Locat i onAsObj ect , Name: =" Pl an1"

Act i veChar t . Char t Type = xl Pyr ami dCol Cl ust er ed
Act i veChar t . Set Sour ceDat a
Sour ce: =Sheet s( " Pl an1" ) . Range( " A5: B10" ) , Pl ot By: = xl Col umns
Act i veChar t . Locat i on Wher e: =xl Ocat i onAsNewSheet , Name: =" Gr f i co
1"
Tipo de Grafico
Como se acomodam os dados
Como se mostra o grfico, neste caso em uma s folha
Bertolo Lies de VBA do Excel


299
Elabore o seguinte formulrio com o seguinte cdigo, para observar os diferentes
tipos de grficos e a forma em que se acomodam os dados:






Desenhe duas Listbox e um Boto e cole o cdigo seguinte dentro do formulrio:
Pr i vat e Sub CommandBut t on1_Cl i ck( )
Remest e cdi go ger a o Gr af i co na pl an1
Range( " A5: B10" ) . Sel ect
Char t s. Add
Act i veChar t . Char t Type = xl Col umnCl ust er ed
Act i veChar t . Set Sour ceDat a
Sour ce: =Sheet s( " Pl an1" ) . Range( " A5: B10" ) , Pl ot By: = _
xl Col umns
Act i veChar t . Locat i on Wher e: =xl Locat i onAsObj ect , Name: =" Pl an1"
Remagr egue os di f er ent es t i pos de gr f i cos Li st box1
Li st Box1. AddI t em" xl Col umnCl ust er ed"
Li st Box1. AddI t em" xl Bar Cl ust er ed"
Li st Box1. AddI t em" xl Li neMar ker s"
Li st Box1. AddI t em" xl Pi e"
Li st Box1. AddI t em" xl XYScat t er "
Li st Box1. AddI t em" xl Ar eaSt acked"
Li st Box1. AddI t em" xl Doughnut "
Li st Box1. AddI t em" xl Radar Mar ker s"
Li st Box1. AddI t em" xl Cyl i nder Col Cl ust er ed"
Li st Box1. AddI t em" xl ConeCol Cl ust er ed"
Li st Box1. AddI t em" xl Pyr ami dCol Cl ust er ed"
RemAgr egue as di f er ent es f or mas de acomodar os dados Li st box2
Li st Box2. AddI t em" Li nha"
Li st Box2. AddI t em" Col una"
End Sub

Pr i vat e Sub Li st Box1_Cl i ck( )
Remest e cdi go d o t i po de gr f i co ao dar cl i que na Li st box1
I f Li st Box1 = " xl Col umnCl ust er ed" Then Act i veChar t . Char t Type =
xl Col umnCl ust er ed
I f Li st Box1 = " xl Bar Cl ust er ed" Then Act i veChar t . Char t Type =
xl Bar Cl ust er ed
I f Li st Box1 = " xl Li neMar ker s" Then Act i veChar t . Char t Type =
xl Li neMar ker s
I f Li st Box1 = " xl Pi e" Then Act i veChar t . Char t Type = xl Pi e

Bertolo Lio #08 Cdigo VBA do Excel para Grficos e Arquivos Seqenciais

300
I f Li st Box1 = " xl XYScat t er " Then Act i veChar t . Char t Type =
xl XYScat t er
I f Li st Box1 = " xl Ar eaSt acked" Then Act i veChar t . Char t Type =
xl Ar eaSt acked
I f Li st Box1 = " xl Doughnut " Then Act i veChar t . Char t Type =
xl Doughnut
I f Li st Box1 = " xl Radar Mar ker s" Then Act i veChar t . Char t Type =
xl Radar Mar ker s
I f Li st Box1 = " xl Cyl i nder Col Cl ust er ed" Then
Act i veChar t . Char t Type = xl Cyl i nder Col Cl ust er ed
I f Li st Box1 = " xl ConeCol Cl ust er ed" Then Act i veChar t . Char t Type =
xl ConeCol Cl ust er ed
I f Li st Box1 = " xl Pyr ami dCol Cl ust er ed" Then Act i veChar t . Char t Type
= xl Pyr ami dCol Cl ust er ed
End Sub
Pr i vat e Sub Li st Box2_Cl i ck( )
I f Li st Box2 = " Li nha" Then
Act i veChar t . Set Sour ceDat a
Sour ce: =Sheet s( " Pl an1" ) . Range( " A5: B10" ) , Pl ot By: = _
xl Rows
End I f
I f Li st Box2 = " Col una" Then
Act i veChar t . Set Sour ceDat a
Sour ce: =Sheet s( " Pl an1" ) . Range( " A5: B10" ) , Pl ot By: = _
xl Col umns
End I f
End Sub
Antes de executar esta Macro tenhas os dados anteriores na Plan1 do Excel
Bertolo Lies de VBA do Excel 301





Espero que o cdigo acima seja de utilidade.
ESPECIFICANDO CHARTS
Bertolo Lio #08 Cdigo VBA do Excel para Grficos e Arquivos Seqenciais 302

A maneira de voc especificar um grfico numa macro depende da sua
localizao. Se um grfico estiver na sua prpria folha voc pode especific-lo usando a
seguinte sintaxe, pois ele um membro da coleo Charts:

Char t s( " nome da f ol ha de gr f i co" )
ou Char t s( nmer o)

Se o grfico est numa pasta diferente daquela pasta ativa, voc dever tambm
especificar a pasta. Por exemplo:
Wor kbooks( " MeusGr f i cos. XLS" ) . Char t s( " Pr eo de Aes" )
O nome da folha de grfico o nome que aparece na guia da folha. O nmero
ndice um nmero do um ao nmero de grficos na planilha. O nmero ndice refere-
se s folhas de grfico baseadas em sua ordem na Pasta. Voc pode also especificar uma
folha de grfico como um membro da coleo Sheets. Por exemplo:
Wor kbooks( " MeusGr f i cos. XLS" ) . Sheet s( " Pr eo de Aes" )
Se o grfico est embutido numa planilha, ento voc dever usar a seguinte
sintaxe para especific-lo:
Wor kbook. sheet . Char t Obj ect s( " nome do gr f i co " )
ou Wor kbook. sheet . Char t Obj ect s( nmer o)
Na sintaxe acima, voc deve fornecer uma folha de referncia. Exemplos tpicos de
folhas de referncias so:
ActiveSheet
Worksheets("nome da folha ")
Worksheets(nmero)
Sheets("noda da folha")
Sheets(nmero)

A pasta objeto referncia opcional se o grfico embutido estiver numa pasta ativa.
Por exemplo:

Wor ksheet s( " Reps Vendas" ) . Char t Obj ect s( " Gr f i co 1" )
Sheet s( " Reps Vendas" ) . Char t Obj ect s( " Gr f i co 2" )

Se voc gravou uma macro que funciona com grficos embutidos, voc
encontrar que o Microsoft Excel se refere aos grficos como membros da coleo
DrawingObjects. Como grficos embutidos numa folha de planilha so tambm
considerados parte da coleo DrawingObjects, eles podem tambm ser especificados
usando a seguinte sintaxe:

Wor kbook. sheet . Dr awi ngObj ect s( " nome do obj et o" )
ou Wor kbook. sheet . Dr awi ngObj ect s( nmer o)

Por favor note que a coleo DrawingObjects inclui qualquer objeto embutido
numa planilha. Por exemplo, caixas de textos, retngulos, flechas, crculos, etc.. Se voc
Bertolo Lies de VBA do Excel 303


quiser se referir a apenas grficos embutidos, ento use a coleo ChartObjects, no a
coleo DrawingObjects.
NOMEANDO CHARTS EMBUTIDOS
Quando voc criar um grfico embutido, o Microsoft Excel atribui a ele um
nome default tal como "Chart 1", "Chart 2", etc.. Uma coisa que voc deve no ter
percebido que voc pode mudar o nome dos grficos embutidos. Para fazer isto,
primeiro mostre a barra de ferramentas de desenho (Exibir, Barra de ferramentas). Da
ento selecione os objetos com a ferramenta seleo clicando no boto que parece com
a ponta de uma flecha. Quando voc clicar num grfico embutido com esta ferramenta,
voc pode ento clicar na caixa de nome e mudar o nome do grfico.
UMA MACRO PARA SELECIONAR GRFICOS EMBUTIDOS
Se voc tiver vrios grficos embutidos em uma folha de trabalho, a macro
seguinte mostrar uma lista de seleo para voc selecionar com qual grfico embutido
voc quer trabalhar. Para criar esta macro, primeiro crie um userform (o nosso
chamado UserForm1). Ele dever ter uma caixa de listagem (chamada ListBox1) junto
com os botes OK e Cancelar. O que segue o que esta folha dever se parecer:











A propriedade caption do userform foi mudada para dizer "Selecionar Um
Grfico Embutido". Para voc fazer isto selecionar o userform e da eles so
CommandButton1 e CommandButton2:

Pr i vat e Sub CommandBut t on1_Cl i ck( )
Me. Hi de
bResponse = Tr ue
End Sub

Pr i vat e Sub CommandBut t on2_Cl i ck( )
Me. Hi de
bResponse = Fal se
End Sub

O que segue a macro que voc precisa entrar. Por favor note que a varivel
global chamada no topo do mdulo, e que ela usada para armazenar o valor Boolean
indicando qual boto foi clicado.

Gl obal bResponse As Bool ean
Bertolo Lio #08 Cdigo VBA do Excel para Grficos e Arquivos Seqenciais

304

Sub Sel ect AnEmbeddedChar t ( )
' Decl ar ar var i vei s:
Di mI As I nt eger
Di mchar t Name As St r i ng
Di mr esponse As Bool ean
' cer t i f i car - se que o user f or mest descar r egado.
Unl oad User For m1
' Ou, apenas l i mpar a l i st box:
User For m1. Li st Box1. Cl ear
' at ual i zar a l i st a l i st box
For I = 1 To Act i veSheet . Char t Obj ect s. Count
char t Name = Act i veSheet . Char t Obj ect s( I ) . Name
User For m1. Li st Box1. AddI t emchar t Name
Next
' t or nar o 1 gr f i co da l i st a a sel eo i ni ci al
User For m1. Li st Box1. Li st I ndex = 0
' most r ar o f or m
User For m1. Show
' most r ar o di l ogo e sel eci onar o gr f i co
I f bResponse = Fal se Then
' descar r egar e sai r se cancel ar f or sel eci onado
Unl oad User For m1
Exi t Sub
End I f
' Obt er o nome da l i st box do i t emsel eci onado
char t Name = User For m1. Li st Box1. Val ue
' r emover o user f or mda memr i a
Unl oad User For m1
' At i var o gr f i co
Act i veSheet . Char t Obj ect s( char t Name) . Act i vat e
End Sub

Pontos chaves sobre a macro acima:
Esta macro dever ser executada de uma folha contendo grficos.
A declarao "ChartObjects.Count" usada para obter o nmero de grficos embutidos na
folha.
Como cada ChartObject identificado por ambos, um nmero e um nome, a macro circula
pela coleo ChartObject e usa o nmero de um objeto grfico para determine seu nome.
A expresso UserForm1.ListBox1.Value a string texto na caixa de listagem do
item selecionado.
O comando Activate usado em vez do comando Select na macro acima. O
comando Activate torna o grfico no objeto embutido ativo. Deste modo, voc pode
usar a declarao ActiveChart.PrintOut para imprimir o grfico. Se voc somente
selecionar o objeto embutido, voc precisar ainda ativar o grfico de modo que
voc possa trabalhar com ele ou imprim-lo.
Se voc quiser modificar a macro acima para primeiro classificar a lista dos
objetos embutidos em ordem alfabtica voc precisar de:
Armazenar os nomes dos grficos numa array
Classificar o array em ordem alfabtica como ilustrado no captulo de arrays.
Bertolo Lies de VBA do Excel 305


Definir a propriedade List da caixa de listagem igual ao array classificado.
IMPRIMINDO E VISUALIZANDO GRFICOS
Uma das coisas freqentes que as pessoas fazem com grficos imprim-los! O
mtodo que se usa para imprimir um grfico chamado PrintOut. Se voc quer
visualizar um grfico, ento voc dever usar o mtodo PrintPreview. Se a folha de
grfico for uma folha ativa, ento voc pode usar a seguinte declarao para imprimir
um grfico:
Act i veChar t . Pr i nt Out
Se a folha de grfico no for uma folha ativa, voc pode usar a seguinte
declarao para imprimir o grfico sem ativar a folha de grfico:
Wor kbook. Char t s( " gr f i co sheet nome" ) . Pr i nt Out
O objeto referncia da pasta no exigido se a pasta contm o grfico a pasta
ativa. Um nmero de folha de grfico pode ser usado em vez do nome. Por exemplo, a
declarao que segue imprime uma folha de grfico rotulada de "Previso de Vendas"
localizada na pasta 1996Fcst.XLS:

Wor kbooks( " 1996Fcst . Xl s" ) . Char t s( " Pr evi so de Vendas" ) . Pr i nt Out

Quando voc usar o comando acima, voc notar que o Microsoft Excel ativar
a folha de grfico, imprimir o grfico, e da ento ativar a folha que estava ativa
anteriormente ao comando ser emitido.
Esta mesma aboragem no funciona para grfico embutidos. Se voc tentar usar
a sintaxe acima para imprimir um grfico embutido, voc obter uma mensagem de
erro. Em vez disso, voc precisa primeiro ativar o grfico embutido e da ento enviar
uma declarao do Visual Basic para imprimir o grfico. O que segue ilustram as
declaraes do Visual Basic exigidas:

Wor kbook. sheet . Char t Obj ect s( " nome" ) . Act i vat e
Act i veChar t . Pr i nt Out

Voc tambm tem a opo de entrar com um nmero para o ChartObject em vez
de um nome. A macro que segue ilustra como voc imprimir todos os grficos
localizados em folhas de grfico individuais:

Sub Pr i nt Char t s( )
Di mcht Sheet As Obj ect
For Each cht Sheet I n Char t s
cht Sheet . Pr i nt Out
Next
End Sub

A macro acima imprimir todos os grficos localizados em folhas de grfico
individuais porque eles so membros da coleo Charts. Cada pasta tem sua prpria
coleo Charts.
Bertolo Lio #08 Cdigo VBA do Excel para Grficos e Arquivos Seqenciais 306

Se voc quiser imprimir todos os grficos embutidos numa planilha, ento voc
dever usar a coleo ChartObjects em vez da coleo Charts. Tambm, voc dever
ativar cada grfico embutido antes de imprimir. Por exemplo:

Sub Pr i nt EmbeddedChar t s( )
Di membeddedCht As Obj ect
For Each embeddedCht I n Act i veSheet . Char t Obj ect s
embeddedCht . Act i vat e
Act i veChar t . Pr i nt Out
Next
End Sub

Note que ChartObjects tem sido qualificado como um objeto folha. Neste caso
ActiveSheet foi usada. Entretanto, voc no tem que estar na folha ativa para ativar e
imprimir o grfico embutido. Por exemplo, voc poderia ter usado
Workbook("Forecast.Xls").Sheets("grfico Sheet") em vez de ActiveSheet:

Sub Pr i nt EmbeddedChar t s( )
Di membeddedCht As Obj ect
Set cont ai ni ngSheet = _
Wor kbooks( " For ecast . Xl s" ) . Sheet s( " gr f i co Sheet " )
For Each embeddedCht I n cont ai ni ngSheet . Char t Obj ect s
embeddedCht . Act i vat e
Act i veChar t . Pr i nt Out
Next
End Sub

Entretanto, quando as declaraes so executadas, voc acabar numa folha
contendo os grficos, mesmo se voc no estivesse nesta folha originalmente. E, o
ltimo grfico embutido na coleo ser o objeto selecionado, em oposio a uma clula
na planilha.
As macros acima imprimiro os grficos na ordem que o Microsoft Excel os tm
em suas colees. Se voc quiser controlar a ordem de impresso, ento voc precisa
usar declaraes print individuais para cada grfico ou objeto embutido:
Para folhas de grfico voc dever usar a seguinte sintaxe:

past a. Char t s( " gr f i co 1 nome" ) . Pr i nt Out
past a. Char t s( " gr f i co 2 nome" ) . Pr i nt Out

O objeto pasta lhe permite especificar uma folha de grfico numa pasta
diferente.
Para grficos embutidos voc dever usar a seguinte sintaxe:

sheet . Char t Obj ect s( " gr f i co embut i do 1 nome" ) . Act i vat e
Act i veChar t . Pr i nt Out
sheet . Char t Obj ect s( " gr f i co embut i do 2 nome" ) . Act i vat e
Act i veChar t . Pr i nt Out

Bertolo Lies de VBA do Excel 307


Uma referncia de folha deve qualificar ChartObjects para grficos embutidos.
Ela pode identificar uma folha em uma pasta diferente daquela da folha ativa.
OBJETOS E PROPRIEDADES DE UM CHART
Existem muitos objetos diferentes num grfico. Por exemplo existem linhas,
bordas, backgrounds, etc.. O modo mais fcil, e freqentemente o melhor modo, para se
determinar o nome do objeto grfico e as propriedades que voc quer trabalhar com elas
usar o gravador de macro. Examinando a macro resultante voc pode facilmente
determinar o nome do objeto grfico e suas propriedades. Para obter informaes
adicionais sobre um objeto grfico e suas propriedades, coloque o cursor na palavra
chave e pressione a tecla F1. Isto mostrar a ajuda do Visual Basic sobre este assunto.
Se voc precisar fazer a mesma modificao a uma srie de grficos, uma macro
uma maneira fcil de fazer isto. O modo mais fcil de se criar uma tal macro usar o
gravador de macro e gravar as mudanas do grfico para cada. Then, you would edit the
resulting macro, eliminando o cdigo extra que o Microsoft Excel grava, e usar um For
Each..Next para fazer o lao por todos os grficos. A macro que segue loops through all
the grfico embutidos numa planilha e muda a linha 1 em cada grfico para uma linha
pontilhada:

Sub ChangeEmbeddedChar t s( )
Di mE As Obj ect
For Each E I n Act i veSheet . Char t Obj ect s
E. Act i vat e
' sel eci onar a ser i es 1
Act i veChar t . Ser i esCol l ect i on( 1) . Sel ect
' modi f i car par a uma l i nha f i na pont i l hada
Wi t h Sel ect i on. Bor der
. Col or I ndex = 1
. Wei ght = xl Thi n
. Li neSt yl e = xl Dot
End Wi t h
Next
End Sub
SOBRE AS SRIES NO GRFICO
O objeto mais importante num grfico so as sries que esto sendo plotadas.
Sries so referidas com a seguinte sintaxe:
Chart.SeriesCollection(nmero)
A referncia Chart exigida. Freqentemente voc dever usar ActiveChart
como a referncia grfico. Para determinar o nmero de uma srie, clique na srie e o
nome da srie aparecer na caixa nome. O nome ser como S1, S2, etc.. O nmero
representa o nmero que voc dever usar para identificar a srie usando a plavra chave
seriesCollection.
Para modificar uma srie (linha, barra, etc..), voc dever definir a propriedade
Formula da linha igual a uma nova frmula usando a frmula Series. A frmula Series
deve ter a seguinte sintaxe:

"=Series(series nome, X axis categories, Y axis values, series nmero)"
Bertolo Lio #08 Cdigo VBA do Excel para Grficos e Arquivos Seqenciais 308


Por exemplo:

=SERIES(Sheet3!$C$8, Sheet3!$D$6:$G$6,Sheet3!$D$8:$G$8, 1)
ou =SERIES("Test Data", Sheet3!$D$6:$G$6,Sheet3!$D$7:$G$7, 2)

Se voc clicar numa srie num grfico voc ver a frmula Serie na caixa de
edio. Qualquer frmula que voc construir via uma macro deve se parecer com as
frmulas que voc v na caixa de edio. Os pontos principais sobre a sintaxe Series
numa macro:

O sinal de igual e aspas so exigidos.
O nome series e categorias do eixo X so opcionais. Os valores do eixo Y e nmero
srie so exigidos. Se o nmero de srie for o mesmo que aquele de uma srie
existente, ento a srie existente tocada.
Vrgulas so usadas como placeholders.
O nome da srie pode ser ou uma referncia a uma clula nica na planilha ou uma
entrada de texto entre aspas duplas.
As categorias eixo X so ou os valores de X para grficos de scatter charts ou rtulos
do eixo X para todos os outros grficos.
As entradas para as categorias do eixo X e valores do eixo Y so normalmente
entradas de endereos no estilo A1. Por exemplo, Sheet1!$C$3:$G$3
Se voc estiver criando uma entrada de endereo, voc pode usar a propriedade
Address para obter as referncias de clulas, e da ento concatenar as entradas,
incluindo quaisquer aspas simples necessrias, pontos de exclamao, parnteses, e
colchetes

As declaraes Visual Basic que seguem mostram como fazer isto para uma
srie de clulas que tenham sido destacadas e so necessrias para especificar series 2
num grfico chamado "Key Data". Por favor note que um grfico numa folha separada,
e no um grfico embutido.

Sub Addr essExampl e( )
Di myCel l s As St r i ng, sheet Name As St r i ng
' Est a macr o assume que voc a t enha execut ado de uma pl ani l ha
' e t enha dest acado o novo r ange Y
' Obt er o ender eo do addr ess par a a sel eo
yCel l s = Sel ect i on. Addr ess
' Obt er o nome da f ol ha
sheet Name = Act i veSheet . Name
' I r ao gr f i co - not e que o nome f oi def i ni do pel o usur i o
Char t s( " Key Dat a" ) . Sel ect
' especi f i car a new f or mul a f or t he ser i es
Act i veChar t . Ser i esCol l ect i on( 2) . For mul a = _
" =SERI ES( , , ' " & sheet Name & " ' ! " & yCel l s & " , 4) "
End Sub

Bertolo Lies de VBA do Excel 309


Note que na construo da declarao Formula acima que aspas simples foram
usadas para cercar o noma da folha. Esta uma exigncia se o nome da folha tem
espaos, e no causar problema se o nome no tiver qualquer espao. Se voc precisar
adicionar uma nova srie a um grfico, ento voc dever usar o mtodo Add.
A sintaxe :
gr f i co. Ser i esCol l ect i on. Add _
sour ce: = r ange addr ess, _
RowCol : = xl Rows or xl Col umns, _
ser i esLabel : = Tr ue or Fal se, _
cat egor yLabel : = Tr ue or Fal se, _
r epl ace: =Tr ue or Fal se

Se o grfico for um grfico embutido, voc deve primeiro ativar o grfico e da
ento usar ActiveChart para se referir ao grfico na declarao acima. Para certificar de
que voc obteve o conjunto correto de declaraes, use o gravador de macro.

O que segue so os argumentos do mtodo Add para a SeriesCollection:

fonte - exigido. Isto normalmente umendereo de range no text form dos dados a
serem plotados. O que segue ilustra este argumento: Source:="Sheet1!$C$4:$G$5".
Se X labels and a series label forem necessrios, eles esto incluidos nesta string.
rowCol - opcional. Isto indica se os dados esto em linhas (xlRows) ou colunas
(xlColumns). Se omitido, o Microsoft Excel tenta compreender a resposta correta.
seriesLabel - opcional. Se a primeira clula no range especificado range contm o
nome da srie de dados, este parmetro definido como True. Se no for, ento ele
dever ser definido como False. Se omitido, o Microsoft Excel tenta compreender a
resposta correta.
categoryLabel - opcional. Se a primeira clula no range especificado range contm
os valores X, este parmetro definido como True. Se no for, ento ele dever ser
definido como False. Se omitido, o Microsoft Excel tenta compreender a resposta
correta.
replace - opcional. Se os rtulos da categoria so fornecidos e esta varivel
definida como True, ento os novos rtulos trocam aqueles j em uso no grfico.

Caso contrrio os rtulos devero ser rtulos adicionais.
Para deletar uma srie num grfico, voc dever primeiro selecionar o grfico e dai
ento especificar o ActiveChart e usar o mtodo Delete. Por exemplo:

Sheet s( " Char t 3" ) . Sel ect
Act i veChar t . Ser i esCol l ect i on( 2) . Del et e
UM EXEMPLO DE MACRO QUE DESENHA GRFICO A PARTIR DE
DADOS
Se sua base de dados consistir de apenas umas poucas linhas de dados, ela ,
bastante fcil de criar grficos para cada linha de dados. Mas se seus dados estiverem
em muitas linhas para tornar a criao de grficos individuais uma possibilidade
Bertolo Lio #08 Cdigo VBA do Excel para Grficos e Arquivos Seqenciais 310

razovel, ento voc pode usar uma macro para plotar uma linha selecionada (ou
mltiplas linhas) de dados no comando.
O truque para ser capaz de plotar seletivamente uma linha de dados o design da
sua planilha. Voc precisar de trs folhas:
Uma folha de grfico
Uma planilha que mantenha apenas os dados que esto sendo graficados
Uma planilha que tenha seus dados.

Para ilustrar uma tal macro, vamos assumir que seus dados representem
shipments por cliente. O que segue ilustra a planilha de dados:


A folha acima dever ser chamada "The Data". Por favor note que voc pode
usar nomes diferentes se voc mudar a macro. Apesar da ilustrao acima ter somente 4
linhas de dados, por favor assuma que existam centenas de clientes. Tambm, esta
abordagem funcionar se os perodos forem meses, anos, etc..
A segunda folha na sua planilha dever consistir de duas linhas: os rtulos que
voc quer usar para o eixo X, e uma linha de dados. O que segue ilustra esta folha:

Esta folha dever ser chamada "Chart Data". Por favor note que o que est acima
so amostras de dados. Mais tarde, a macro os trocar com os dados reais.
O prximo passo criar o grfico que ser usado. Isto feito simplesmente
destacando as clulas acima (A1:E2) na folha "Chart Data" e selecionar Inserir, Chart,
As New Sheet. O que segue o grfico que eu construi dos dados acima. Ele um
grfico de linha usando format 4, o qual d linhas pontilhadas para cada valor do eixo
Y.


O nome que a macro usar para a folha de grfico acima "Customer Shipments".
A macro que ns escreveremos ser executada da planilha contendo os dados.
Bertolo Lies de VBA do Excel 311


Sempre que a clula for a ativa, a macro determinar a linha de dados a serem plotados.
A macro selecionar a linha de dados incluindo o nome do cliente, e o copiar para a
folha "Graph Data". Ela ento atualizar o ttulo do grfico e mostrar o grfico. O que
segue o cdigo da macro que alcana este resultado:

Sub Pl ot Dat a( )
Di mcust omer NameCel l As Obj ect , endCel l As Obj ect
' t enha cer t eza de est ar na f ol ha cor r et a
I f Act i veSheet . Name <> " The Dat a" Then
MsgBox " Voc no est na pl ani l ha cor r et a. "
End
End I f
' def i ni r a var i vel obj et o i gual a pr i mei r a cl ul a na l i nha, a
qual est o nome do cl i ent e
Set cust omer NameCel l = Cel l s( Act i veCel l . Row, 1)
' Conf i r mar se el a t emuma ent r ada
I f cust omer NameCel l = " " Then
MsgBox " Voc no est numa l i nha de dados. "
End
End I f
' det er mi nar a l t i ma cl ul a, comeando da cl ul a nome do
' cl i ent e
Set endCel l = cust omer NameCel l . End( xl ToRi ght )
' sel eci onar e copi ar os dados par a ser pl ot ados
Range( cust omer NameCel l , endCel l ) . Copy _
dest i nat i on: =Sheet s( " Char t Dat a" ) . Range( " A2" )
' r ecal c Mi cr osof t Excel no caso cal c manual .
' I st o at ual i za o gr f i co se cal c aj ust ado par a manual
I f Appl i cat i on. Cal cul at i on = xl Manual Then Cal cul at e
' I r par a o gr f i co e f i xar o t t ul o
Sheet s( " cust omer Shi pment s" ) . Sel ect
Act i veChar t . Char t Ti t l e. Text = _
cust omer NameCel l . Val ue & " CARREGAMENTOS"
End Sub

Para testar sua cpia da macro acima, selecione qualquer clula contendo dados
na folha chamada "The Data" e execute a macro. Se voc quiser, voc pode ocultar a
folha "Chart Data" desde que ela nunca esteja selecionada. Uma coisa que voc deve
querer fazer to montar um boto na folha "The Data" que automaticamente chame a
macro. Isto eliminar de ter que selecionar manualmente Ferramentas, Macros para
executar a macro.
Para criar um boto na planilha de dados:
Selecionar Exibir, Barra de ferramentas e mostrar a barra de ferramentas Drawing.
Sair dos menus.
Clicar no boto "Criar Boto".
Ir a clula A1 e desenhar um boto nas clulas A1:A2. Quando prompted para a
macro rodar, selecione a macro entitulada "PlotData".
Mude o ttulo do boto para a palavra "Plot".

Bertolo Lio #08 Cdigo VBA do Excel para Grficos e Arquivos Seqenciais 312

Se voc precisar fixar o rtulo do boto por qualquer razo, apenas mantenha
apertada a tecla CTRL e clique no boto para selecion-lo. Se voc precisar checar ou
mudar a macro, d um clique com o boto direito e selecione atribuir uma macro.

O ltimo item que voc poderia fazer congelar as linhas e colunas de
cabealho na folha de dados. Para congel-los, selecione a clula B3 e selecione J anela,
Congelar painis. Isto mantm os ttulos sem deslocar na tela, e mantm tambm o
boto visvel todo o tempo. O que segue o que a folha agora se parece:

Um dos problemas com a abordagem acima que voc tem de retornar
continuamente folha de dados da folha de grfico para plotar o prximo cliente. Uma
maneira de contornar isto criar duas macros adicionais e colocar botes que as
chamem da folha de grfico . Uma move uma linha para baixo e chama a macro
PlotData acima. A outra move uma linha para cima e chama a macro. Se tambm se
encontrar uma linha em branco, ela d a mensagem que se est no topo ou no fundo dos
dados. O que segue so estas duas macros:

Sub MoveDown( )
' i r par a a f ol ha de dados. Act i vat e usado no caso da f ol ha
est ar ocul t a.
Sheet s( " Os Dados" ) . Act i vat e
' mover par a bai xo uma l i nha e chamar a macr o pl ot dat a
Act i veCel l . Of f set ( 1, 0) . Sel ect
I f Cel l s( Act i veCel l . Row, 1) = " " Then
' r et or ne ao pl ot se est i ver no f undo
Act i veCel l . Of f set ( - 1, 0) . Sel ect
Char t s( " cust omer Shi pment s" ) . Sel ect
MsgBox " Voc est no f undo dos dados"
Exi t Sub
End I f
' pl ot a pr xi ma l i nha chamando a macr o Pl ot Dat a
Pl ot Dat a
End Sub
'*****************************************************
Sub MoveUp( )
' i r a f ol ha de dados. Act i vat e usado no caso da f ol ha est ar
ocul t a.
Sheet s( " The Dat a" ) . Act i vat e
' mover par a ci ma uma l i nha e t oda macr o pl ot dat a macr o
Act i veCel l . Of f set ( - 1, 0) . Sel ect
I f Cel l s( Act i veCel l . Row, 1) = " " Then
' r et or nar ao pl ot se est i ver no t opo
Act i veCel l . Of f set ( 1, 0) . Sel ect
Bertolo Lies de VBA do Excel 313


Char t s( " cust omer Shi pment s" ) . Sel ect
MsgBox " Voc est no t opo dos dados"
Exi t Sub
End I f
' pl ot a pr xi ma l i nha chamando a macr o Pl ot Dat a
Pl ot Dat a
End Sub
'*****************************************************
Da mesma maneira que voc adicionou um boto folha de dados para chamar a
macro PlotData, voc poder adicionar dois botes folha de grfico para chamar as
macros acima. Isto lhe permitir rodar pelos dados sem ter que retornar planilha de
dados. O que segue com que aquela folha de grfico modificada se parece:


Por favor note que os botes na ilustrao acima so grandes em relao ao
grfico para ilustrar botes num grfico. Na sua aplicao real, eles podem ser muito
pequenos. Tambm, voc pode ocultar uma folha de dados quando as macros MoveUp e
MoveDown usarem Activate em vez de Select para ir folha de dados. O mtodo
Activate permite-lhe ir s folhas ocultas e trabalhar com elas como se elas estivessem
visveis. Como se mencionou anteriormente, a folha "Chart Data" pode tambm ocultar
quando ela nunca for selecionada.
Uma outra melhoria que voc poderia adicionar seria um boto that mostra uma
lista das linhas de dados, permitindo o usurio escolher qual linha de dados mostrar no
grfico.
COMO EVITAR A SELEO DE UM GRFICO EMBUTIDO
Meus agradecimentos a Tom Ogilvy pelo exemplo que ilustra como evitar
selecionar uma ativao de um grfico embutido. Evitar a seleo e ativao torna seu
cdigo mais eficiente e mais fcil de escrever.

Sub Char t Exampl e( )
Di mcht As Obj ect
Set cht = Act i veSheet . Char t Obj ect s( " Char t 1" ) . Char t
Wi t h cht . Pl ot Ar ea
Wi t h . Bor der
. Wei ght = xl Thi n
. Li neSt yl e = xl Aut omat i c
End Wi t h
. I nt er i or . Col or I ndex = xl None
End Wi t h
End Sub
Bertolo Lio #08 Cdigo VBA do Excel para Grficos e Arquivos Seqenciais 314

APRENDENDENDO A TRABALHAR COM ARQUIVOS SEQENCIAIS NO
VISUAL BASIC
Bem vindos amigos sexta parte de Macros em Excel e Visual Basic, estamos
prontos para ver mais sobre este interessante curso, neste caso veremos como se pode
arquivar os dados de uma folha em um arquivo aparte. Aprenderemos a trabalhar com
arquivos seqenciais em Visual Basic. Os arquivos seqenciais so aqueles que ao
registrar seus dados estes entram numa seqncia, por exemplo se registro 5 nomes,
levaro uma ordem de 1 ao 5, em troca existem tambm os arquivos aleatrios, mas
eles no respeitam a seqncia, por exemplo os 5 nomes poderiam ficar em qualquer
posio do 100 em diante, do 300 em diante, do 10 em diante, de onde quiseres p-los,
tu indicas aonde queres que fiquem os 5 nomes, podem ficar at separados e no
respeitar uma seqncia.
O problema dos arquivos seqenciais que ao se introduzirem alguns smbolos na
busca podem alterar o arquivo e este no funcionar corretamente, por isso se recomenda
filtrar os dados com algum cdigo ou simplemente no procurar por smbolos.

Nesta folha podemos observar 5 nomes, a inteno ser arquiv-los em separado
e faz-los desaparecer da folha, para depois voltarmos fazer aparecer na folha. A isto se
chamar Registro de dados e Consulta de dados.

Bertolo Lies de VBA do Excel 315


Iremos ao Visual Basic com Alt+F11 e Inseriremos um UserForm, no qual
desenharemos dois botes, um com o nome de Registro e o outro com o Nome de
Consulta.
Agora vamos programar o boto Registro, para poder arquivar os nomes.
Pr i vat e Sub CommandBut t on1_Cl i ck( )
Remse t r ansl ada cl ul a A8
Range( " A8" ) . Sel ect
Remse no h nenhumdado na A8 que no se ar qui ve de novo
I f Act i veCel l = Empt y Then GoTo sal t e
Remabr e umar qui vo na uni dade c como nome de dados. t xt
Rememf or ma de Tempor al ( Out put ) na r ea de ar mazenament o #1
Open " c: \ dados. t xt " For Out put As 1
Remat i va umr t ul o par a poder r egr essar
vol t e:
Remescr eva o dado da cl ul a at i va no ar qui vo
Wr i t e #1, Act i veCel l
Remapaga o dado da cl ul a
Act i veCel l = Empt y
Rembai xa umr ange par a o nome segui nt e
Act i veCel l . Of f set ( 1, 0) . Sel ect
Remse a cl ul a est a vazi a que no r egr esse agor a
I f Act i veCel l = Empt y Then GoTo sal t e
Remvol t e a escr ever o segui nt e nome no ar qui vo
GoTo vol t e:
sal t e:
Remacabou- se
Remf echar o ar qui vo
Cl ose #1
End Sub
Os dados ficaro arquivados na unidade e sero devolvidos quando pressionares
o boto consulta. O que a seguir se mostra:
Agora vamos programar o boto consulta:
Pr i vat e Sub CommandBut t on2_Cl i ck( )
Remt r ansl adar cl ul a A8
Range( " A8" ) . Sel ect
RemAbr e umar qui vo na uni dade C como nome de dados. t xt
Remna f or ma de Lei t ur a ( i nput ) na r ea de ar mazenament o #1
Open " c: \ dados. t xt " For I nput As 1
Remi st o si gni f i ca l ao, embor a no sej a f i nal do ar qui vo
Remi st o quer di zer que no dei xe de l er os dados
Remat que no se chegue ao l t i mo del es
Do Whi l e Not EOF( 1)
RemL umdado
I nput #1, nome
Remescr eve na cl ul a
Act i veCel l . For mul aR1C1 = nome
Rembai xa umr ange par a o segui nt e nome
Act i veCel l . Of f set ( 1, 0) . Sel ect
Remat i va o ci cl o Do Whi l e - que r egr essa at
Remque se cumpr a a condi o.
Loop
Remf echa o ar qui vo
Cl ose #1
Bertolo Lio #08 Cdigo VBA do Excel para Grficos e Arquivos Seqenciais 316

End Sub
O que voc acha de arquivar os dados em separado sem que ningum possa
observ-los? Esta a magia dos arquivos seqenciais.
Este exemplo vem indexado em um arquivo com o nome de Macros VI.
O seguinte cdigo arquiva o nome, o endereo e o telefone no arquivo, cria um
formulrio igual com dois botes.
Pr i vat e Sub CommandBut t on1_Cl i ck( )
Remt r asl adar cl ul a A8
Range( " A8" ) . Sel ect
Remse no h nenhumdado emA8 que no se ar qui ve de novo
I f Act i veCel l = Empt y Then GoTo sal t e
Remabr e umar qui vo na uni dad c como nome de dados. t xt
Rememf or ma de aadi r Tempor al ( out put ) no r ea de ar mazenament o
#1
Open " c: \ dados. t xt " For Out put As 1
Remat i va umr t ul o par a poder r egr esar
vol t e:
Remcapt ur a o nome emuma var i vel
nome = Act i veCel l
Remapaga o dado da cl ul a
Act i veCel l = Empt y
Remmove- se uma col una di r ei t a
Act i veCel l . Of f set ( 0, 1) . Sel ect
Remcapt ur a o ender eo emuma var i vel
ender eo = Act i veCel l
Remapaga o dado da cl ul a
Act i veCel l = Empt y
Remmove- se uma col una di r ei t a
Act i veCel l . Of f set ( 0, 1) . Sel ect
Remcapt ur a o t el ef one emuma var i vel
t el ef one = Act i veCel l
Remapaga o dado da cl ul a
Act i veCel l = Empt y
Remescr eva os dados nome, ender eo e t el ef one no ar qui vo
Wr i t e #1, nome, ender eo, t el ef one
Rembai xa umr ange par a o segui nt e nome
Act i veCel l . Of f set ( 1, 0) . Sel ect
Remr et r ocede duas col unas
Act i veCel l . Of f set ( 0, - 2) . Sel ect
Remse a cl ul a est a vazi a que no r egr esse ai nda
I f Act i veCel l = Empt y Then GoTo sal t e
Remvol t e a escr ever o nome segui nt e no ar qui vo
GoTo vol t e:
sal t e:
Remse acabou
Remf echa o ar qui vo
Cl ose #1
End Sub

Pr i vat e Sub CommandBut t on2_Cl i ck( )
Remt r ansl adar cl ul a A8
Range( " A8" ) . Sel ect
Remabr e umar qui vo na uni dade c como nome de dados. t xt
Bertolo Lies de VBA do Excel 317


Rememf or ma de Ler ( i nput ) na r ea de ar mazenament o #1
Open " c: \ dados. t xt " For I nput As 1
Remi st o si gni f i ca l ao embor a no sej a f i nal do ar qui vo
Remi st o quer di zer que no dei xe de l er os dados
Remat que no se chegue ao l t i mo del es
Do Whi l e Not EOF( 1)
Reml os dados
I nput #1, nome, ender eo, t el ef one
Remescr eva na cl ul a o nome
Act i veCel l . For mul aR1C1 = nome
Remmove- se uma col una di r ei t a
Act i veCel l . Of f set ( 0, 1) . Sel ect
Remescr eva na cl ul a o ender eo
Act i veCel l . For mul aR1C1 = ender eo
Remmove- se uma col una di r ei t a
Act i veCel l . Of f set ( 0, 1) . Sel ect
Remescr eva na cl ul a o t el ef one
Act i veCel l . For mul aR1C1 = t el ef one
Rembai xa umr ange par a o segui nt e nome
Act i veCel l . Of f set ( 1, 0) . Sel ect
Remr et r ocede duas col unas
Act i veCel l . Of f set ( 0, - 2) . Sel ect
Remat i va o ci cl o Do Whi l e - que r egr esse at
Remque se cumpr a a condi o.
Loop
Remf echa o ar qui vo
Cl ose #1
End Sub
Este exemplo vem no arquivo Macros VI-2.
Tambm se pode consultar sem necessidade de ler os dados na folha, isto quer
dizer lendo direto do arquivo e trazendo os dados ao formulrio, no seguinte exemplo,
se programa o boto consulta em formulrio.

Desenhe o formulrio acima, os dois primeiros botes o mesmo cdigo
anterior, mas o terceiro boto inclui o seguinte cdigo:

Pr i vat e Sub CommandBut t on3_Cl i ck( )
Open " c: \ dados. t xt " For I nput As 1
Do Whi l e Not EOF( 1)
I nput #1, nome, ender eo, t el ef one
I f nome = Text Box1 Then
Text Box2 = ender eo
Bertolo Lio #08 Cdigo VBA do Excel para Grficos e Arquivos Seqenciais 318

Text Box3 = t el ef one
End I f
Loop
Cl ose #1
End Sub
Este exemplo vem no arquivo Macros VI-3
Somente rode o formulrio e escreva o nome que deseja consultar e pressione o
terceiro boto.
Voc poder consultar qualquer dos nomes que se encontrem dentro do arquivo,
sem necessidade de que existam na folha, claro est que primeiro necessrio pressio-
nar o boto registro para arquiv-los, mas depois se podem manipular.
Bem espero que seja de seu agrado esta parte e que pratiquen muito os arquivos
seqenciais.
Bertolo Fase #3: VBA do Excel Avanado 319


Lio 9: Criando e Modificando Menus

Microsoft Excel tem mais de 30 menus que ajudam voc no uso do Microsoft
Excel. possvel aumentar ainda mais a barra de menus adicionando novos
menus e itens de menu a eles. E, voc pode adicionar itens de menus que
aparecem somente quando um dado arquivo aberto. De fato, voc pode remover os
menus Microsoft Excel e troc-los com menus personalizados se voc estiver criando
uma aplicao personalizada no Microsoft Excel.

O que segue so os tpicos deste texto:

Sobre Os Menus Excel Menus
Usando Macros Para Se Referir A Menus
As CommandBars
Adicionando, Mostrando E Deletando Sistema de Menu
Mais sobre CommandBars

Adicionando Um Novo Sistema de Menu
Um Exemplo de Adicionar/Remover Item de Menu
Propriedades do Item de Menu E Aparncia
Itens de Menu Especiais
Como Ocultar Todas as Coisas - Menus, Barras de Rolamentos, Etc..
O
Bertolo Lio #09 Criando e Modificando Menus do Excel 320

SOBRE OS MENUS EXCEL

Existem dois tipos bsicos de sistema de menu do Microsoft Excel: Sistemas de
menu que mostram uma barra de menu e menus pop-up (que no mostram uma barra de
menu) que aparecem quando voc clica no boto direito do mouse. O que segue ilustra
os diferentes componentes de um sistema de menu do Microsoft Excel que tem na barra
de menu:




Itens de Menu
Sub-menu

A barra de menu mantm os nomes dos menus. Estes nomes so chamados captions
(ttulos). Os menus em fila mantm os nomes dos itens de menu. Um item de menu
pode mostrar um sub-menu, rodar um comando Microsoft Excel ou rodar uma macro.
Itens de sub-menus so usados para rodar comandos do Microsoft Excel ou macros. As
barras separadoras atuam para separar visivelmente os menus em grupos lgicos.

O que segue ilustra um menu pop-up e seus componentes:

Barra de Menu Menus
Itens de Sub-menu
Barra Separadora
Bertolo Lies de VBA do Excel


321


possvel fazer o seguinte a um sistema de menu do Microsoft Excel:

Criar novos sistemas de menu que tenham sua prpria barra de menus, menus,
itens de m nu, e sub-menus.

as de menu que tenham barra de menus

Deletar ou resetar (un-delete) sistemas de menu criados pelo usurio

Adicionar ou delete menus numa barra de m

Adicionar ou deletar itens de menu num me

Habilitar e desabilitar itens num menu

Colocar marcas de verificao para itens num menu

Adicionar barras separadoras a menus

Criar menus pop-up

O que segue ilustra itens de menu que foram adicionados ao menu Inserir da planilha.
O >> que aparece na frente de cada adio era parte do texto que foi entrado para o item
de menu:

FIGURA

USANDO MACROS PARA SE REFERIR AOS MENUS

O sistema de menu no Microsoft Excel que tem barra de menus so tambm partes da
coleo CommandBars. Voc tambm pode usar CommandBars("Worksheet Menu
Bar") para referir ao sistema de menu da planilha. Os sistemas de barra de menu que
Itens de Menu
Barras Separadoras
nu
enu
Ocultar ou mostrar sistem
e
Bertolo Lio #09 Criando e Modificando Menus do Excel

322
voc criou pode ser referenciado pelo se
ado Especial, ento voc se referi
u nome. Por exemplo, se voc criou um
cham r a ele como CommandBars("Especial").

Os me rra de menus, so parte da coleo
commandbars. Comma a") faz referncia ao menu popup clula.

AS COMMANDBARS

O que segue a lista dos nomes commandbars:

Worksheet Menu Bar Nondefault Drag e Drop Order
Chart Menu Bar AutoFill Nudge
Standard Button Align ou Distribute
Formatting Dialog Rotate ou Flip
PivotTable Series Lines
Chart Plot Area Connectors
Reviewing Floor e Walls AutoShapes
Forms Trendline Callouts
Stop Recording Chart Flowchart
External Data Formula Bar Block Arrows
Auditing PivotTable Context Menu Stars & Banners
Full Screen Query Basic Shapes
Circular Reference Query Layout Shapes

Visual Basic AutoCalculate Inactive Chart
Web Object/Plot Excel Control
Control Toolbox Title Bar (Charting) Curve
Exit Design Mode Layout Curve Node
Drawing WordArt Curve Segment
Query e Pivot Picture Pictures Context

Menu

Workbook tabs Shadow Settings OLE Object
Column 3-D Settings ActiveX Control
Row Borders WordArt Context

Menu

Cell Chart Type Rotate Mode
Ply Pattern Connector
XLM Cell Font Color Built-in Menus
Document Fill Color System
Desktop Line Color


ndBars("clul
nus de atalho, que no tem ba
Bertolo Lies de VBA do Excel 323


Os nomes acima so usados para se referirem aos diferentes menus, barras de
ferramentas e menus pop-up. Por exemplo,

CommandBar s( " Cl ul a" )

efere-se ao menu pop-up clula. Infelizmente, nem todas as commandbars tm um
ttulo que aparece quando voc mostr-las, e voc deve deduzir o nome da commandbar
pela ao que ela fornece e da lista acima.

ADICIONANDO, MOSTRANDO E DELETANDO SISTEMA DE MENU

Para criar um sistema de menu, voc poder usar o mtodo Adicionar. A sintaxe :

CommandBar s. Adi ci onar " nome do menu"

Por exemplo, o comando

CommandBar s. Adi ci onar " Pessoal "

Adicionar um sistema de menu. Uma vez criado uma nova barra de menu, voc pode
ento adicionar menus e itens de menu a ela. E, voc pode tambm adicionar botes
barra de ferramentas, como discutido no texto sobre barras de ferramentas.

Para mostrar um sistema de menu personalizado que voc criou, use a seguinte sintaxe:

CommandBar s( " nome domenu" ) . Vi si bl e = Tr ue

Voc tem a opo de trocar o sistema de menu ativo, ou fazer seu novo sistema de menu
aparecer e no trocar o sistema ativo.

Para retornar aos menus da Microsoft Excel normais voc deve ativar o menu
padro que ser mostrado para a folha ativa ou ento fechar o Microsoft Excel. Assim
se a folha ativa for uma planilha, voc poder enviar o comando

MenuBar s( xl Wor ksheet ) . Act i vat e

Se a folha ativa for um grfico, voc poder enviar o comando

MenuBar s( xl Char t ) . Act i vat e.

Para deletar um sistema de menu que voc adicionou, voc poder usar o seguinte tipo
de declarao:

CommandBar s( " menu name" ) . Del et e

Por exemplo, se voc criou um sistema de menu chamado Pessoal, ento voc poder
delet-lo usando a declarao MenuBars("Pessoal").Delete.
R
Bertolo Lio #09 Criando e Modificando Menus do Excel 324


MAIS SOBRE COMMANDBARS

Como mencionado anteriormente, os menus so realmente parte da coleo
CommandBars. Isto basicamente significa que um commandbar um recipiente que
pode conter menus, ou botes, ou uma mistura dos dois.

O que segue a sintaxe completa para se criar uma commandbar:

CommandBar s. Add Name: =" nome da bar r a de comando" , _
Posi t i on: =vbconst ant
MenuBar : = Tr ue ou Fal se,
Tempor ar y: = Tr ue ou Fal se

Todos os argumentos so opcionais, e se no usados, os defaults sero usados.

O que segue so os valores do argumento Position:

Constante Descrio

msoBarLeft, msoBarTop, Indica as posies esquerda, topo,
msoBarRight, msoBarBottom direita e fundo da nova barra de comando

msoBarFloating Indica que a nova barra de comando ser uma barra
flutuante

msoBarPopup Indica que a nova barra de comando ser um menu
de atalho

Se o argumento MenuBar ajustado para True, ento ele troca a commandbar ativa. Se
o argumento Temporary ajustado para True, ento a commandbar suposta removida
quando o arquivo que a criou fechado. Entretanto, a prtica atual mostra que esta
caracterstica no funciona. Voc dever ter a sua macro para remover o menu quando
fizer um.

ADICIONANDO UM NOVO SISTEMA DE MENU

O seguinte ilustra como adicionar um novo sistema de menu com um menu, itens de
menu, e sub menus. Voc pode modificar este exemplo quando necessrio para criar e
adicionar sua prpria estrutura e adies de menu.

Sub Cr i a_Um_Novo_Si st ema_De_Menu( )
Di mMeu_Menu As CommandBar , novoCont r ol e, novoI t em, subMenu
' r emove menus per sonal i zados se exi st i r em
On Er r or Resume Next
CommandBar s( " Si st ema Novo Menu" ) . Del et e
On Er r or GoTo 0
Bertolo Lies de VBA do Excel 325


' cr i a e most r a umnovo menu
Set Meu_Menu = CommandBar s. Adi ci onar ( Name: =" Si st ema Novo
Menu" , _ Posi t i on: =msoBar Fl oat i ng, _ MenuBar : =Fal se)
Meu_Menu. Vi si bl e = Tr ue
' adi ci ona ummenu nova CommandBar
Set novoCont r ol e = _ Meu_Menu
. Cont r ol s. Adi ci onar ( Type: =msoCont r ol Popup)
novoCont r ol e. Capt i on = " Menu1"
' adi ci onar umi t emde menu ao novo menu
Wi t h novoCont r ol e
Set novoI t em=
. Cont r ol s. Adi ci onar ( Type: =msoCont r ol But t on)
Set subMenu =
. Cont r ol s. Adi ci onar ( Type: =msoCont r ol Popup)
End Wi t h
Wi t h novoI t em
. Capt i on = " I st o Di z Hel l o"
. OnAct i on = " Al "
End Wi t h
' adi ci onar umsub menu ao novo menu e adi ci onar i t ens
a el e
Wi t h subMenu
. Capt i on = " Escol has Adi ci onai s"
Set novoI t em=
. Cont r ol s. Adi ci onar ( Type: =msoCont r ol But t on)
novoI t em. Capt i on = " Exami nar Pescar i a"
novoI t em. OnAct i on = " Fi shi ngSt at us"
Set novoI t em= _
. Cont r ol s. Adi ci onar ( Type: =msoCont r ol But t on)
novoI t em. Capt i on = " Exami nar J ogo de Gol f e"
novoI t em. OnAct i on = " Gol f i ngSt at us"
End Wi t h
' adi ci onar umi t emde menu que r est aur ar os menus
or i gi nai s
Set novoI t em= _
novoCont r ol e
. Cont r ol s. Adi ci onar ( Type: =msoCont r ol But t on)
Wi t h novoI t em
. Capt i on = " Remove t he Si st ema Novo Menu"
. OnAct i on = " RemoveCust omMenu"
' Est a pr xi ma decl ar ao adi ci ona uma bar r a separ ador a
. Begi nGr oup = Tr ue
End Wi t h
' adi ci ona ummenu nova CommandBar
Set novoCont r ol e = _
Meu_Menu
. Cont r ol s. Adi ci onar ( Type: =msoCont r ol Popup)
novoCont r ol e. Capt i on = " Menu2"
Set novoI t em= _
novoCont r ol e
. Cont r ol s. Adi ci onar ( Type: =msoCont r ol But t on)
Wi t h novoI t em
Bertolo Lio #09 Criando e Modificando Menus do Excel 326

. Capt i on = " Di ga Tchau"
. OnAct i on = " Di gaTchau"
End Wi t h
End Sub

Sub SayHel l o( )
MsgBox " Al Mundo"
End Sub

Sub SayGoodBye( )
MsgBox " Tchau! "
End Sub

Sub f i shi ngSt at us( )
MsgBox " Pescar mar avi l hoso emt odo moment o! ! ! "
End Sub

Sub gol f i ngSt at us( )
MsgBox " Quemse i mpor t a? Ser i a mel hor est ar pescando! "
End Sub

Sub RemoveCust omMenu( )
CommandBar s( " Si st ema Novo Menu" ) . Vi si bl e = Fal se
End Sub


Pontos chaves sobre a adio de menus, itens de menu, e sub menus:

Itens de menu so adicionados usando um Type de msoControlButton

Menus e sub-menus so adicionados usando um Type de msoControlPopup
quando o mtodo Adicionar usado com o mtodo Controls.

O texto de menu ajustado pela propriedade Caption.

Uma macro atribuda a um item de menu usando a propriedade OnAction.

Ajustando a propriedade Visible da commandbar para False, a commandbar fica
oculta. Para deletar a commandbar, use o mtodo Delete. Voc poder ocultar uma
commandbar se voc quiser torn-la visvel mais tarde.

Ajustando a propriedade BeginGroup de um item de menu para True adiciona uma
barra separadora acima do item de menu.

UM EXEMPLO DE ADIO/REMOO DE ITEM DE MENU

O que segue so duas macros que adicionam e removem um item de menu com uma
barra separadora do menu Ferramentas do Excel.
Bertolo Lies de VBA do Excel 327



A primeira macro chamada "Auto_Open" e adiciona o item de menu quando o arquivo
for aberto. A segunda chamada "Auto_Close" e remove o item de menu quando o
arquivo for fechado. As macros com os nomes Auto_Open e Auto_Close so rodadas
automaticamente pelo Excel. Elas sero cobertas em mais detalhes num texto posterior.
Para evitar as macros de rodarem quando o arquivo est aberto ou fechado, mantenha
pressionada a tecla shift quando o arquivo aberto ou fechado.

Sub Aut o_Open( )
' i st o adi ci ona a i t emde menu ao menu Fer r ament as da
pl ani l ha quando o ar qui vo aber t o
Di mmI t em, novoI t em
Wi t h CommandBar s( " Wor ksheet Menu
_Bar " ) . Cont r ol s( " Fer r ament as" )
For Each mI t emI n . Cont r ol s
' se o i t emde menu j est pr esent e, pul e a mensagem
I f mI t em. Capt i on = " NOVO I TEM DE MENU" Then _
GoTo di spl ayMessage
Next
' adi ci ona umnovo i t emde menu
Set novoI t em=
. Cont r ol s. Adi ci onar ( Type: =msoCont r ol But t on)
End Wi t h
' aj ust a capt i on, at r i bui macr o, adi ci ona bar r a separ ador a
Wi t h novoI t em
. Capt i on = " NOVO I TEM DE MENU"
. OnAct i on = " Cal cul ar _TI R"
. Begi nGr oup = Tr ue
End Wi t h
' most r a a cai xa de mensagemdi zendo ao usur i o como usar
di spl ayMessage:
MsgBox " Par a usar a NOVO I TEM DE MENU, sel eci one ' NOVO I TEM
DE MENU' " & _
" sob o menu Fer r ament as"
End Sub

Sub Aut o_Cl ose( )
' i st o r emove o i t emde menu adi ci onado pel a macr o aci ma
quando o ar qui vo f or f echado
Di mmI t em, I As I nt eger
Wi t h CommandBar s( " Wor ksheet Menu Bar " ) . Cont r ol s( " Tool s" )
For Each mI t emI n . Cont r ol s
I = I + 1
' ver i f i que o i t emde menu; del et e se encont r ado
I f mI t em. Capt i on = " NOVO I TEM DE MENU" Then
. Cont r ol s( I ) . Del et e
' sai a do l ao quando o i t emf or r emovi do
Exi t For
End I f
Next
Bertolo Lio #09 Criando e Modificando Menus do Excel 328

End Wi t h
End Sub

PROPRIEDADES e APARNCIA do ITEM DE MENU

Um item de menu tem trs propriedades que voc pode mudar aps o item de menu ter
sido adicionado a um menu. Elas so:

Caption
Enabled
State (usado para adicionar ou remover marcas de verificao pelo item de menu)

As propriedades Caption permitem-lhe entrar com um texto de descrio diferente para
o item de menu. A propriedade State pode ser ajustada para msoButtonDown para
mostrar um checkmark (visto) pelo item. Se ajustado para msoButtonUp, que o
default, no h checkmark. Se a propriedade Enabled ajustada para True, que o
default, o item de menu rodar a macro associada com o item. Se a propriedade
Enabled ajustada para False, ento o item de menu aparecer prateado e no rodar a
macro associada.

Por exemplo, o que segue adiciona dois itens de menu ao menu Data. Ela tambm
desabilita o Segundo item de menu de modo que somente o primeiro pode ser rodado:

Sub Menu_I t em_Exempl o( )
Di moMenu, novoI t em
' adi ci ona o pr i mei r o i t emde menu ao menu dat a
Wi t h CommandBar s( " Wor ksheet Menu Bar " ) . Cont r ol s( " Dat a" )
Set novoI t em=
. Cont r ol s. Adi ci onar ( Type: =msoCont r ol But t on)
End Wi t h
' at r i bui nome e macr o ao i t emde menu. Tambm, col oca uma
' l i nha separ ador a aci ma del e aj ust ando o Begi nGr oup par a
Tr ue
Wi t h novoI t em
. Capt i on = " Load Dat a - St ep 1"
. OnAct i on = " Load_Dat a_St ep1"
. Begi nGr oup = Tr ue
End Wi t h
' adi ci ona umsegundo i t emde menu, mas desabai l i t a- o
Wi t h CommandBar s( " Wor ksheet Menu Bar " ) . Cont r ol s( " Dados" )
Set novoI t em=
. Cont r ol s. Adi ci onar ( Type: =msoCont r ol But t on)
End Wi t h
Wi t h novoI t em
. Capt i on = " Load Dat a - St ep 2"
. OnAct i on = " Load_Dat a_St ep2"
. Enabl ed = Fal se
End Wi t h
Bertolo Lies de VBA do Excel 329


End Sub


Voc pode ento usar as declaraes seguintes na macro Load_Data_Step1 chamada
pelo primeiro item de menu para colocar um check mark no seu item de menu,
desabilitar o item de menu, e habilitar o passo 2 do item de menu:

Wi t h CommandBar s( " Wor ksheet Menu Bar " ) . Cont r ol s( " Dat a" )
. Cont r ol s( " Load Dat a - St ep 1" ) . Enabl ed = Fal se
. Cont r ol s( " Load Dat a - St ep 1" ) . St at e =
msoBut t onDown
. Cont r ol s( " Load Dat a - St ep 2" ) . Enabl ed = Tr ue
End Wi t h

Se voc precisar fazer a propriedade Enabled mudar dependendo de qual folha est
ativa, ento voc pode criar uma macro que roda cada vez uma folha diferente seja
ativada. Esta macro poder ento ser ajustada nas propriedades Checked e Enabled dos
itens de menu aps ela determinar qual folha est ativa. A sintaxe par este comando :

Appl i cat i on. OnSheet Act i vat e = " nome da macr o"

A macro especificada ser tambm rodada se voc trocar de uma pasta para outra. Para
desabilitar este comando, ajuste-o igual a uma string vazia, (duas aspas duplas, "")

Appl i cat i on. OnSheet Act i vat e = " "

ITENS DE MENUS ESPECIAIS

Voc colocar trs novos itens de menu ou botes na sua barra de ferramentas ou
menus. Estes novos itens so uma caixa de edio, uma caixa de lista drop-down, e a
lista de edio drop-down combinada. Elas comportam-se exatamente como os mesmos
itens sobre um formulrio de usurio (userform). Por exemplo, voc pode atribuir
valores, ajustar macros OnAction, e voc pode pedir pelos ajustes e contedos. Isto
ilustrado melhor no seguinte exemplo de macros:

Sub New_Menu_I t em_Exempl o( )
Di mnewBar , newMenu, novoI t em
' r emove a ant i ga command bar se exi st i r
On Er r or Resume Next
CommandBar s( " Exempl o Novo Menu" ) . Del et e
On Er r or GoTo 0
' cr i a nova bar r a
Set newBar = CommandBar s. Add( " Exempl o Novo Menu" )
newBar . Vi si bl e = Tr ue
' Adi ci onar umi t emde menu a el a
Set newMenu = newBar . Cont r ol s. Add( Type: =msoCont r ol Popup)
newMenu. Capt i on = " Exempl o Novo Menu"
' Adi ci onar umi t emde menu cai xa de edi o ao menu e at r i bui r
uma macr o OnAct i on
Bertolo Lio #09 Criando e Modificando Menus do Excel 330

Set novoI t em= newMenu. Cont r ol s. Add( Type: = _
msoCont r ol Edi t )
novoI t em. OnAct i on = " Di spl ay_Edi t _Box_Ent r y"
novoI t em. Capt i on = " Ent r e coma Descr i o: "
' Adi ci onar umi t emde menu dr opdown, at r i bui r val or es, e uma
macr o OnAct i on
Set novoI t em= newMenu. Cont r ol s. Add( Type: =msoCont r ol Dr opdown)
Wi t h novoI t em
. Capt i on = " Sel eci one UmI t em"
. OnAct i on = " Di spl ay_Dr op_Down_Sel ect i on"
. AddI t emText : =" Pr i mei r o I t em" , I ndex: =1
. AddI t emText : =" Segundo I t em" , I ndex: =2
. AddI t emText : =" Ter cei r o I t em" , I ndex: =3
. AddI t emText : =" Quar t o I t em" , I ndex: =4
. AddI t emText : =" Qui nt o I t em" , I ndex: =5
. AddI t emText : =" Sext o I t em" , I ndex: =6
. Dr opDownLi nes = 5
. Dr opDownWi dt h = 75
. Li st Header Count = 2
End Wi t h
' Adi ci onar umi t emde menu combo edi o dr op- down, ' at r i bui r
val or es, e uma macr o OnAct i on
Set novoI t em= newMenu. Cont r ol s. Add( Type: = _
msoCont r ol ComboBox)
Wi t h novoI t em
. Capt i on = " Sel eci onar ou Ent r ar comUmMs"
. OnAct i on = " Di spl ay_Combo_Box_Sel ect i on"
. AddI t emText : =" J anei r o" , I ndex: =1
. AddI t emText : =" Fever ei r o" , I ndex: =2
. AddI t emText : =" Mar o" , I ndex: =3
. AddI t emText : =" Abr i l " , I ndex: =4
. AddI t emText : =" Mai o" , I ndex: =5
. AddI t emText : =" J unho" , I ndex: =6
. Dr opDownLi nes = 5
. Dr opDownWi dt h = 75
. Li st Header Count = 0
End Wi t h
End Sub

Sub Di spl ay_Edi t _Box_Ent r y( )
' most r a os cont edos da cai xa de edi o
MsgBox CommandBar s( " Novo menu Exempl os" ) _
. Cont r ol s( 1) . Cont r ol s( 1) . Text
End Sub

Sub Di spl ay_Dr op_Down_Sel ect i on( )
' most r a o cont edo da cai xa dr op down
Wi t h CommandBar s( " Novo menu Exempl os" ) _
. Cont r ol s( 1) . Cont r ol s( 2)
MsgBox " I t em" & . Li st I ndex & " sel eci onado. " & _
" Seu t ext o : " & . Li st ( . Li st I ndex)
End Wi t h
Bertolo Lies de VBA do Excel 331


End Sub

Sub Di spl ay_Combo_Box_Sel ect i on( )
' most r a os cont edos da cai xa de edi o dr op- down
Wi t h CommandBar s( " Exempl oNovo Menu" ) _
. Cont r ol s( 1) . Cont r ol s( 3)
I f . Li st I ndex = 0 Then
MsgBox . Text
El se
MsgBox " I t em" & . Li st I ndex & " sel eci onado. " & _
" Seu t ext o : " & . Li st ( . Li st I ndex)
End I f
End Wi t h
End Sub

COMO OCULTAR TODAS AS COISAS - MENUS, BARRAS DE
ROLAMENTO, ETC..

Menus so partes da coleo commandbar. Voc pode ajustar a propriedade Enabled de
uma commandbar para False par ocult-la. Se o menu que mostrado a Worksheet
Menu Bar, o que segue a ocultar:

CommandBar s( " Wor ksheet Menu Bar " )
. Enabl ed = Fal se

Ou voc pode usar um comando For..Next e laar todas as commandbars e ajustar a
propriedade Enabled para False, ocultando ambos os menus e barras de ferramentas.
Ajustando a propriedade Enabled para True mostrar quaisquer menus e commandbars
que eram visveis inicialmente.

Outras aes que voc pode querer que sua macro faa so:

Ocultar a barra de frmula
Ocultar a barra de status
Ocultar as alas das folhas
Ocultar as barras de rolamento
Ocultar os cabealhos de linhas e colunas
Ajustar a viso de tela cheia para ocultar a barra de ttulos da aplicao, ou atribuir
seu prprio nome barra (Application.Caption a propriedade)

Se voc ajustou a Application.DisplayFullScreen para True, voc poder tambm
ajustar ThisWorkbook.Protect Windows para True para eliminar o boto minimizar,
maximizar, restaurar e a linha que os mantm.

Se voc ocultar estes itens, voc precisa armazenar os ajustes originais de modo que
voc possa restaurar quando voc quiser. melhor armazenar os ajustes numa planilha
(como feito com as macros em ocultar as barras de ferramentas). Este modo, se uma
de suas macros encontrar uma declarao End, os ajustes no sero perdidos. Tambm,
Bertolo Lio #09 Criando e Modificando Menus do Excel 332

ele faz a depurao e edio de seu cdigo mais facilmente, desde que a edio reajusta
os valores de quaisquer variveis do Visual Basic usadas para armazenar ajustes.

Voc tambm pode querer ocultar todas as linhas e colunas que voc no quer que o
usurio tenha acesso. E, voc pode querer ocultar todos os itens no menu pop-up clula
e desabilitar todas as combinaes de teclas CTRL atribuindo-as a uma macro muda que
no faa nada.

O que segue ilustra os conceitos acima, e usa as macros para ocultar barra de
ferramentas discutidas num texto anterior. Por favor ela deve ser rodada de uma planilha
ou um erro ocorrer.

Sub DemoRun( )
St or eOpt i onSet t i ngs
Hi deOpt i onI t ems
Hi deCommandbar s
Appl i cat i on. Scr eenUpdat i ng = Tr ue
MsgBox " Est Tudo Ocul t o"
ShowCommandbar s
ShowOpt i onI t ems
End Sub

Sub St or eOpt i onSet t i ngs( )
Wi t h Act i veWi ndow
Cel l s( 1, 2) = . Di spl ayHor i zont al Scr ol l Bar
Cel l s( 2, 2) = . Di spl ayVer t i cal Scr ol l Bar
Cel l s( 3, 2) = . Di spl ayWor kbookTabs
End Wi t h
Wi t h Appl i cat i on
Cel l s( 4, 2) = . Di spl ayFor mul aBar
Cel l s( 5, 2) = . Di spl aySt at usBar
End Wi t h
Cel l s( 6, 2) = Act i veWi ndow. Di spl ayHeadi ngs
End Sub

Sub Hi deOpt i onI t ems( )
Appl i cat i on. Scr eenUpdat i ng = Fal se
Act i veWi ndow. Wi ndowSt at e = xl Maxi mi zed
Thi sWor kbook. Pr ot ect Wi ndows: =Tr ue
Wi t h Act i veWi ndow
. Di spl ayHor i zont al Scr ol l Bar = Fal se
. Di spl ayVer t i cal Scr ol l Bar = Fal se
. Di spl ayWor kbookTabs = Fal se
End Wi t h
Wi t h Appl i cat i on
. Di spl ayFor mul aBar = Fal se
. Di spl aySt at usBar = Fal se
End Wi t h
Act i veWi ndow. Di spl ayHeadi ngs = Fal se
End Sub
Bertolo Lies de VBA do Excel 333



Sub ShowOpt i onI t ems( )
Act i veWi ndow. Wi ndowSt at e = xl Maxi mi zed
Thi sWor kbook. Pr ot ect Wi ndows: =Fal se
Wi t h Act i veWi ndow
. Di spl ayHor i zont al Scr ol l Bar = Cel l s( 1, 2)
. Di spl ayVer t i cal Scr ol l Bar = Cel l s( 2, 2)
. Di spl ayWor kbookTabs = Cel l s( 3, 2)
End Wi t h
Wi t h Appl i cat i on
. Di spl ayFor mul aBar = Cel l s( 4, 2)
. Di spl aySt at usBar = Cel l s( 5, 2)
End Wi t h
Act i veWi ndow. Di spl ayHeadi ngs = Cel l s( 6, 2)
End Sub

Sub Hi deCommandbar s( )
Di mcBar As CommandBar
For Each cBar I n CommandBar s
cBar . Enabl ed = Fal se
Next
Appl i cat i on. Di spl ayFor mul aBar = Fal se
End Sub

Sub ShowCommandbar s( )
Di mcBar As CommandBar
For Each cBar I n CommandBar s
cBar . Enabl ed = Tr ue
Next
End Sub

SUMRIO

Embora este texto forneceu alguns comandos muito complexos , voc precisa so-mente
usar aqueles que vo de encontro s suas necessidades. Por exemplo, freqentemente
eu uso apenas o editor de menu editor para adicionar um novo item de menu ao menu.
Desde que eu use o editor de menu, este novo item aparece somente quando a pasta em
que ele foi criado aberta.

Bertolo Lio #09 Criando e Modificando Menus do Excel 334


Exemplos de CommandBar e Menus

Usando Dilogos Built-In do Excel

Microsoft Excel tem mais de 200 dilogos embutidos (built-in) que voc pode usar em
suas macros. Para mostrar um dilogo embutido (built-in), voc usar uma declarao
como a seguinte:

Appl i cat i on. Di al ogs( vb const ant ) . Show
ou r espost a = Appl i cat i on. Di al ogs( vb const ant ) . Show

Por exemplo, o que segue mostra o dilogo de seleo de impressora embutida:

Appl i cat i on. Di al ogs( xl Di al ogPr i nt ) . Show
ou r espost a = Appl i cat i on. Di al ogs( xl Di al ogPr i nt ) . Show

A primeira declarao apenas mostra a caixa. A segunda declarao mostra a caixa e
determina varivel resposta o valor True se o boto OK foi selecionado, e o valor
False se o boto Cancel foi selecionado. O que est acima no somente mostra a caixa
de dilogo, mas emprega a ao que a caixa foi planejada a fazer se OK selecionado na
caixa. Por favor note que nem todas as constantes "xlDialog" mostraro um dilogo
embutido.
Ambas declaraes usam uma constante Visual Basic para indicar qual caixa de
dilogo mostrar. As constantes do Visual Basic que iniciam com "xlDialog" so aquelas
para se usarem.
Por favor note que nem todas as constantes "xlDialog" mostraro um dilogo
embutido. Para ver uma lista das constantes, faa o seguinte:

Mostre o Object Browser, selecione "<All Librarys>". Na lista Classes,
selecione "xlBuiltInDialog". Uma lista das constantes aparecer na caixa de
listagem membros.

Por exemplo, se voc quiser que a caixa de dilogo aparea quando voc gravar um
novo arquivo, voc poder usar a seguinte declarao:

Appl i cat i on. Di al ogs( xl Di al ogOpen) . Show

Para mostrar o dilogo Salvar Como e garantir que o seu uso salvou o arquivo, voc
poder usar as seguintes declaraes:

Do
r espost a = Appl i cat i on. Di al ogs( xl Di al ogSaveAs) . Show
Loop Unt i l r espost a = Tr ue

Bertolo Lies de VBA do Excel 335


Exemplos Adicionais do uso de Salvar Como e dilogos embutidos DialogOpen so
encontrados na seo arquivos.

O que segue uma lista de apenas umas poucas constantes do Visual Basic e a caixa de
dilogos que elas mostram.


Constante Caixa de Dilogo

xlDialogOpen A caixa para abrir arquivo
xlDialogSaveAs A caixa Salvar Como
xlDialogSetPrintTitles A caixa set print titles (do Excel 4)
xlDialogChartWizard O assistente (wizard) de diagramas
xlDialogCreateNames A caixa para criar nomes
xlDialogFont A caixa fonte de clula
xlDialogGoalSeek A caixa goal seek
xlDialogUnhide A caixa para ocultar um arquivo
xlDialogZoom A caixa de zoom

Um cuidado ao se usar a caixa de dilogos Microsoft Excel: Se voc tentar mostrar uma
caixa de dilogo embutido numa folha onde ela no pode ser usada, ela falhar. Por
exemplo, a caixa zoom no pode ser usada numa folha de mdulo. Mas ela funciona
bem se a folha ativa uma planilha ou uma folha de diagramas.

CommandBar.Add Produz Err 91 na Workbook_Open

Quando se referir ao objeto CommandBars num procedimento evento tal como o
cdigo abrir pasta num mdulo de objeto pasta, voc precisa preced-lo pelo
Application:

Set cbar Mi ne = Appl i cat i on. CommandBar s _
. Add( " My Tool bar " , msoBar Top, Tr ue, Tr ue)

se voc no fizer, voc pode obter uma mensagem Err 91.

Adicionando Um tem de Menu A Um Menu

O que segue so quatro macros que adicionam e removem um item de menu com uma
barra separadora de um menu. A primeira chamada "Auto_Open" e chama uma rotina
chamada AddMenuItem que adiciona um novo item de menu a um menu nos menus de
planilha. A segunda chamada "Auto_Close" e chama uma rotina chamada
RemoveMenuAddition que remove o item de menu quando o arquivo fechado. Voc
pode chamar AddMenuItem e RemoveMenuAddition repetidamente para adicionar
mltiplos tens de menus. Macros com os nomes Auto_Open e Auto_Close, so
rodadas automaticamente pelo Excel, quando um arquivo aberto ou fechado.

Sub Aut o_Open( )
Bertolo Lio #09 Criando e Modificando Menus do Excel 336

'Chama a rotina que adiciona o item, especificando o menu da planilha para
' o novo item de menu, o nome a aparecer no menu, a macro a ser rodada,
'e se adiciona uma barra separadora acima ou no ao novo item
AddMenuI t em" Fer r ament as" , " Conver t er Ar qui vos" , _
" Mai n_Pr ocedur e_For _Conver t i ng_Fi l es" , Tr ue
End Sub

Sub Aut o_Cl ose( )
'Chama a rotina que remove um item de menu do menu da planilha
'especificando o nome do menu e o nome do item de menu.
RemoveMenuAddi t i on " Fer r ament as" , " Conver t er Ar qui vos"
End Sub

Sub AddMenuI t em( menuName As St r i ng, i t emName As St r i ng, _
macr oName As St r i ng, bAddSeper at or As Bool ean)
Di mmI t em, newI t em
'isto remove item se ele estiver num menu
RemoveMenuAddi t i on menuName, i t emName
'adiciona novo item de menu; setting uma propriedade temporria para
' verdadeiro (true) garantindo que o item de menu desaparece quando o Excel
fechado
Wi t h CommandBar s( " Wor ksheet Menu Bar " ) . Cont r ol s( menuName)
Set newI t em= . Cont r ol s. Add( Type: =msoCont r ol But t on, _
t empor ar y: =Tr ue)
End Wi t h
'configura o caption, associa uma macro, adiciona barra separadora
Wi t h newI t em
. Capt i on = i t emName
. OnAct i on = macr oName
. Begi nGr oup = bAddSeper at or
End Wi t h
End Sub

Sub RemoveMenuAddi t i on( menuName As St r i ng, i t emName As St r i ng)
Di mmI t em, I As I nt eger
'isto remove o item de menu adicionado pela macro acima quando o arquivo
fechado
Wi t h CommandBar s( " Wor ksheet Menu Bar " ) . Cont r ol s( menuName)
For Each mI t emI n . Cont r ol s
I = I + 1
'verifica um item de menu; delete se encontra
I f mI t em. Capt i on = i t emName Then
. Cont r ol s( I ) . Del et e
'sai do lao quando o item tiver sido removido
Exi t For
End I f
Next
End Wi t h
End Sub
Bertolo Lies de VBA do Excel 337



Adicionando Um Menu e Sub Menus ao Menu Da Planilha

O que segue ilustra como adicionar um novo menu ao menu de planilha, e da ento
como adicionar item de menus e sub menus ao novo menu. Por simplicidade, todos os
tens de menus que tem uma propriedade OnAction so configurados para rodar a
mesma macro, "AlMundo". Na sua aplicao, voc pode usar diferentes OnActions.

Sub Addi ngMenusAndSubMenus( )
Di mc
'deleta o novo menu se ele existir - chama todas as sub-rotinas listadas abaixo
Remove_New_Menu
'adiciona o novo menu ao menu da planilha antes do menu ajuda
Wi t h Appl i cat i on. CommandBar s( 1) . Cont r ol s. _
Add( msoCont r ol Popup, , , 9, Tr ue)
. Capt i on = " MeuMenu"
'adiciona um item de menu ao novo menu
Set c = . Cont r ol s. Add( msoCont r ol But t on)
c. Capt i on = " I t em1"
c. OnAct i on = " Al Mundo"
'adiciona um sub menu ao novo menu
Wi t h . Cont r ol s. Add( msoCont r ol Popup)
. Capt i on = " I t em2"
'adiciona um item de menu ao menu sub
Set c = . Cont r ol s. Add( msoCont r ol But t on)
c. Capt i on = " Sub 1 I t em1"
c. OnAct i on = " Al Mundo"
'adiciona um sub menu ao menu sub
Wi t h . Cont r ol s. Add( msoCont r ol Popup)
. Capt i on = " Sub 1 I t em2"
'adiciona trs itens de menu ao sub menu mais baixo
Set c = . Cont r ol s. Add( msoCont r ol But t on)
c. Capt i on = " Sub 2 I t em1"
c. OnAct i on = " Al Mundo"
Set c = . Cont r ol s. Add( msoCont r ol But t on)
c. Capt i on = " Sub 2 I t em2"
c. OnAct i on = " Al Mundo"
Set c = . Cont r ol s. Add( msoCont r ol But t on)
c. Capt i on = " Sub 2 I t em3"
c. OnAct i on = " Al Mundo"
End Wi t h
'adiciona a menu item to first sub menu
Set c = . Cont r ol s. Add( msoCont r ol But t on)
c. Capt i on = " Sub 1 I t em3"
c. OnAct i on = " Al Mundo"
End Wi t h
'adiciona a menu item to the menu
Set c = . Cont r ol s. Add( msoCont r ol But t on)
c. Capt i on = " I t em3"
c. OnAct i on = " Al Mundo"
Bertolo Lio #09 Criando e Modificando Menus do Excel 338

End Wi t h
End Sub

Sub Al Mundo( )
MsgBox " al mundo"
End Sub

Quando a pasta fechada, o que segue roda e remove o novo menu.

Sub Aut o_Cl ose( )
Remove_New_Menu
End Sub

Sub Remove_New_Menu( )
Di mc
'deleta o novo o novo menu se ele existir
For Each c I n Appl i cat i on. CommandBar s( 1) . Cont r ol s
I f c. Capt i on = " MeuMenu" Then c. Del et e
Next
End Sub

Como Adicionar Uma Nova Barra de Menu Semelhante Barra de Menu da
Planilha

O que segue adiciona uma barra de menu como a barra de menu da planilha, exceto que
os menus so chamados Menu1 e Menu2.

Sub Cr eat e_A_New_Menu_Syst em( )
Di mMy_Menu As CommandBar , newCont r ol , newI t em, subMenu
' r emove menus per sonal i zados se exi st i r em
On Er r or Resume Next
CommandBar s( " New Menu Syst em" ) . Del et e
On Er r or GoTo 0
' cr i a umnovo menu e most r a- o
Set My_Menu = CommandBar s. Add( Name: =" New Menu Syst em" , _
Posi t i on: =msoBar Top, _
MenuBar : =Fal se)
My_Menu. Vi si bl e = Tr ue
' adi ci ona ummenu nova CommandBar
Set newCont r ol = My_Menu. Cont r ol s. Add( Type: =msoCont r ol Popup)
newCont r ol . Capt i on = " Menu1"
' adi ci ona umi t emde menu ao novo menu
Wi t h newCont r ol
Set newI t em= . Cont r ol s. Add( Type: =msoCont r ol But t on)
Set subMenu = . Cont r ol s. Add( Type: =msoCont r ol Popup)
End Wi t h
Wi t h newI t em
. Capt i on = " I st o di z Al "
. OnAct i on = " SayHel l o"
Bertolo Lies de VBA do Excel 339


End Wi t h
' adi ci ona umsub menu ao novo menu e adi ci ona i t ems a el e
Wi t h subMenu
. Capt i on = " Escol has Adi ci onai s"
Set newI t em= . Cont r ol s. Add( Type: =msoCont r ol But t on)
newI t em. Capt i on = " Conf er i r a Pesca"
newI t em. OnAct i on = " Fi shi ngSt at us"
Set newI t em= _
. Cont r ol s. Add( Type: =msoCont r ol But t on)
newI t em. Capt i on = " Conf er i r o J ogo de Gol f e"
newI t em. OnAct i on = " Gol f i ngSt at us"
End Wi t h
' adi ci ona umi t emde menu que r est aur a os menus or i gi nai s
Set newI t em= _
newCont r ol . Cont r ol s. Add( Type: =msoCont r ol But t on)
Wi t h newI t em
. Capt i on = " Remover o novo si st ema de menu"
. OnAct i on = " RemoveCust omMenu"
' Est a pr xi ma decl ar ao adi ci ona uma bar r a separ ador a
. Begi nGr oup = Tr ue
End Wi t h
' adi ci ona ummenu nova CommandBar
Set newCont r ol = My_Menu. Cont r ol s. Add( Type: =msoCont r ol Popup)
newCont r ol . Capt i on = " Menu2"
Set newI t em=
newCont r ol . Cont r ol s. Add( Type: =msoCont r ol But t on)
Wi t h newI t em
. Capt i on = " Di z Tchau"
. OnAct i on = " Di zTchau"
End Wi t h
End Sub
Sub SayHel l o( )
MsgBox " Al Mundo"
End Sub

Sub Di zTchau( )
MsgBox " Tchau! "
End Sub

Sub f i shi ngSt at us( )
MsgBox " Pescar mar avi l hoso o t empo t odo! ! ! "
End Sub

Sub gol f i ngSt at us( )
MsgBox " Quemse i mpor t a? Ser i a mel hor pescar ! "
End Sub

Sub RemoveCust omMenu( )
CommandBar s( " New Menu Syst em" ) . Del et e
End Sub
Bertolo Lio #09 Criando e Modificando Menus do Excel 340


Boto Como Controle Sobre Um Menu

O que segue cria uma barra de comando flutuante que tem boto como item de menu
alm de um menu de item drop down:

Sub Fl oat i ng_New_Menu_Syst em( )
Di mnewMenu As CommandBar , newCont r ol , newI t em, subMenu
'remove menu personalizado se ele existir
On Er r or Resume Next
CommandBar s( " New Menu Syst em" ) . Del et e
On Er r or GoTo 0
'cria novo menu e mostra-o
Set newMenu = CommandBar s. Add( Name: =" New Menu Syst em" , _
Tempor ar y: =Tr ue, _
MenuBar : =Fal se)
newMenu. Vi si bl e = Tr ue
'adiciona um menu ao novo CommandBar
Set newCont r ol =
newMenu. Cont r ol s. Add( Type: =msoCont r ol Popup)
newCont r ol . Capt i on = " Menu1"
'adiciona um item de menu ao novo menu
Wi t h newCont r ol
Set newI t em= . Cont r ol s. Add( Type: =msoCont r ol But t on)
End Wi t h
Wi t h newI t em
. Capt i on = " Thi s Says Hel l o"
. OnAct i on = " SayHel l o"
End Wi t h
'adiciona um segundo controle que atua como um boto
Set newI t em= newMenu. Cont r ol s. Add( _
Type: =msoCont r ol But t on, Tempor ar y: =Tr ue)
Wi t h newI t em
. Capt i on = " Cont r ol Text "
. St yl e = msoBut t onCapt i on
. Tool t i pText = " Cont r ol Tool Ti p"
. OnAct i on = " SayHel l o"
End Wi t h
End Sub

Sub SayHel l o( )
MsgBox " Hel l o"
End Sub

Ocultando O Menu Da Planilha

Voc pode ocultar o menu de planilha Excel usando a seguinte declarao

Appl i cat i on. CommandBar s( 1) . Enabl ed = Fal se
Bertolo Lies de VBA do Excel 341



Entretanto, se voc pressionar a tecla ALT e da as teclas setas, o menu mostrado
novamente. Existe um modo fcil para resolver o acesso s teclas ALT para desabilitar
menus:

Appl i cat i on. CommandBar s( 1) . Enabl ed = Fal se
MenuBar s. Add. Act i vat e

A segunda linha evita a tecla ALT de funcionar criando e ativando uma barra de menu
em branco. Como ela no tem menus, ela no visvel ou acessvel.


Para recuperar os menus, use as declaraes seguintes:

Appl i cat i on. CommandBar s( 1) . Enabl ed = Tr ue
MenuBar s( xl Wor ksheet ) . Act i vat e

Colocando Um DropDown Numa Barra de Comando (CommandBar)

O que segue cria uma barra de comando com um dropdown nela e responde com a
seleo do usurio.

Sub CommandBar Demo( )
Di mcBar As CommandBar
Di mI As I nt eger
'delete a barra se ela existir
On Er r or Resume Next
CommandBar s( " Combo Bar " ) . Del et e
On Er r or GoTo 0
'cria a barra de comando e a torna visvel
Set cBar = CommandBar s. Add( " Combo Bar " , msoBar Fl oat i ng)
cBar . Vi si bl e = Tr ue
'adiciona um controle dropdown
Wi t h cBar . Cont r ol s. Add( msoCont r ol Dr opdown)
'atribui uma macro ao drop down
. OnAct i on = Thi sWor kbook. Name & " ! Dr opDownOnAct i on"
'make wider:
. Wi dt h = 200
'adiciona items caixa drop down
For I = 1 To 10
. AddI t em" i t emdr op down " & I
Next
End Wi t h
End Sub

Sub Dr opDownOnAct i on( )
'isto mostra o que foi selecionado
Wi t h CommandBar s. Act i onCont r ol
Bertolo Lio #09 Criando e Modificando Menus do Excel 342

MsgBox " Voc sel eci onou " & . Text
End Wi t h
End Sub

Criando Um Menu Que Aparece Somente Quando Uma Pasta Particular
Est Ativa

O que segue code ilustra como ter um nico menu adicionado ao menu de
planilha sempre que uma pasta particular est ativa. Para fazer isto, coloque o cdigo
seguinte no mdulo de cdigo da pasta:

Pr i vat e Sub Wor kbook_Deact i vat e( )
'chama a rotina que remove o menu para esta workbook
Remove_Wor kbook_Menu
End Sub

Pr i vat e Sub Wor kbook_Act i vat e( )
'chama a rotina que adiciona o menu para esta workbook
Add_Wor kbook_Menu_And_I t ems
End Sub

Voc pode acessar o mdulo de cdigo da workbook clicando o boto direito
sobre o objeto workbook no Project Explorer e selecionando exibir cdigo

Num mdulo de cdigo regular, coloque o seguinte cdigo:

Sub Remove_Wor kbook_Menu( )
'isto remove o menu se ele estiver presente
On Er r or Resume Next
CommandBar s( " Wor ksheet Menu
Bar " ) . Cont r ol s( " OPTI ONS" ) . Del et e
On Er r or GoTo 0
End Sub

Sub Add_Wor kbook_Menu_And_I t ems( )
Di mnewMenu
Di mnewMenuI t em
'deleta o menu se ele existir chamando esta subroutina
Remove_Wor kbook_Menu
'adiciona um novo menu ao menu de planilha. O menu temporrio e
'desaparecer quando o Excel fechar
Wi t h CommandBar s( " Wor ksheet Menu Bar " )
Set newMenu = . Cont r ol s. Add( _
Type: =msoCont r ol Popup, _
bef or e: =. Cont r ol s( " Wi ndow" ) . I ndex, _
End Wi t h
'd um nome ao novo menu
newMenu. Capt i on = " OPTI ONS"
t empor ar y: =Tr ue)

Bertolo Lies de VBA do Excel 343


'adiciona um item de menu ao novo menu
Set newMenuI t em=
newMenu. Cont r ol s. Add( Type: =msoCont r ol But t on)
'd um nome ao novo menu e atribui uma macro a ele
newMenuI t em. Capt i on = " Menu I t em1"
newMenuI t em. OnAct i on = " MenuI t em1OnAct i on"
'adiciona um segundo item de menu ao novo menu
Set newMenuI t em=
newMenu. Cont r ol s. Add( Type: =msoCont r ol But t on)
'd um nome ao novo menu e atribui uma macro a ele
newMenuI t em. Capt i on = " menu I t em2"
newMenuI t em. OnAct i on = " MenuI t em2Onact i on"
End Sub

Finalmente, cria uma macro Auto_Close que chama a macro Remove_Menu quando a
pasta fechada e uma macro Auto_Open que mostra o menu quando a pasta aberta
inicialmente.

Sub Aut o_Cl ose( )
Remove_Wor kbook_Menu
End Sub

Sub Aut o_Cl ose( )
Add_Wor kbook_Menu_And_I t ems
End Sub

Adicionando Um Menu E Itens de Menu Ao Menu da Planilha

O que segue adiciona um menu no final do menu da planilha, e da adiciona itens de
menu e sub menus a ele.

Sub AddMenu( )
Wi t h Appl i cat i on. CommandBar s( 1) . Cont r ol s _
. Add( msoCont r ol Popup)
. Capt i on = " NovoMenu"
. Cont r ol s. Add( msoCont r ol But t on)
. Capt i on = " I t em1"
Wi t h . Cont r ol s. Add( msoCont r ol Popup)
. Capt i on = " I t em2"
. Cont r ol s. Add( msoCont r ol But t on)
. Capt i on = " Sub1I t em2"
Wi t h . Cont r ol s. Add( msoCont r ol Popup)
. Capt i on = " Sub2I t em2"
. Cont r ol s. Add( msoCont r ol But t on) _
. Capt i on = " Sub1Sub2"
. Cont r ol s. Add( msoCont r ol But t on) _
. Capt i on = " Sub2Sub2"
. Cont r ol s. Add( msoCont r ol But t on) _
. Capt i on = " Sub3Sub2"
End Wi t h
Bertolo Lio #09 Criando e Modificando Menus do Excel 344

. Cont r ol s. Add( msoCont r ol But t on)
. Capt i on = " Sub3I t em2"
End Wi t h
. Cont r ol s. Add( msoCont r ol But t on)
. Capt i on = " I t em3"
End Wi t h
End Sub

Adicionando Um Novo Menu Ao Menu De Planilha

O cdigo que segue um outro exemplo que adiciona um novo menu personalizado ao
menu da planilha, exatamente antes do menu Ajuda, e coloca dois comandos nele. A
propriedade OnAction especifica a macro que cada comando roda:

Publ i c Sub AddCust omMenu( )
Di mbar WS As CommandBar
Di mmnuCust omAs CommandBar Cont r ol
Di mHel pI ndex As I nt eger
Set bar WS = CommandBar s( " Wor ksheet Menu Bar " )
Hel pI ndex = bar WS. Cont r ol s( " Aj uda" ) . I ndex
Set mnuCust om= bar WS. Cont r ol s. Add( Type: =msoCont r ol Popup, _
Bef or e: =Hel pI ndex)
Wi t h mnuCust om
. Capt i on = " &Per sonal i zado"
Wi t h . Cont r ol s. Add( Type: =msoCont r ol But t on)
. Capt i on = " &Most r ar o For mul r i o de Dados"
. OnAct i on = " Most r ar For mul ar i oDados"
End Wi t h
Wi t h . Cont r ol s. Add( Type: =msoCont r ol But t on)
. Capt i on = " &I mpr i mi r Li st a de Dados"
. OnAct i on = " I mpr i mi r Li st aDados"
End Wi t h
End Wi t h
End Sub
Bertolo Lies de VBA do Excel 345


Desabilita o Menu Salvar Como

O que segue desabilitar o item de menu Salvar Como no menu da planilha:

Sub Desabi l i t aI t emMenuSaveAs( )
Wi t h CommandBar s( " Wor ksheet Menu Bar " )
Wi t h . Cont r ol s( " Ar qui vo" )
. Cont r ol s( " Sal var Como. . . " ) . Enabl ed = Fal se
End Wi t h
End Wi t h
End Sub

Colocando de volta a propriedade Enabled para True ela liga o item de menu Salvar
Como.

Recompondo Os Menus

O que segue restaurar os menus da planilha:

MenuBar s( xl Wor ksheet ) . Reset

Por favor note que isto remover toadas as modificaes feitas por quaisquer add-in.

Protegendo Commandbars

Para proteger uma commandbar de modificao, use uma declarao como a que segue:

CommandBar s( " Wor ksheet Menu Bar " ) . Pr ot ect i on = msoBar NoCust omi ze

Para remover a proteo, use:

CommandBar s( " Wor ksheet Menu Bar " ) . Pr ot ect i on =
msoBar NoPr ot ect i on

O valor da Protection pode ser feito com uma das ou soma das seguintes:

MsoBarNoProtection
MsoBarNoCustomize
msoBarNoResize
msoBarNoMove
msoBarNoChangeVisible
msoBarNoChangeDock
msoBarNoVerticalDock
msoBarNoHorizontalDock.

Como Adicionar Uma Barra Separadora de Item de Menu

Bertolo Lio #09 Criando e Modificando Menus do Excel 346

Configure a propriedade BeginGroup para True para adicionar uma barra
separadora antes de um novo item de menu ou um boto na barra de comando.

O que segue ilustra como adicionar uma barra separadora acima de um item de
menu adicionado ao menu Ferramentas:

Di mmenu_I t em
'adiciona um item de menu temporrio ao menu Ferramentas
'ele desaparece quando o Excel fechado mas no quando o
'arquivo fechado a menos que a macro remover abaixo seja chamada.
Wi t h CommandBar s( " Wor ksheet Menu
Bar " ) . Cont r ol s( " Fer r ament as" )
Set menu_I t em= _
. Cont r ol s. Add( Type: =msoCont r ol But t on,
Tempor ar y: =Tr ue)
End Wi t h
'atribui nome e macro ao item de menu. Tambm, coloca uma linha
'separadora acima dele configurando BeginGroup para True
Wi t h menu_I t em
. Capt i on = " I st o Di z Al "
. OnAct i on = " SayHel l o"
'this puts the barra separadora above the item de menu
. Begi nGr oup = Tr ue
End Wi t h

Determinando Qual Boto Foi Clicado Numa Barra de Ferramentas

O que segue ilustra como determinar qual boto foi clicado numa barra de
ferramentas. Cria uma barra de ferramentas personalizada chamada TestBar1, adiciona
trs controles personalizados a ela, e configura seus captions para One, Two, e Three.
Atribui esta macro a cada boto:

Sub Whi chBut t onWasPr essed( )
dBar s( " Test Bar
e do boto que foi
Sel ect Case CommandBar s. Act i onCont r ol . Capt i on
'adapta o caption declarao case
Case " One"
MsgBox " Voc pr essi onou Um"
Case " Two"
MsgBox " Voc pr essi onou Doi s"
Case " Thr ee"
MsgBox " Voc pr essi onou Tr s"
End Sel ect
End Wi t h
End Sub

Wi t h Comman 1" )
'retorna o caption ou nom
Bertolo Lies de VBA do Excel 347


Por favor note que as declaraes Case acima so case sensitive a menos que
voc coloque a Option Compare Text no topo do seu mdulo ou converta todo o texto
mesma case.

Um outro modo de se determinar qual boto foi clicado usar a propriedade Tag ou
Parameter do controle:

MsgBox CommandBar s. Act i onCont r ol . Par amet er
Bertolo Lio #09 Criando e Modificando Menus do Excel 348

CommandBars E Nmeros de Controles

O que segue ilustra como modificar um menu usando o nmero de controle de menus ao
invs de seu nome. Os nomes so especficos da linguagem.


Sub Add_Menu_I t em( )
Di mct l Menu As CommandBar Cont r ol
Di mct l MenuI t emAs CommandBar Cont r ol
'remove antes de adicionar!
RemoveMenuI t em
'
'o nmero 30007 o menu Ferramentas
'
Set ct l Menu = _
Appl i cat i on. CommandBar s( 1) . Fi ndCont r ol ( , 30007)
Set ct l MenuI t em= _
ct l Menu. Cont r ol s. Add( Type: =msoCont r ol But t on)
ct l MenuI t em. Capt i on = " Qui ckTabl e"
ct l MenuI t em. OnAct i on = Thi sWor kbook. Name & " ! Qui ckTabl e"
End Sub

Sub RemoveMenuI t em( )
Di mct l Menu As CommandBar Cont r ol
On Er r or Resume Next
Set ct l Menu = _
Appl i cat i on. CommandBar s( 1) . Fi ndCont r ol ( , 30007)
ct l Menu. Cont r ol s( " Qui ckTabl e" ) . Del et e
End Sub

Como Adicionar Um Atalho de Menu

Com respeito sintaxe, voc acessa atalhos de menus exatamente da mesma maneira
que voc adiciona-os aos menus regulares. O truque conhecer qual deles se referir,
pois existem 40 deles. O que artigo que segue com base no MS Knowledge de
aproximadamente 19 pginas, e uma boa referncia sobre as barras de comando em
geral. A pgina 12 contm uma lista dos nomes das barras de atalhos embutidas.

"XL97: WE1183 "Customizing Menu Bars, Menus and Menu Items"
http://support.microsoft.com/support/kb/articles/q166/7/55.asp

Caixas de Texto Na CommandBars

Caixas de Textos sobre CommandBars funcionam exatamente como caixas de texto
normais. O modo mais fcil par ler o texto no procedimento de voc atribuir ao controle
caixa de texto colocar o cdigo seguinte:

Di mszText As St r i ng
Bertolo Lies de VBA do Excel 349


szText = CommandBar s. Act i onCont r ol . Text

Listagem Dos Atalhos de Menus

O que segue macro cria a lista na folha ativa de todos os menus de atalho e itens de
menus em cada um.

Sub Li st _Shor t _Cut _Command_Bar s_And_Menus( )
Di mcel l As Range
Di mR As I nt eger
Di mc As I nt eger
Di mct l Bar As CommandBar
R = 2
Range( " a1" ) . Val ue = " I ndex #"
Range( " b1" ) . Val ue = " Commandbar Name"
Range( " c1" ) . Val ue = " i t emde menu capt i ons"
For Each ct l Bar I n CommandBar s
I f ct l Bar . Type = msoBar TypePopup Then
Cel l s( R, 1) = ct l Bar . I ndex
Cel l s( R, 2) = ct l Bar . Name
For c = 1 To ct l Bar . Cont r ol s. Count
Cel l s( R, c + 2) = _
ct l Bar . Cont r ol s( c) . Capt i on
Next
R = R + 1
End I f
Next ct l Bar
Cel l s. Ent i r eCol umn. Aut oFi t
MsgBox " Al l done"
End Sub

Cdigos de Menu Disponveis Na Internet

Se voc j ouvir falar sobre o Baarns web site, voc pode pegar o seu arquivo
Developer Jumpstart. Ainda mais para muitos outros modelos de cdigos, este arquivo
contm uma tabela de driven para construir CommandBar. Tudo o que voc tem a fazer
preencher a tabela e incluir nela um mdulo de cdigo extra no seu projeto, ela
construir qualquer das commandbars que voc especificou na tabela automaticamente.
Ele construir menubars, barras de ferramentas e menus popup todos da mesma
tabela.

Voc pode encontrar vrios exemplos de fazer de cdigos de menu no site de John
Walkenbach,

http://www.j-walk.com/ss

Procure a seo Excel Developer Tips. Tambm, examine a seo downloads. Vrios
dos arquivos incluem cdigos que adicionam um item de menu ao manu Ferramentas.
Bertolo Lio #09 Criando e Modificando Menus do Excel 350

Artigos na Internet Sobre Como Mudar Os Menus

Para maiores informaes de como mudar os menus Excel, download e rodar os
seguintes arquivos. Quando voc rodar os arquivos, eles instalaro um documento word
que voc pode ento abrir e ler.

Customizing Menu Bars, Menus, e Menu Items

Como Evitar Customization de Menus e Toolbars

Desabilitando a Personalizao da Commandbar

Se voc estiver usando o Excel 2002, possvel evitar que um usurio modifique as
commandbars. A declarao :

CommandBar s. Di sabl eCust omi ze = Tr ue

Para habilitar a personalizao use:

CommandBar s. Di sabl eCust omi ze = Fal se

Se a sua aplicao ainda precisar rodar sob uma verso anterior, use a seguinte
abordagem (approach):

Di mcBar s As Obj ect
Set cBar s = Appl i cat i on. CommandBar s
I f Val ( Appl i cat i on. Ver si on) >= 10 Then
cBar . Di sabl eCust omi ze = Tr ue
End I f
Bertolo Fase #3: VBA do Excel Avanado 351


Lio 10: Usando Controles ActiveX nas Planilhas e Grficos

As lies 5, 6 e 7 mostraram-lhe como criar userforms e colocar neles objetos
tais como as barras de rolamento, as caixas de listagem, e os botes de comando. O
Microsoft Excel tambm lhe permite colocar tais objetos diretamente numa planilha ou
grfico. Se o objeto for um boto de comando, uma macro pode ser especificada a
executar quando o boto for clicado. Se o objeto for uma caixa de listagem, um boto de
rotao ou uma barra de rolamento, ento estes podem estar vinculados s frmulas ou
clulas nas suas planilhas.
CRIANDO BOTES E USANDO A BARRA DE FERRAMENTAS
FORMULRIO
O modo mais fcil de se criar um boto e atribuir uma macro a ele usar o
seguinte boto da barra de ferramentas Formulrio.
Para mostrar a barra de ferramentas Formulrio, selecione Exibir, Barra de
ferramentas, e clique na barra de ferramentas Formulrio. Voc pode ocultar esta barra
de ferramentas quando acabar. Os botes criados deste modo podem ser colocados nas
planilhas e nos grficos.












Quando voc clicar neste boto, um serrilhado aparecer e lhe permitir de-
senhar o boto. Simplesmente clique com o boto da esquerda do mouse onde voc quer
o canto superior daquele boto que estamos criando, mantenha o boto do mouse
apertado, e arraste para onde voc quiser o canto inferior e solte.
Voc pode fazer o seu boto to grande quanto voc queira. Quando voc soltar
o boto do mouse, a caixa de dilogo Atribuir Macro seguinte surge e solicita-lhe
especificar a macro a ser associada ao boto.











Este boto ser
criado agora
Bertolo Lio #10 Usando Controles ActiveX nas planilhas e grficos

352



As macros aparecero em ordem alfabtica, qualificadas pelos nomes das pastas
se elas existirem em pastas diferentes.

Depois de voc selecionar OK, a caixa acima fecha e seu boto mostrado.
dado um nome default como "Boto 1". Tambm, voc notar que o boto est
selecionado, como islutrado pela aparncia seguinte:






Quando o boto est selecionado, voc pode clicar no boto e editar o texto que
aparece nele. Se voc pressionar enter enquanto voc estiver digitando o texto no boto,
voc ir para a prxima linha. Quando voc estiver terminado de digitar o texto,
deselecione o boto, apenas clicando em qualquer clula na folha. Para selecionar
novamente um boto, mantenha apertado a tecla CTRL e clique nele usando o boto
esquerdo do mouse.
boto com o boto direito do mouse, o boto ser seleciona-
do e o painel seguinte mostrado:













O item de menu Formatar controle... permite-lhe mudar a aparncia da fonte.
Por exemplo, voc pode negritar o texto e mudar a sua cor e o seu tamanho. A mudana
afeta todo o texto, no apenas parte dele. O item de menu Atribuir Macro... permite-lhe
mudar a macro que foi atribuida ao boto.
Uma vez assumida uma macro para o seu boto e editado o texto no boto para
descrever sua funo, clique em qualquer clula na planilha para de-selecionar o boto.
Agora, quando voc clicar no boto, a macro atribuida a ele executada.
Se voc quiser que o boto seja visvel no importando onde voc rolar na
planilha, ento coloque o boto na clula A1, selecione uma clula cujo canto esquerdo
superior esteja logo abaixo e direita do boto, e ento selecione J anela, Congelar
painis.
Se voc clicar num
Bertolo Lies de VBA do Excel


353
CRIANDO UM BOTO ActiveX
O outro modo de se criar um boto numa barra de ferramentas fazer o seguinte:
Selecione Exibir, Barras de ferramentas e mostre a barra de ferramentas de
Controle. A barra de ferramentas seguinte aparecer:




O 6 boto da direita tem uma dica de ferramenta "Boto de comando". Voc
pode clicar neste boto e da desenhar um boto na planilha. Entretanto, voc no pode
desenhar botes de comando ou qualquer outro controle desta barra de ferramentas nas
folhas de grfico. Voc deve usar os objetos da barra de ferramentas formulrios em
vez disso.
Depois que voc desenhar um boto na planilha, voc notar que o boto est
selecionado, e que o primeiro boto da barra de ferramentas acima est destacado. Isto
significa que voc est no modo design, e pode mudar as propriedades do boto. Para
mudar as propriedades, clique no segundo boto, cuja dica de ferramenta
"Propriedades". Por exemplo, voc pode mudar o ttulo (caption) do boto, a fonte, e o
background.























Voc dever quase sempre mudar a propriedade do boto TakeFocusOnClick
para False. O valor default True. Entretanto, isto causa problemas freqentemente,
quando o cdigo freqentemente se referir s clulas, e no existem clulas num boto!
Bertolo Lio #10 Usando Controles ActiveX nas planilhas e grficos

354
Para atribuir cdigo ao boto, d um duplo clique nele enquanto estiver no modo
design (primeiro boto selecionado/destacado). Isto colocar voc no mdulo de cdigo
para a planilha, com o evento clique do boto pronto par editar. Por exemplo, se o
nome do boto for CommandButton1, voc ver o seguinte cdigo:

Pr i vat e Sub CommandBut t on1_Cl i ck( )
End Sub

Voc dever encaixar seu cdigo na sub-rotina acima, ou entrar com o nome da
sub-rotina num mdulo regular a ser rodado. A segunda a abordagem preferida.
Quando voc terminar de criar um boto, clique primeiro no boto na barra de
ferramentas para desligar o modo design. Isto lhe permite ao clicar no boto, fazer o seu
cdigo ser executado. Se voc precisar editar o boto no futuro, apenas mostre
novamente a barra de ferramentas de Controle e clique primeiro no boto que o colocar
de volta ao modo design.
Se voc precisar editar o cdigo de um boto no futuro, voc pode apenas ir
diretamente ao cdigo clicando o boto direito do mouse na guia da folha e selecionar
Exibir Cdigo.

USANDO OUTROS OBJETOS DA BARRA DE FERRAMENTAS
FORMULRIO

O que segue ilustra uma folha povoada com muitos objetos que podem ser
colocados numa planilha, ou grfico, usando a barra de ferramentas Formulrios:

4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
A B C D E F G H I
Isto uma Caixa de Verificao
Isto um Boto
Caixa de texto
I sto uma Caixa de grupo
Boto de opo 4
Boto de opo 5
I sto um Rtulo
Boto de opo 7
Boto de opo 8


Note que os botes de opo podem ser incluidos numa caixa de grupo ou
colocados na planilha do lado de fora de uma caixa de grupo. Voc ter de criar a caixa
de grupo primeiro.
Para selecionar um objeto que tenha sido inserido numa planilha da barra de
ferramentas Formulrios, mantenha apertada a tecla de controle e clique com o boto
esquerdo do mouse no objeto. Isto lhe permite ento editar seu texto e dimensionar o
tamanho e rodar a macro atribuida. Geralmente, voc no vai querer atribuir uma macro
aos objetos de dilogo como a caixa de listagem, pois isto faria a macro ser executada
Bertolo Lies de VBA do Excel 355


no momento que voc clicar nela, provavelmente impediria voc de usar o objeto de
dilogo para a sua real funo.
Se voc clicar com o boto direito num objeto de uma folha e selecionar
Formatar controle, seu painel de controle mostrado. Voc pode tambm mostrar este
painel selecionando o objeto e da selecionando Formatar, Controle (CTRL+1) do menu
Microsoft Excel. O que segue ilustra o painel de controle para uma caixa de listagem
criada da barra de ferramentas Formulrios:




























O range que voc especificar num range de entrada de caixa de listagem
controla o que est mostrado na caixa de listagem. O nmero da seleo retornado na
clula vinculada. Voc deve tambm ter notado que o controle da caixa de listagem
acima tem uma caixa de verificao Sombreamento 3D. Usando o valor que um dado
objeto retorna sua clula vinculada, voc pode ter a sua ao em quaisquer dos objetos
de dilogo refletida na sua pasta. Por exemplo, voc poderia usar um boto de rotao
ou uma barra de rolamento vinculada clula mudando o valor de uma clula chave na
sua folha de modo que voc possa ver o efeito de diferentes valores sem ter que digitar
os nmeros. E outras frmulas na sua planilha podem referir-se clula vinculada,
afetando assim seus valores. Um outro modo de se usar clulas vinculadas com a
funo ndice (index). A funo ndice seleciona um dado valor num range baseado na
Bertolo Lio #10 Usando Controles ActiveX nas planilhas e grficos

356
sua posio no range. Por exemplo, digamos que voc tenha uma planilha contendo os
dados seguintes:







Se voc usar a frmula =NDICE(B3:B5, nmero) numa clula, a frmula
retornar 344 se o nmero for 1, retornar 563 se o nmero for 2, e retornar 0,61 se o
nmero for 3. Se o nmero for realmente de uma clula de referncia, e o valor na
clula referncia for controlado por um controle do userform, tal como uma caixa de
listagem, a ao seleo no userform muda o resultado da frmula. Para ilustrar esta
abordagem e como ela pode ser usada para graficar diferentes dados, entre com os
dados acima numa folha. Da ento com as vrias linhas abaixo, construa o seguinte:





onde as seguintes frmulas ou entradas so usadas:

Clula Entrada
A8 1
A9..E9 2004..2007 (ou frmulas referindo-se a A1..E9)
A10 =NDICE (A3:A5;$A$8)
B10 =NDICE (B3:B5;$A$8)
C10 =NDICE (C3:C5;$A$8)
D10 =NDICE (D3:D5;$A$8)
E10 =NDICE (E3:E5;$A$8)

Note que quando voc mudar o valor da clula A8, que o rtulo da clula A10 e
os valores das clulas B10 at E10 mudam para refletirem os diferentes dados das
vendas, carregamentos e preo de tabela. O prximo passo construir um grfico
destacando as clulas A9 at E10. O grfico pode ser um grfico encaixado ou uma
folha de grfico nica. Quando voc fizer isto usando o assistente de grfico, certifique-
se de especificar que a primeira linha de dados para ser usada para a categoria de
rtulo X. Caso contrrio, voc obter os nmeros 1,2,.. como os rtulos de X em vez de
anos. Tambm, certifique-se de especificar a primeira coluna de dados como a legenda
de texto. O que segue o grfico resultante. Note que eu deletei a legenda para somente
uma srie ser plotada.





1
2
3
4
5
A B C D
Ano 2004 2005 2006 2007
Vendas 344 472 407 422
Carregamentos 563 745 601 655
Preo 0,61 0,63 0,68 0,
E
64
8
9
10
A B C D
1
Ano 2004 2005 2006 2007
Vendas 344 472 407 422
E

Bertolo Lies de VBA do Excel


357












O ltimo passo inserir uma caixa de listagem na folha contendo o grfico
encaixado ou na folha de grfico se voc escolheu usar uma folha de grfico ao invs
disso. A caixa de listagem dever usar as clulas A3:A5 para o range de entrada (estes
so as vendas contendo as palavras Vendas, Carregamentos, Preos). E ela dever usar a
clula A8 como a clula vinculada. O que segue com o que caixa de listagem
terminada se parece:





Agora, quando voc selecionar um dos itens na caixa de listagem, o grfico
automaticamente atualizado, incluido seu rtulo de ttulo.

USANDO OUTROS CONTROLES ACTIVEX

Se voc quiser, voc pode usar os controles ActiveX que esto na Barra de
ferramentas Controle para criar controles na sua planilha ao invs de usar os objetos da
barra de ferramentas Formulrios. Somente objetos da barra de ferramentas Formulrios
podem ser colocados num grfico. Se voc fizer isto, voc dever quase sempre mudar a
propriedade de boto TakeFocusOnClick para False. O valor default True. Entretanto,
isto frequentemente causa problemas, como o cdigo frequentemente se referir s
clulas , e no existirem clulas no objeto controle!
Voc dever editar as propriedades controle enquanto estiver no modo design
(primeiro boto est apertado) selecionando o objeto e dai clicando no boto Properties.
Para editar o cdigo atrs do objeto, primeiro d um duplo clique no controle. Isto cria a
sub-rotina default do controle e coloca voc no mdulo de cdigo da planilha. Se voc
precisar editar o cdigo do controle no futuro, voc pode apenas ir diretamente ao
cdigo clicando com o boto direito do mouse na guia da folha e selecionando Exibir
Cdigo. Os exemplos de cdigos no captulo sobre userforms ilustram comocriar cdigo
para os diferentes objetos. Por favor note que voc no pode criar uma caixa refEdit na
planilha nem colocar qualquer controle ActiveX num grfico.
USANDO UMA MACRO PARA MUITOS BOTES
Ven d as
0
100
200
300
400
500
2004 2005 2006 2007
Vendas
Bertolo Lio #10 Usando Controles ActiveX nas planilhas e grficos

358
Se voc colocar uma poro de botes de comando numa folha (usando o boto
barra de ferramentas formulrios), voc deve querer fazer o seguinte:

Atribuir a mesma macro a todos os botes de comando
Usa Application.Caller para determinar quais botes foram selecionados.
Baseado no boto selecionado, determine que ao dever ser tomada.

Isto tem a vantagem que somente uma macro precisa ser mantida em vez de muitas.
Tambm, as macros chamadas por esta macro podem ser do tipo Private, assim no
aparece na lista Ferramentas, Macro.

Para ilustrar esta abordagem, crie a seguinte macro:

Sub Exempl oDeBot o( )
Di mNomeDoBot o As St r i ng
NomeDoBot o = Appl i cat i on. Cal l er
MsgBox " Bot o " & NomeDoBot o & " sel eci onado. "
End Sub

Da adicione um nmero de botes de comando numa folha, e atribua a todos
eles a macroa cima. Quando voc clicar num boto, a macro acima mostra o nome do
boto. Por favor note que o nome no o texto que aparece na face do boto, mas o
nome que aparece na Caixa Name quando o boto for selecionado (mantendo a tecla
shift apertada quando voc clicar nele). Voc pode mudar o nome do boto editando o
nome na Caixa Name. Tambm, voc pode determinar que boto est selecionado
usando testes If ou a declarao Select Case e rodar as macros baseadas nestes testes.

ATRIBUINDO MACROS A OUTROS OBJETOS NUMA FOLHA

Acima foi ilustrado a insero de um boto numa planilha ou num grfico e
atribuir uma macro ao boto. possvel atribuir uma macro a qualquer objeto que se
colocar numa planilha ou folha de grfico. Por exemplo se voc colar uma figura numa
folha, voc pode atribuir uma macro a executar quando a figura for clicada.
Para atribuir uma macro a um objeto, primeiro clique com o boto direito do
mouse no. O seguinte menu ento aparecer:












Bertolo Lies de VBA do Excel


359
Selecionando Atribuir macro... permite-lhe especificar a macro a atribuir ao
objeto.

SUMRIO

Adicionar objetos s suas folhas Excel, especialmente botes de comando que
ligam macros ou barras de rolamento que mudam valores das clulas, adiciona um
poder tremendo. Por exemplo, se voc solicitado a criar uma planilha que modele
preo e volume e seu impacto nos rendimentos, pense na reao que voc obteria se
adicionasse um grfico com barras de rolamento que automaticamente mudam o preo e
o volume vs oferecer apenas uma planilha cheia de equaes!
Bertolo Fase #3: VBA do Excel Avanado 360


Lio 11: Trabalhando com Barras de Ferramentas

possvel com o Microsoft Excel modificar as barras de ferramentas de modo que
as ferramentas que voc precisar so aquelas que esto nas suas barras de
ferramentas. No somente se pode atribuir qualquer um dos muitos botes
ferramenta s suas barras de ferramentas, voc pode tambm atribuir macros aos seus
botes que podem ser adicionados a uma barra de ferramenta existente ou a uma nova
barra de ferramenta. E, voc pode ter macros para criar barras de ferramentas e botes
quando uma pasta for aberta e remov-los quando ela for fechada.

Esta lio compartilha voc com tcnicas e macros para executar as adaptaes
acima.

PERSONALIZANDO BARRAS DE FERRAMENTAS

Para personalizar suas barras de ferramentas, escolha Exibir, Barras de ferramentas,
Personalizar do menu Microsoft Excel. Dai ento selecione a guia Comandos:



Nas muitas categorias que esto disponveis nestas caixas, existem mais de 200
botes diferentes disponveis. Para ver o que um boto faz, apenas clique no boto para
ver uma descrio daquele boto. A descrio do boto aparecer no fundo do dilogo.

Para adicionar um boto a uma barra de ferramenta, clique no boto e, enquanto
mantiver clicado pressione o boto esquerdo do mouse para baixo, arraste o boto
localizao desejada na barra de ferramenta e libere o boto do mouse. Se voc quiser
mover um boto para uma localizao diferente, clique e arraste-o. Para remover um
boto da barra de ferramenta, clique no boto e arraste-o para fora da barra de

Bertolo Lies de VBA do Excel 361


ferramenta e libere-o. Ele desaparecer. Se voc quiser adicion-lo de volta, apenas
encontre-o entre os botes disponveis na caixa acima eadicione-o de volta.

Para atribuir um boto sua prpria barra de ferramenta, voc deve primeiro
selecionar a primeira ala ("Barras de ferramentas") e clicar no boto "Nova..." para
criar uma nova barra de ferramenta. Isto mostrar o dilogo seguinte que lhe permite
criar uma nova barra de ferramenta, e atribuir a ela ao mesmo tempo um nome:

Isto cria uma barra de ferramenta vazia. Voc pode ento adicionar botes a ela.
Para ocultar uma barra de ferramenta, voc pode fazer qualquer uma das coisas
seguintes:

Se a barra de ferramenta uma barra de ferramenta flutuante, clique no pequeno
boto no canto esquerdo superior da barra de ferramenta.
Se a barra de ferramenta est ancorada s outras barras de ferramentas suas,
arraste-a para fora que a tornar uma barra de ferramenta flutuante. Da ento faa a
ao acima.
Se voc souber o nome da barra de ferramenta, selecionar Exibir, Barras de
ferramentas e de-selecionar a caixa de verificao barra de ferramenta.

As Barras de ferramentas que voc criar podem ser deletadas. Para deletar uma
barra de ferramenta, selecionar Exibir, Barras de ferramentas, Personalizar. Selecione
a primeira ala, rotulada de "barras de ferramentas". Clique sobre a barra de ferramenta
que voc quiser deletar e da ento sobre o boto delete.

As barras de ferramentas que vem com o Microsoft Excel no podem ser
deletadas. Entretanto, elas podem ser reconfiguradas ao seu projeto original
selecionando Exibir, Barras de ferramentas, Personalizar e clicando no boto reset
depois de voc ter selecionado a barra de ferramenta.

Em muitas das barras de ferramentas, os botes esto muito prximos uns dos
outros, o que torna o seu uso de certa forma difcil. O que segue ilustra isto:

Entretanto, possvel separar os botes clicando e arrastando cada boto direita um
pouco. O que segue ilustra o espaamento melhorado que resulta:

Bertolo Lio #11 Trabalhando com Barras de Ferramentas 362

ATRIBUINDO MACROS AOS BOTES DA BARRA DE FERRAMENTA

Para atribuir macros a um boto, selecionar Exibir, Barras de ferramentas,
Personalizar e selecionar a ala Comandos. Role para baixo a seleo Categorias at
voc chegar aquela uma chamada "Macros". Selecionando-a, o seguinte lhe ser
mostrado:


Selecione e arraste o item da lista Comandos entitulado "Personalizar Boto" barra de
ferramenta de sua escolha.
Para atribuir uma macro a este boto, ou mudar a sua face, basta clicar com o
boto direito do mouse no boto ou selecionar o boto e da ento usar o boto
"Modificar seleo" no dilogo acima. Ambos faro o seguinte pop-up aparecer:

Bertolo Lies de VBA do Excel 363


Para atribuir uma macro ao boto, selecionar o item de menu "Atribuir Macro". Para
mudar a face do boto, ou use o item de menu "Editar imagem de boto" ou o item
"Alterar imagem de boto". Este segundo item mostrar a seguinte lista de seleo das
faces.


Selecione a face que voc quer usar e da ento saia do painel. Com esta informao, o
Excel no gravar a face que voc usou se voc estiver gravando uma macro para criar
uma barra de ferramentas.

RESOLVENDO O PROBLEMA MACRO CANNOT BE FIND

Se voc atribuiu uma macro a um boto, clicando no boto automaticamente
abrir o arquivo macro se o arquivo no estiver aberto. Se voc renomeou a macro ou
moveu ou renomeou o arquivo, voc obter uma mensagem como a seguinte quando
voc clicar no boto:


Para resolver este problema, voc ter de atribuir novamente a macro ao boto. Par
fazer isto, selecionar Exibir, Barras de ferramentas, Personalizar. Depois clicar no
boto. Neste momento voc pode selecionar Ferramentas, Atribuir Macro e escolher
uma macro para o boto se o arquivo contendo a macro estiver aberto. Voc pode also
clicar com o boto direito do mouse no boto e selecionar Atribuir Macro do menu de
atalho que aparece.

EDITANDO BARRA DE FERRAMENTA IMAGENS DE BOTO

Muito freqentemente, a imagem dos botes personalizados no representam a
macro que voc atribuiu ao boto. possvel editar a imagem do boto para dar a ele a
aparncia que voc quiser.

Bertolo Lio #11 Trabalhando com Barras de Ferramentas 364

Para editar um a imagem de boto, selecionar Exibir, Barras de ferramentas,
Personalizar se a caixa de dilogo personalizar no estiver visvel. Da ento clicar
com o boto direito do mouse no boto. Isto far o seguinte menu popup aparecer:



Para mudar a dica da ferramenta associada com o boto, mude o nome do boto.

Para editar o boto, selecione Editar imagem de boto. Isto far o seguinte
editor de boto aparecer. Por favor note que a imagem que aparecer ser aquela do seu
boto.


Para usar este editor, voc seleciona a cor que voc gostar e da ento clique nas
pequenas caixas na rea da figura para mudar a imagem. Os botes Move permitem
voc posicionar a imagem no boto.
Bertolo Lies de VBA do Excel 365



TRABALHANDO COM BARRAS DE FERRAMENTAS

Barras de ferramentas so membros da coleo CommandBars:

CommandBar s( nmer o)

ou CommandBar s( " nome da bar r a de f er r ament a " )

A coleo commandbars inclui no somente a coleo barras de ferramentas, mas
tambm a coleo menus.
Por exemplo, as declaraes seguintes escrevero uma lista de todos objetos na
coleo commandbars junto com seu nmero ndice:

For i = 1 To Commandbar s. Count
Cel l s( i , 1) = i
Cel l s( i , 2) = Commandbar s( i ) . Name
Next

Se voc quiser deletar uma barra de ferramenta que voc criou, ento voc
apenas se refira a ela e use o mtodo Delete. Por exemplo:

CommandBar s( 33) . Del et e

ou CommandBar s( " Cust om20" )
. Del et e

No possvel deletar as barras de ferramentas que vem com o Microsoft Excel.
Se voc quiser ocultar uma barra de ferramenta, ento voc pode configurar a
propriedade Visible da barra de ferramenta para False. Para mostrar novamente, voc
configuraria a propriedade Visible para True. Por exemplo:

CommandBar s( " Speci al Task" ) . Vi si bl e = Tr ue

Para adicionar uma barra de ferramenta, voc usa o mtodo Adicionar que tem um
argumento Name. Por exemplo:

CommandBar s. Add Name: =" Mi nha Nova Bar r a"
CommandBar s( " Mi nha Nova Bar r a" ) . Vi si bl e = Tr ue

A barra de ferramenta aparecer no to afastada do canto esquerdo superior da tela.
Isto no to notvel. Voc pode superar isto adicionando o seguinte a sua macro:

Wi t h CommandBar s( " Ger enci ador de dados)
. Lef t = 200
. Top = 200
End Wi t h

Bertolo Lio #11 Trabalhando com Barras de Ferramentas 366

Voc pode tambm simplificar isto acima numa declarao:

CommandBar s. Add ( Name: =" Dat a Manager " )
. Vi si bl e = Tr ue

Se voc precisar mudar o nome numa barra de ferramentas personalizada, voc pode
fazer isto com a propriedade Name:

CommandBar s( " Bar r a de Fer r ament as 33" ) . Name = " Fi nanci al I nf o"

Para determinar o nmero de barras de ferramentas que existem, voc pode usar a
propriedade Count:

MsgBox " Voc t em" & CommandBar s. Count &
" comandbar s. "

TRABALHANDO COM BOTES DA BARRA DE FERRAMENTAS

Os botes na barra de ferramenta pertencem coleo CommandBarControls. Para
trabalhar com um dado boto, voc deve especificar a commandbar e o nmero do
controle (boto):

CommandBar s( nmer o ou " nome" ) . Cont r ol s(
nmer o)

Para adicionar um boto a uma barra de ferramenta, voc usar o mtodo Add e
especificar o boto a usar. Por exemplo:

CommandBar s( " Bar r a de Fer r ament as 1" ) . Cont r ol s. Add _
Type: =msoCont r ol But t on, I d: =23

Note que voc especificou um argumento Type e configurou-o igual ao valor. Isto
porque o Excel inclui menu e item de menus como parte de uma commandbar. Assim o
argumento Type permite-lhe especificar o que est sendo adicionado. Tambm, em vez
de se usar um argumento chamado Boto, voc usa um chamado Id para identificar o
boto. Como informao, se voc no especificar um Type ou um Id , ento um boto
vazio adicionado.

Os exemplos acima adicionaram botes que j esto associados com comandos
embutidos do Excel. Neste caso ambas declaraes adicionar o boto que mostra o
painel abrir arquivo, embora o boto e nmeros Id sejam diferentes. A melhor maneira
par obter os nmeros para um boto embutido gravar uma macro que adiciona um
boto a uma barra de ferramenta. A prxima seo cobre como criar suas prprias
barras de ferramentas personalizadas com botes personalizados atribuidos s suas
macros personalizadas.

Bertolo Lies de VBA do Excel 367


Existem tambm outras coisas que voc pode especificar quando voc adicionar
um boto. Por exemplo, voc pode especificar sua posio na barra de ferramenta com
o argumento Before.

A propriedade Name de um boto tambm a ToolTip que aparece quando voc manter
o ponteiro do mouse sobre um boto. Voc pode mud-lo para qualquer texto que voc
queira. Por exemplo:

Bar r as de f er r ament as( " Bar r a de Fer r ament as
25" ) . Tool bar Bot es( 1)
. Name = _

"Print Reports"

O intervalo que voc colocar entre os botes realmente considerado um boto e
identificado como boto zero! O que segue ilustra como adicionar um boto (a face
smiley) e da um espao de boto na frente deste boto (esta declarao assume que
exista j um boto na barra de ferramenta, que voc no colocar um intervalo na frente
do primeiro boto):

CommandBar s( " New Tool Bar " ) . Cont r ol s. Add _
Type: =msoCont r ol But t on, _
I d: =2950, Bef or e: =1, Begi nGr oup: =Tr ue

a propriedade BeginGroup adiciona a distncia entre os botes.

Para maiores informaes sobre a commandbars, mostrar o Pesquisador de
objetos, selecionar "<Todas Bibliotecas">" na caixa seleo, e role para baixo at
commandbars no painel classes. Voc pode ento selecionar uma das listagens e
selecionar a propriedade ou mtodo e mostrar a ajuda clicando no boto question mark.

USANDO UMA MACRO PARA CRIAR UMA BARRA DE FERRAMENTA

De tempo em tempo, voc deve precisar de uma barra de ferramenta
especializada e boto par uma tarefa particular. Por exemplo, voc deve ter de fazer um
trabalho particular uma vez por ms e mais fcil fazer se a barra de ferramenta est
configurada com botes atribuidos s macros que voc usar. Voc poderia criar esta
barra de ferramenta manualmente cada ms. Entretanto, uma macro pode criar barras
de ferramentas com uma dica descritiva para cada boto.

O que segue macro ilustra o cdigo necessrio par criar uma barra de ferramenta
com dois botes nela, com dicas de ferramentas descritivas.

Sub Speci al Tool Bar ( )
Di mt Bar , newBut t on
' Del et ar CommandBar se el a exi st i r
On Er r or Resume Next
CommandBar s( " Tar ef a Especi al " ) . Del et e
Bertolo Lio #11 Trabalhando com Barras de Ferramentas 368

On Er r or GoTo 0
' cr i ar CommandBar
CommandBar s. Add Name: =" Tar ef a Especi al "
' def i ni r uma var i vel obj et o par a se r ef er i r CommandBar
Set t Bar = CommandBar s( " Tar ef a Especi al " )
' adi ci onar pr i mei r o bot o
Set newBut t on = t Bar
. Cont r ol s. Add( I d: =2950)
' especi f i car di ca de f er r ament a ( nome) , macr o par a r odar , e
t ext o da bar r a de st at us par a a macr o
Wi t h newBut t on
. OnAct i on = " AddI nf o"
. Capt i on = " Adi ci onar I nf o"
End Wi t h
' adi ci onar o pr xi mo bot o. Not e que o uso da pr opr i edade
FaceI d
Set newBut t on = t Bar . Cont r ol s. Add
Wi t h newBut t on
. Capt i on = " Remover I nf or mao"
. OnAct i on = " RemoveI nf o"
. FaceI d = 278
. Begi nGr oup = Tr ue
End Wi t h
' most r ar CommandBar , posi o na pl ani l ha
t Bar . Vi si bl e = Tr ue
Wi t h CommandBar s( " Tar ef a Especi al " )
. Lef t = 200
. Top = 200
End Wi t h
End Sub

Pontos chaves na macro acima:

Nenhum qualificador especial necessrio para adicionar um boto; apenas
usando .Controls.Add adiciona um boto vazio. Isto usa o Type default de
msoControlButton. Outros tipos adicionariam item de menus ou menus.

A propriedade FaceId usada para configurar o boto face

Um espao adicionado entre os dois botes configurando a segunda
propriedade BeginGroup do boto para True.

Se voc quiser que a macro acima seja rodada quando a pasta for aberta, ento
apenas chame-a de uma macro Auto_Open. Por exemplo:

Sub Aut o_Open( )
Speci al Tool Bar
End Sub

Bertolo Lies de VBA do Excel 369


Far a macro SpecialToolBar rodar quando o arquivo for aberto. Uma macro
Auto_Open aquela que rodada automaticamente quando uma pasta for aberta.

USANDO SUAS PRPRIAS IMAGENS DE BOTO

A macro acima lhe permite usar quaisquer imagens de boto do Microsoft Excel
para a face do seu boto de macro. Entretanto, voc pode querer usar um boto face que
voc criou em vez disso. Para fazer isto, voc primeiro precisa fazer o seguinte:

V Caixa de Dilogo Personalizar - Selecione Exibir, Barras de ferramentas,
Personalizar
Crie um boto contendo a face de boto que voc quiser.
Com o boto selecionado, clicar com o boto direito do mouse no boto e
selecionar a Face Copy Boto
Sair do dilogo personalizar e ir planilha onde voc pode armazenar o boto
face. A folha que eu uso eu chamo de "Boto Faces", e parte da minha pasta
PERSONAL.XLS.
Nesta folha, apenas faa uma Editar, Colar normal. O boto face ser colado na
planilha como um objeto figura. Ele ser muito pequeno, o que OK.
Quando voc selecionar o boto face, voc ver o nome que o Microsoft Excel
deu a este objeto figura na caixa Nome. Por exemplo, ele pode ser chamado "Figura
1". Clique na caixa nome (adjacente caixa de edio de frmula) e renomeie a
figura digitando um novo nome e pressionando enter. O nome pode conter espaos.
Para ajud-lo no futuro, entre com este nome numa clula adjacente ao boto face.

Neste ponto, voc pode usar agora o boto face que voc armazenou na planilha
acima e ter uma macro para colar no seu prprio boto. O que segue macro ilustra
criando a nova barra de ferramenta com um boto face chamado "Graph Face"
localizado na folha "Boto Faces" na PERSONAL.XLS:

Sub Cr eat eGr aphBut t on( )
Di mt Bar , newBut t on
' r emover CommandBar se el a exi st i r e cr i ar uma CommandBar
vazi a
' como mesmo nome
On Er r or Resume Next
CommandBar s( " Bar r a de Gr f i co" ) . Del et e
CommandBar s. Add Name: =" Bar r a de Gr f i co "
' conf i gur ar uma var i vel par a se r ef er i r CommandBar
Set t Bar = CommandBar s( " Bar r a de Gr f i co" )
' adi ci onar umbot o vazi o CommandBar
Set newBut t on = t Bar . Cont r ol s. Add
' especi f i car uma t ool t i p e macr o par a r odar
Wi t h newBut t on
. Capt i on = " Gr f i co dos dados sobr e as vendas"
. OnAct i on = " PERSONAL. XLS! gr aphdat a"
End Wi t h
' sel eci onar a f ace a ser usada, copi - l a, e da col ar no
Bertolo Lio #11 Trabalhando com Barras de Ferramentas 370

bot o
Wor kbooks( " Per sonal . Xl s" ) . Wor ksheet s( "
Bot o Faces" ) _
. Dr awi ngObj ect s( " Gr aph Face" ) . Copy
newBut t on. Past eFace
' t or ne a CommandBar vi s vel
Wi t h t Bar
. Vi si bl e = Tr ue
. Lef t = 200
. Top = 200
End Wi t h
End Sub

CRIANDO BOTES COM TEXTO NA BARRA DE FERRAMENTAS

Os exemplos at agora ilustraram como criar botes de barras de ferramentas
que tenham uma face do tipo figura. Entretanto, voc pode tambm criar um boto que
tenha texto em vez de uma figura. O texto que aparece idntico tooltip do boto. O
que segue ilustra a criao de um simples boto commandbar com um text boto.

Sub Text But t onExampl e( )
Di mnewBar , newbut t on
On Er r or Resume Next
CommandBar s( " bar r a exempl o " ) . Del et e
On Er r or GoTo 0
Set newBar = CommandBar s. Add( Name: ="
Bar r a Exempl o " )
Set newbut t on = newBar . Cont r ol s _
. Add( Type: =msoCont r ol But t on, I d: =2949)
Wi t h newbut t on
. St yl e = msoBut t onCapt i on
. Capt i on = " I st o umText o de Bot o"
. OnAct i on = " Al "
End Wi t h
newBar . Vi si bl e = Tr ue
End Sub


Sub Al ( )
MsgBox " Al Mundo"
End Sub

A chave para criar um boto na barra de ferramentas com uma face de texto
configurar a propriedade Style para msoButtonCaption. Voc pode tambm configurar
a propriedade Style para msoButtonIconAndCaption que mostra ambos um cone e um
texto descrio.

CRIANDO BARRAS DE FERRAMENTAS POP-UP

Bertolo Lies de VBA do Excel 371


Uma outra caracterstica que voc pode criar so commandbars pop-up. Tais
commandbars so mostradas por um comando numa macro. O benefcio das
commandbars pop-up que elas tm o foco. Isto , o usurio deve escolher nas selees
pop-up e no pode fazer outras aes. Neste sentido, elas so como dilogos, mas so
muito mais fceis de serem construidas e podem ser to complexas quanto for
necessrio. O que segue ilustra como criar e mostrar uma commandbar pop-up que se
parece com o seguinte:


Sub POPUP_EXAMPLE( )
Di mpopUpBar As CommandBar
Di mnewBut t on As CommandBar Cont r ol
On Er r or Resume Next
CommandBar s( " Bar r a Pop UP" ) . Del et e
On Er r or GoTo 0
Set popUpBar = CommandBar s _
. Add( Name: =" Bar r a Pop UP" , Posi t i on: =msoBar Popup)
Set newBut t on = popUpBar . Cont r ol s _
. Add( Type: =msoCont r ol But t on, I d: =1)
Wi t h newBut t on
. FaceI d = 67
. OnAct i on = " Macr o1_To_Run"
. Capt i on = " Esvazi ar a Li xei r a"
End Wi t h
Set newBut t on = popUpBar . Cont r ol s _
. Add( Type: =msoCont r ol But t on, I d: =1)
Wi t h newBut t on
. FaceI d = 69
. OnAct i on = " Macr o2_To_Run"
. Capt i on = " Assi st i r a TV"
End Wi t h
popUpBar . ShowPopup
End Sub

Sub Macr o1_t o_Run( )
MsgBox " Esvazi ar a l i xei r a! "
End Sub

Sub Macr o2_t o_Run( )
MsgBox " vez da TV! "
End Sub

O mtodo ShowPopup faz o popup ser mostrado. As macros OnAction associadas com
os controles na barra determinam qual ao tomar quando um boto clicado. O popup
automaticamente desaparecer quando um comando selecionado. Tambm, o popup
pode ser to elaborado quanto voc queira - voc pode adicionar menus, sub menus, e
muitas outras caracteresticas de a um commandbar popup.

Bertolo Lio #11 Trabalhando com Barras de Ferramentas 372

BOTO FACE ID'S

A macro que segue cria uma barra de ferramenta gigante com os primeiros 250
FaceID's que se pode encontrar noExcel. Se voc quiser mais, ento voc pode rodar
esta macro e mostrar cerca de 1000 faces diferentes! Se voc fizer, voc poder querer
modificar um pouco a macro par criar barras de ferramentas mltiplas. Como
informao, gravando uma macro mudar a face de um boto no grava a face usada!
Assim esta macro pode ser de uso para voc!

Sub Di spl ayFaces( )
Di mt Bar As Obj ect , newBut t on As Obj ect
Di mY As I nt eger
Di mst ar t NumAs I nt eger
st ar t Num= Val ( I nput Box( " Ent r ar como nmer o par a o
pr i mei r o" & _
" bot o: nmer o ( 1, 251, 501, et c. ) " ) )
I f st ar t Num= 0 Then Exi t Sub
' l i ga o modo de er r o daquel a macr o e cont i nua se a bar r a de
f er r ament a no exi st i r se del et ada
' dei xa l i gado o modo er r o e r ei ni ci ar t ambmnecessr i o
par a evi t ar col i ses comal gumbot o
' nmer os so pul ados pel o Mi cr osof t Excel
On Er r or Resume Next
CommandBar s( " Todos os Bot es! ! ! " ) . Del et e
' cr i a a bar r a de f er r ament a
CommandBar s. Add Name: =" Todos os Bot es! ! ! "
Set t Bar = CommandBar s( " Todos os Bot es
! ! ! " )
' Mi cr osof t Excel t emcer ca de 1000 f aces.
For Y = st ar t NumTo st ar t Num+ 249
Appl i cat i on. St at usBar = " cr i ando f ace " & Y
Set newBut t on = t Bar . Cont r ol s. Add
Wi t h newBut t on
. Capt i on = " FaceI d = " & Y
. FaceI d = Y
End Wi t h
Next Y
Appl i cat i on. St at usBar = Fal se
' most r a a bar r a de f er r ament a e a t or na wi der
t Bar . Vi si bl e = Tr ue
t Bar . Wi dt h = 504
' l i mpa a mensagemda bar r a de st at us
Appl i cat i on. St at usBar = Fal se
End Sub

UMA MACRO PARA ADICIONAR UM BOTO

Embora voc possa escrever uma macro que cria uma barra de ferramenta
personalizada e boto a cada vez que voc precisar de um, a macro seguinte adicionar
um boto a qualquer barra de ferramenta e tambm adicionar uma tooltip ao boto. Se
Bertolo Lies de VBA do Excel 373


voc entrar com o nome de uma nova barra de ferramenta esta macro criar uma nova
barra de ferramenta. Ela usa o userform seguinte:


O nome na lista drop down DropDown1. As duas caixas de texto so TextBox1 e
TextBox2. Os botes command foram configurados, e o seguinte cdigo coloca o
userform no mdulo cdigo (facilmente atingida dando um duplo clique sobre um
boto:

Pr i vat e Sub CommandBut t on1_Cl i ck( )
' Bot o OK
Me. Hi de
bResponse = Tr ue
End Sub

Pr i vat e Sub CommandBut t on2_Cl i ck( )
' Bot o Cancel ar
Me. Hi de
bResponse = Fal se
End Sub

A primeira caixa uma combinao das caixas lista edit-dropdown. Quando voc criar
o userform, assegure-se de configurar a ala ordem para ser pela ordem das caixas.

Para usar, voc precisa preencher todas as trs caixas. Use a barra de ferramenta
Todos os Botes!!! Para obter o nmero do boto que voc quer usar. Qualquer boto
pode ser usado. Aps um novo boto ter sido adicionado, voc pode atribuir uma macro
a ele apenas clicando sobre ele e selecionando uma macro do dilogo pop-up que
aparece.

O que segue o cdigo da macro:

Gl obal bResponse As Bool ean

Sub But t onAdder ( )
Di mi t emAs Obj ect
Di mI As I nt eger
Bertolo Lio #11 Trabalhando com Barras de Ferramentas 374

Di mcBar As CommandBar
Di mbOK As Bool ean
Di mbar Name As St r i ng
Di mbar Exi st s As Bool ean
Di msTool Ti p As St r i ng
Di mFaceI dNumAs I nt eger
Di mnewBut t on As Obj ect
' mul t i pl i que a l i st a dr op down
For Each cBar I n CommandBar s
' commandbar s do t i po 0 so bar r as de bot o
I f cBar . Type = 0 Then
I = I + 1
User For m1. ComboBox1. AddI t emcBar
. Name
End I f
Next cBar
' conf i gur e o nmer o do bot o f ace happy como o def aul t
User For m1. Text Box1. Text = 59
Do
' Most r ar o user f or m
User For m1. Show
I f bResponse = Fal se Then
' se o bot o cancel f or cl i cado, descar r egue e sai a
Unl oad User For m1
Exi t Sub
End I f
' Conf i r mar t odas as i nf or maes que f or ampr eenchi das
nel e:
Wi t h User For m1
I f . ComboBox1. Text = " " Or _
. Text Box1. Text = " " Or _
. Text Box2. Text = " " Then
MsgBox _
" Todas as cai xas no di l ogos devemest ar
pr eenchi das"
El se
bOK = Tr ue
End I f
End Wi t h
' i st o f ar uml ao t odas cai xas ser empr eenchi das
Loop Unt i l bOK
' obt enha os val or es do user f or m
bar Name = User For m1. ComboBox1. Text
sTool Ti p = User For m1. Text Box2. Text
FaceI dNum= Val ( User For m1. Text Box1. Text )
' descar r egue o f or mquando o i nf o t i ver si do ar mazenado
Unl oad User For m1
' Det er mi ne se a bar r a de f er r ament a exi st e e se no, cr i - l a
bar Exi st s = Fal se
For Each cBar I n CommandBar s
I f UCase( cBar . Name) = UCase( bar Name) Then _
bar Exi st s = Tr ue
Bertolo Lies de VBA do Excel 375


Next
I f Not bar Exi st s Then
CommandBar s. Add bar Name
End I f
' cr i ar uma var i vel par a se r ef er i r bar r a de f er r ament a
Set cBar = CommandBar s( bar Name)
' adi ci onar o bot o bar r a de f er r ament a e obt er seu nmer o
Set newBut t on = cBar . Cont r ol s. Add
' at r i bui r o bot o f ace ao novo bot o
On Er r or GoTo BadBut t onNumber
newBut t on. FaceI d = FaceI dNum
On Er r or GoTo 0
' at r i bui r t ool t i p e macr o ao bot o
newBut t on. Capt i on = sTool Ti p
' adi ci onar umespao ent r e o novo bot o e os bot es
' exi st ent es
newBut t on. Begi nGr oup = Tr ue
' t or nar a bar r a de f er r ament a vi s vel
cBar . Vi si bl e = Tr ue
MsgBox " Par a at r i bui r uma macr o ao bot o, sel eci onar " &
" Exi bi r , Per sonal i zar e cl i car como bot o di r ei t o do
mouse no bot o. "
Exi t Sub
' I st o mani pul a ummal nmer o de bot o
BadBut t onNumber :
MsgBox " O nmer o do bot o que voc especi f i cou " & _
" no exi st e. At i vi dade par al i zada. "
End Sub

ATRIBUINDO UMA BARRA DE FERRAMENTA A UMA PASTA

Se voc for a uma pasta e selecionar Exibir, Barras de ferramentas, Personalizar
, e clicando no boto "Atribuir...". O painel que segue aparece.


Barras de ferramentas que voc criou esto listadas na caixa esquerda. Se voc
selecionar uma barra de ferramenta, voc pode copi-la para a pasta. Isto lhe permite
distribuir uma pasta com uma barra de ferramenta personalizada sem ter que re-criar
Bertolo Lio #11 Trabalhando com Barras de Ferramentas 376

uma macro para a barra de ferramenta. Voc pode querer incluir uma macro
Auto_Open na pasta de modo que a barra de ferramenta seja mostrada quando o arquivo
for aberto. Uma macro Auto_Open aquela que roda automaticamente quando uma
pasta manualmente aberta.

Um dos problemas com esta abordagem que as barras de ferramentas com o
mesmo nome tm precedncia sobre as barras de ferramentas atribuidas a uma pasta.
Isto significa que as barras de ferramentas antigas aparecero em vez daquelas barras de
ferramentas novas se a pasta for movida. Assim a melhor abordagem ter suas pastas
criando suas barras de ferramentas e evitar o uso desta caracterstica.

OCULTANDO E RESTAURANDO AS BARRAS DE FERRAMENTAS

Voc pode algum dia querer desenvolver uma aplicao onde voc oculta todas
as barras de ferramentas do usurio, junto com objetos como os menus, a caixa de
edio, e as barras de rolamento. Ocultar as barras de ferramentas relativamente fcil.
Entretanto, quando sua aplicao feita, voc precisar restaurar as barras de ferramentas
de volta de modo que o usurio as tenha outra vez. Isto no to simples quanto
parece, desde que voc precisa saber quais barras de ferramentas sero mostradas, e a
ordem que voc mostrar essas barras de ferramentas afetam a sua localizao. O que
exigido que voc armazene informao nas barras de ferramentas, e da ento quando
mostr-las novamente, voc comea no topo esquerdo da barra de ferramenta. Deste
modo, as barras de ferramentas terminaro exatamente onde elas estavam antes de sua
aplicao rodar.
Ocultar e restaurar as barras de ferramentas e menus muito fcil. O que segue
oculta os menus, barras de ferramentas e a barra de edio de frmula e da ento
restaur-las:

Sub Mai nHi deShow
Hi deCommandbar s
MsgBox " Pr essi one OK par a r est aur ar as bar r as"
ShowCommandbar s
End Sub

Sub Hi deCommandbar s( )
Di mcBar As CommandBar
For Each cBar I n CommandBar s
cBar . Enabl ed = Fal se
Next
Appl i cat i on. Di spl ayFor mul aBar = Fal se
End Sub

Sub ShowCommandbar s( )
Di mcBar As CommandBar
For Each cBar I n CommandBar s
cBar . Enabl ed = Tr ue
Next
Appl i cat i on. Di spl ayFor mul aBar = Tr ue
End Sub
Bertolo Lies de VBA do Excel 377



SUMRIO

Os botes que esto nas suas barras de ferramentas so aqueles da maioria das
ferramentas mais importantes que voc tem no Excel. Eles salvaro voc, toda vez que
voc os usar. Por esta razo, voc dever personalizar suas barras de ferramentas e
colocar nelas as ferramentas que voc mais gosta de usar, e remover aquelas que voc
no gosta de usar.
Bertolo Fase #3: VBA do Excel Avanado 378


EXEMPLOS DE BARRAS DE FERRAMENTAS

Usando Barras de Ferramentas Anexadas

No Excel voc pode criar sua prpria barra de ferramentas selecionando Exibir, Barra de
ferramentas, e usar a opo Nova barra de ferramentas disponvel no dilogo que
aparece. E, voc pode atribuir botes barra de ferramentas selecionando a opo
Personalizar. Se voc escolher uma macro categoria de botes, voc pode atribuir sua
prprias macros aos botes na barra de ferramentas.

Uma tal barra de ferramentas personalizada tipicamente til somente para uma
pasta particular. Voc pode anexar a barra de ferramentas a uma pasta fazendo o
seguinte:

Escolher Exibir, Barra de ferramentas, Personalizar
Clique no boto Anexar e selecione a barra de ferramentas personalizada e copie a
barra de ferramentas personalizada para a pasta

Se voc modificar uma barra de ferramentas anexada, voc precisa repetir os passos
acima para anexar a nova verso. Caso contrrio, as modificaes sero perdidas.

H vrios problemas com barras de ferramentas anexadas:

A barra de ferramentas no desaparece quando voc fechar a pasta
A barra de ferramentas no aparece quando voc abrir a barra de ferramentas
Se voc distribuir a pasta aos outros, mudar a barra de ferramentas, e a re-distribuir, os
usurios podem no ver a nova barra de ferramentas.

Para resolver estes problemas, use macros como a seguinte, assumindo que sua barra de
ferramentas seja chamada "MinhaBarradeFerramentas", e que ela tenha dois botes
nela:

Sub Aut o_Open( )
Set UpBut t ons
End Sub

Sub Set UpBut t ons( )
Wi t h CommandBar s( " Mi nhaBar r adeFer r ament as " )
. Vi si bl e = Tr ue
. Cont r ol s( 1) . OnAct i on = " Pr i mei r aMacr o"
. Cont r ol s( 2) . OnAct i on = " SegundaMacr o"
End Wi t h
End Sub


Sub Aut o_Cl ose( )
On Er r or Resume Next
CommandBar s( " Mi nhaBar r adeFer r ament as " ) . Del et e
Bertolo Lies de VBA do Excel 379


End Sub

Recompondo As Macros Numa Barra de Ferramentas Personalizada

O Excel permite-lhe criar uma barra de ferramentas personalizada e anex-la a uma
pasta. Entretanto, se voc der esta pasta a algum, os botes da barra de ferramentas se
referiro de novo ao path da pasta original. O resultado uma caixa asquerosa de erro
dizendo que uma macro no pde ser encontrada. A propriedade botes' OnAction
apontar ainda para o local original da pasta, quando as macros forem feitas. O cdigo
seguinte ilustra um modo elegante para resolver isto, e ainda funciona com qualquer
barra de ferramentas personalizada.

Sub Fi x_Tool bar
' o nome da macr o aci ma ser i a i ncl ui do na sua macr o
Aut o_Open
' de modo que el a execut e cada vez que a past a f or aber t a.
Di mt Tool bar As St r i ng
Di mi As I nt eger
' col oque o nome da sua bar r a de f er r ament as no l ugar do
Nome da bar r a de f er r ament as
t Tool bar = " Nome da bar r a de f er r ament as"
' r ode por cada umdos bot es na bar r a de f er r ament as
For i = 1 To CommandBar s( t Tool bar ) . Cont r ol s. Count
' obt enha a OnAct i on at ual , que i ncl ui o pat h
nName = CommandBar s( t Tool bar ) . Cont r ol s( i ) . OnAct i on
' r e- at r i bui r o nome da macr o excl ui ndo o pat h
CommandBar s( t Tool bar ) . Cont r ol s( i ) . OnAct i on = _
Ri ght ( nName, Len( nName) - I nSt r ( nName, " ! " ) )
Next i
End Sub

Se voc fizer as correes a uma barra de ferramentas anexada, voc ter de anex-la
novamente, ou as correes no sero salvas

Usando Uma Macro Para Criar Uma Barra De Ferramentas

A macro seguinte ilustra os cdigos necessrios para se criar uma barra de ferramentas
com vrios botes nela, com dicas de ferramentas descritivas. A face na barra de
ferramentas est configurada pela propriedade FaceID. A macro aps isto lhe mostra
como encontrar as Ids para mais de 2000 faces de boto.

Sub Cr eat eATool bar ( )
Const t Bar Name As St r i ng = " Nome da Bar r a de Fer r ament as"
' Del et ar CommandBar se el a exi st i r
On Er r or Resume Next
CommandBar s( t Bar Name) . Del et e
On Er r or GoTo 0
' cr i ar CommandBar
CommandBar s. Add Name: =t Bar Name
Bertolo Lio #11 Trabalhando com Barras de Ferramentas 380

' def i ni r uma var i vel obj et o par a se r ef er i r a CommandBar
Wi t h CommandBar s( t Bar Name)
' adi ci onar o bot o use 1 par a especi f i car uma f ace
per sonal i zada vazi a
Wi t h . Cont r ol s. Add( I D: =1)
. OnAct i on = " AddI nf o"
' t hi s adds t he smi l ey FaceI D
. FaceI D = 59
. Capt i on = " Adi ci onar as I nf or maes do
Rel at r i o"
End Wi t h
' adi ci onar o pr xi mo bot o comuma bar r a separ ador a
Wi t h . Cont r ol s. Add( I D: =1)
. OnAct i on = " RemoveI nf o"
' i st o adi ci ona a bor r acha FaceI D
. FaceI D = 47
. Capt i on = " Remover as I nf or maes do Rel at r i o"
' i st o adi ci ona a bar r a separ ador a
. Begi nGr oup = Tr ue
End Wi t h
' most r ar a bar r a de f er r ament as
. Vi si bl e = Tr ue
End Wi t h
End Sub

Usando FaceIDs para especificar um ButtonFace da Barra de
Ferramentas

A propriedade FaceID de um controle especifica o boto face ou imagem. Por exemplo:

CommandBar s( " Mi nha bar r a de f er r ament as) . Cont r ol s( 1) . FaceI D = 80

Coloca um boto face com a letra "A" no controle.

A macro seguinte cria uma pasta que lista todos os botes FaceIDs disponveis:

Sub Di spl ayCont r ol Faces( )
Const t Bar Name As St r i ng = " Temp bar r a de f er r ament as"
' adi ci ona uma nova Past a par a as f aces
Wor kbooks. Add
' Del et a a CommandBar se el a exi st i r
On Er r or Resume Next
CommandBar s( t Bar Name) . Del et e
' cr i a a CommandBar
CommandBar s. Add Name: =t Bar Name
' def i ne uma var i vel obj et o par a se r ef er i r a CommandBar
Wi t h CommandBar s( t Bar Name)
' use uma ar madi l ha de er r o par a manej ar as FaceI Ds
per di das no cdi go abai xo
On Er r or GoTo eTr ap
Bertolo Lies de VBA do Excel 381


' especi f i car uma I D de umpar a uma f ace de bot o
per sonal i zada vazi a
Wi t h . Cont r ol s. Add( I D: =1)
' muda a i magemdo bot o at r avs de t odos aquel es que
est i ver emdi spon vei s
For i = 1 To 5500
. FaceI D = i
' copi a a f ace e col a na pl ani l ha
. CopyFace
Act i veSheet . Past e
' gr ava a f ace I D
Wi t h Act i veCel l . Of f set ( 1, 0)

. Val ue = i
. Hor i zont al Al i gnment = xl Lef t
End Wi t h
' aument a o cont ador e sel eci ona a pr xi ma
cl ul a dest i no
J = J + 1
I f J <= 5 Then
Act i veCel l . Of f set ( 0, 1) . Sel ect
El se
Act i veCel l . Of f set ( 3, - 5) . Sel ect
J = 0
End I f donext :
Next
End Wi t h
End Wi t h
' r emova a commandbar quando el a no f or necessr i a
CommandBar s( t Bar Name) . Del et e
Exi t Sub
eTr ap:
' nemt odas as FaceI Ds exi st em. I st o manej a qual quer uma
per di da
Resume donext
End Sub

Colocando Faces de Botes Personalizados Numa Barra de Ferramentas

A macro seguinte cria uma barra de ferramentas personalizada e da adiciona botes a
ela usando faces boto personalizadas e que tenham sido salvas numa folha chamada
"Faces de Boto". Para criar faces personalizadas:

V para a Caixa de Dilogo Personalizar - Selecione Exibir, Barra de ferramentas,
Personalizar

Selecione o boto que voc quer editar. Da clique com o boto direito do mouse nele
para mostrar o menu de boto popup. Selecione a opo Editar e modifique a face de
boto.

Bertolo Lio #11 Trabalhando com Barras de Ferramentas 382

Com o boto selecionado clique com o boto direito do mouse no boto e selecione
Copiar Face de Boto

Saia da caixa de dilogo personalizar e v par uma planilha onde voc possa armazenar
a face do boto. O nome da folha usado neste exemplo "Faces de Boto" e faz parte
da pasta contendo o cdigo da macro.

Nesta folha, apenas faa um normal Editar, Colar. A face de boto ser colada na
planilha como uma figura objeto. Ela ser muito pequena, que OK. Com o boto
selecionado, selecione Formatar, Selecione Estilo... e remova o frame ao redor do
objeto se existir algum.

Quando voc selecionar a face do boto, voc ver o nome que o Microsoft Excel deu a
esta figura de objeto na caixa Nome. Por exemplo, ela pode ser chamada "Figura 1".
Clique na caixa nome (adjacente caixa de edio de frmula) e re-nomear a figura
digitando no novo nome e pressionando entrar. O nome pode ter espaos. Para ajud-lo
no futuro, entre com este nome numa clula adjacente ao boto face.

At este ponto, voc agora pode usar uma face de boto que voc armazenou na planilha
acima e ter uma macro colada a ela no seu prprio boto. A macro seguinte ilustra a
criao de uma nova barra de ferramentas com dois botes personalizados e um boto
regular. As faces para os botes personalizados so chamadas "adicionar boto" e
"mudar boto", e esto localizadas numa folha chamada "faces de boto" na pasta
contendo este cdigo.

Sub Tool Bar Wi t hCust omFace( )
Const t Bar Name As St r i ng = " Nome da Bar r a de Fer r ament as"
' Del et ar a CommandBar se el a exi st i r
On Er r or Resume Next
CommandBar s( t Bar Name) . Del et e
On Er r or GoTo 0
' cr i a a CommandBar
CommandBar s. Add Name: =t Bar Name
' def i na umobj et o var i vel par a se r ef er i r CommandBar
Wi t h CommandBar s( t Bar Name)
' adi ci one bot o use 1 par a especi f i car uma f ace
per sonal i zada vazi a
Wi t h . Cont r ol s. Add( I D: =1)
. OnAct i on = " Adi ci onar I nf o"
. Capt i on = " Adi ci ona I nf or mao de Rel at r i o"
' i st o adi ci ona uma f ace per sonal i zada ao bot o
Thi sWor kbook. Sheet s( " Faces de Bot o" )
. Shapes( " Fi gur a" ) . Copy
. Past eFace
End Wi t h
' most r a a bar r a de f er r ament as
. Vi si bl e = Tr ue
End Wi t h
End Sub
Bertolo Lies de VBA do Excel 383



Ocultando E Restaurando As Barras De Ferramentas E Menus

O cdigo seguinte ocultar todas as barras de ferramentas e menus:

Di mc
For Each c I n CommandBar s
c. Enabl ed = Fal se
Next

O cdigo acima no somente ocultar todas as barras de ferramentas e menus, ele
desabilitar todos os menus, com uma exceo. Isto a barra de ferramentas que
aparece se clicar com o boto direito do mouse num boto da barra de ferramentas se
o usurio no fez upgrade ao Excel SR-2.

Para mostrar uma barra de ferramentas especfica ou menu, voc primeiro tem de
configurar sua propriedade Enabled de volta para True. Se no estiver visvel, voc
tambm ter de configurar a propriedade Visible para True. Por exemplo:

Wi t h CommandBar s( " Meu Menu Per sonal i zado" )
. Enabl ed = Tr ue
. Vi si bl e = Tr ue
End Wi t h

Para mostrar novamente os menus e as barras de ferramentas quando o usurio as tiver,
use o cdigo seguinte:

Di mc
For Each c I n CommandBar s
c. Enabl ed = Tr ue
Next

Voc pode tambm desabilitar menus especficos referindo-se a eles pelo nome:

CommandBar s( " Wor ksheet Menu Bar " ) . Enabl ed = Fal se

Como Evitar Seus Botes da Barra de Ferramentas Personalizada De
Aparecerem Desbotados

Se voc construir uma barra especial de ferramentas de botes usando o editor de boto
da barra de ferramentas, os botes podem aparecer desbotados na mquina de outros
usurios. Este fenmeno ocorre quando os botes da barra de ferramentas forem
construdos com o conjunto de cores do Windows para "milhes de cores" e o usurio
com a barra de ferramentas desbotada, tiver o seu conjunto de cores do Windows numa
configurao mais baixa. A soluo usar uma configurao de cores mais baixa para
mostrar.

Adicionando Dicas das Ferramentas Aos Botes
Bertolo Lio #11 Trabalhando com Barras de Ferramentas 384


Quando voc criar uma barra de ferramentas, a dica do boto ferramenta o caption que
est atribudo ao boto. Por exemplo:

Wi t h CommandBar s( " Mi nha Bar r a de Fer r ament as" )
. Cont r ol s( 1) . Capt i on =" Car r egar novos dados"
End wi t h
Bertolo Fase #3: VBA do Excel Avanado 385




Lio 12: Os Suplementos

e voc quiser distribuir macros e aplicaes que voc escreveu, voc
provavelmente vai querer considerar em distribu-las como um arquivo
suplemento em vez de um arquivo pasta. A principal vantagem de um arquivo
suplemento que ele mais fcil para usar funes. Uma outra vantagem, um
suplemento pode ser armazenado em qualquer diretrio e ajustado para ser carregado
quando o Microsoft Excel iniciar. Isto elimina a necessidade de colocar o arquivo no
diretrio de incio do Microsoft Excel (tipicamente o Excel\Xlinicio). E, os suplementos
no solicitam se sero ou no gravados quando se fecha o Microsoft Excel. Tambm,
arquivos suplementos podem ter neles as macros AUTO_OPEN e AUTO_CLOSE.
Tais macros podem ser usadas para se criarem e removerem itens de menu e barras de
ferramentas.

Se voc quiser trocar macros com muitos outros usurios e que esto numa LAN
ou sistema de redes, voc provavelmente vai querer usar um suplemento em vez de uma
pasta. Um suplemento pode ser aberto por muitos usurios sem qualquer problema.
Entretanto, uma pasta pode somente ser aberta por um usurio de cada vez ao mesmo
tempo sem aparecer uma mensagem de advertncia.

Existem algumas desvantagens com suplementos. A maior o sofrimento de
descarregar, editar a pasta fonte, recriar o suplemento, descarregar a pasta, e recarregar
o suplemento. Por favor, note que voc pode evitar isto se voc mudar as propriedades
da pasta suplemento para True ao invs de criar um suplemento da sua pasta.

Um outro que a maioria dos usurios no est familiarizada com eles e tambm
como carreg-los. Um outro ainda que as macros no suplemento no aparecem em
qualquer lista de macros, o que torna difcil atribuir manualmente uma macro
suplemento a um boto ou rodar. Assim seu suplemento dever adicionar itens de menu
ou criar barra de ferramentas automaticamente via um Auto_Open ou uma macro
Workbook_Open. Tambm, voc no pode mostrar qualquer uma das folhas num
suplemento. Assim, voc no pode mostrar grficos ou editar manualmente uma
planilha num suplemento. Se voc precisar modificar freqentemente suas macros ou
adicionar algumas outras novas sua coleo, voc no dever usar um suplemento,
pois voc no pode modificar as macros de um suplemento. Voc necessitaria carregar
o arquivo contendo o cdigo toda vez que voc precisar modificar as macros e da re-
criar o arquivo suplemento para ele ser alterado.

Por favor, note que criar um suplemento no evita um usurio de ver seu cdigo macro.
Torna-se apenas mais difcil de obt-lo.

COMO CRIAR UM ARQUIVO SUPLEMENTO

S
Bertolo Lio #12 Os Suplementos 386

Existem dois modos de se criar suplementos que eu chamei de Suplemento
Aproximao Um e Dois. Entretanto, para evitar que os outros vejam o seu cdigo
suplemento, voc dever fazer o seguinte:

No editor de VB, selecione UFUerramentas, UPUropriedades de VBAProject...
















Selecionar a ala Proteo da janela Propriedades do projeto.



















Clicar na caixa Bloquear projeto par exibio.
Especificar uma Senha (password) e aps confirm-la.

Por favor note que uma pessoa pode comprar um cracker de senhas e abrir seu
cdigo.
Bertolo Lies de VBA do Excel 387



Suplemento - Aproximao Um

V para uma planilha na pasta e lance os comandos Arquivo, Salvar como....





























Da selecione Salvar como tipo: Suplemento do Microsoft Excel. Por favor, note que
voc precisa compilar seu arquivo primeiro no Editor VBE, quando estiver salvando o
arquivo como um arquivo XLA no o verifique se tm erros. Voc acabar com dois
arquivos, um do tipo XLS e um do tipo XLA.







Bertolo Lio #12 Os Suplementos 388



O prximo passo especificar o diretrio para o arquivo suplemento. Voc pode salvar
um suplemento em qualquer diretrio. Voc provavelmente vai querer iniciar um
diretrio especial para suplementos ou salvar seus suplementos no diretrio
C:\Documents and Settings\nome do usurio principal do Windows\Dados de
aplicativos\Microsoft\Suplementos. Este o diretrio default que a Microsoft Excel
dispe para voc selecionar suplementos.

Uma vez tendo especificado o nome do arquivo e o diretrio, selecionar Salvar.
O Microsoft Excel criar ento o arquivo suplemento que eu denominei Pastateste. Ele
ser ligeiramente menor em tamanho que o arquivo fonte. Tudo que se faz para criar
um suplemento tornar um arquivo em suplemento. Ele no carrega o arquivo no
Microsoft Excel.

Bertolo Lies de VBA do Excel 389


Suplemento - Aproximao Dois

Na janela Project Explorer do Editor VB, aparece o ttulo Projeto
TESTETEXTO. Nela selecione o objetoTESTETEXT (Pasta1):



e mostre tambm a janela de propriedades.

Na janela de propriedades, ajuste o valor da propriedade "IsAddin" para True.
Isto far qualquer planilha ficar oculta. Salve o arquivo. Por favor note que o tipo de
arquivo no mudar.

A vantagem desta segunda aproximao que voc no precisa manejar dois
arquivos, um do tipo XLS e um do tipo XLA. Para converter o arquivo de volta para
um arquivo tipo XLS, simplesmente mude a propriedade IsAddin para False. A
desvantagem que o tipo de arquivo no XLA, o qual o que o gerenciador de
suplemento reconhece.

Bertolo Lio #12 Os Suplementos 390

Para ilustrar a criao de um arquivo suplemento, crie uma pasta com um modulo que
contenha a seguinte macro e funo. Este suplemento tambm ser usado em vrios
outros exerccios neste texto. O cdigo para a macro e funo :

Funct i on LbsToKg( l bs)
LbsToKg = l bs / 2. 2046
End Funct i on

'*****************************************************

Sub I t I sNow( )
MsgBox " O di a e o t empo " & Now
End Sub

'*****************************************************

Salve o arquivo como EXEMPLO.XLS em Meus Documentos (se voc salvar de outro
lugar, anote o path). Agora, v para uma nova pasta e selecione Ferramentas, Macro, e
rode a macro ItIsNow. Voc a ver listada na lista das macros disponveis.

Finalmente, v a uma clula numa pasta diferente e teste a funo. Voc precisar
especificar a pasta para usar a funo. Assumindo que voc queira ver quantos
kilogramas so100 lbs, a frmula seria:

=EXEMPLO. xl s! LbsToKg( 100)

Como um lembrete, para evitar ter que colocar na pasta uma referncia para um arquivo
voc pode configurar uma referncia ao arquivo funo. Isto feito indo para uma
folha de modulo na pasta e selecionando Ferramentas, Referncias e especificando o
arquivo. No faa isto neste exerccio. Isto foi apenas um lembrete!

O prximo passo neste exerccio criar o arquivo suplemento.

Bertolo Lies de VBA do Excel 391


COMPILANDO SUAS MACROS

Compilar seu cdigo muito fcil - apenas selecione Depurar, Compilar
VBAProject. O nome do seu projeto de pasta ser mostrado imediatamente aps a
palavra Compilar VBAProject no menu. Uma tcnica muito til nomear cada um dos
projetos, e no deix-los para serem nomeados pelo "VBAProject". O Visual Basic
quando necessrio ajustar o cdigo a ser compilado para outro alm daquela pasta
cujos cdigos so mostrados na janela ativa. Se todas as suas pastas tem o nome do
projeto default, voc no pode ter certeza que voc est compilando a pasta certa.
MODIFICANDO SUAS MACROS PARA USAR NO SUPLEMENTO
Se suas macros fizerem referncias s suas pastas fontes, ento elas devem ser
modificadas antes do suplemento ser criado ou ento resultaro erros destas referncias.
Por exemplo, se houver uma macro no EXEMPLO.XLS que tenha a referncia
Pasta("Exemplo.XLS"), e voc criou um suplemento com um tipo de XLA, quando esta
declarao rodada o suplemento vir com uma mensagem de erro. Para evitar tais
erros, voc precisar modificar as macros para ou especificar o arquivo suplemento ou
usar a palavra chave ThisWorkbook ao invs disso. ThisWorkbook um comando que
se refere ao arquivo que contm a macro em execuo. Se o Exemplo.XLA teve este
problema, ento as referncias tero de serem mudadas ou para
Workbooks("Exemplo.XLA") ou ThisWorkbook. O uso do ThisWorkbook ,
obviamente, o melhor caminho.

Tambm, se voc tem botes ou itens de menu numa pasta que se refira ao
arquivo XLS e uma de suas macros, voc precisar mudar o link naquela pasta para se
referir ao arquivo suplemento. Voc pode fazer isto manualmente selecionando Editar,
Vinculos e especificando o arquivo XLA para o arquivo XLS. Por favor note que voc
precisar movimentar-se nestes links para trs e para frente quando voc editar no
arquivo XLS. Assim, voc provavelmente vai querer gravar macros que faam estas
mudanas para voc.

CARREGANDO UM ARQUIVO SUPLEMENTO

Existem vrios modos de se carregar um arquivo suplemento. O modo mais rpido
selecionar Arquivo, Abrir e especificar o arquivo suplemento. Entretanto, ele tem vrias
pequenas desvantagens:


Voc ter que abrir manualmente o arquivo cada vez
Voc no pode fechar manualmente o arquivo sem fechar o Microsoft Excel

A principal vantagem desta aproximao que ela no exige que voc tome ao para
evitar o suplemento de ser carregado na prxima vez que voc carregar o Microsoft
Excel. Se voc usar somente um arquivo suplemento no freqentemente, ento voc
provavelmente vai preferir esta aproximao.

Bertolo Lio #12 Os Suplementos 392

Voc tambm pode ter uma macro abrindo e fechando um arquivo suplemento.
Voc usar os mesmos comandos que voc usa com pastas regulares. Por exemplo:

Wor kbooks. Open " \ ESPECI AL. XLA"
Wor kbooks( " ESPECI AL. XLA" ) . Cl ose

Por favor, note que voc precisa especificar o path para o arquivo suplemento, caso
contrrio o Excel enxergar somente o diretrio atual e um erro ocorrer se o arquivo
no estiver l.

Voc pode tambm usar argumentos com o mtodo Open. Por exemplo, se o
suplemento tem vnculos a outros arquivos que voc no quer alterar quando o
suplemento for carregado, voc pode adicionar o argumento updatelinks:=0 para evitar
atualizao. E, rodar qualquer macro Auto_Open no suplemento, voc usar uma
declarao como:

Wor kbooks( " SPECI AL. XLA" ) . RunAut oMacr os
xl Aut oOpen

Se o suplemento tem uma macro Workbook_Open, ele roda automaticamente quando
aberto via cdigo.

Um outro modo para abrir um arquivo suplemento selecionar Ferramentas,
Suplementos do menu Microsoft Excel. Isto mostra a seguinte caixa de dilogo:



Voc ver vrios suplementos listados. Sua lista pode ser diferente. Uma curta
descrio de cada suplemento mostrada na lista de rolamento. Voc no encontrar o
EXEMPLO.XLA se ainda estiver na pasta exemplo. bom sair dela primeiro e da
Bertolo Lies de VBA do Excel 393


executar os passos acima de outra pasta. Ao clicar num suplemento sero feitas duas
coisas:

Ele muda o suplemento de desligado para ligado ou de ligado para desligado

Ele mostra uma longa descrio do suplemento, o qual vem da informao do
arquivo resumo.

Se voc clicou num suplemento e ele no for um selecionado previamente, ele
ser carregado quando voc selecionar OK, e cada vez que voc carregar o Microsoft
Excel da pra frente. Clicando num suplemento numa segunda vez reverte o efeito da
primeira seleo.

Para adicionar um suplemento lista, voc precisa selecionar Procurar... e da
encontrar e clicar no arquivo suplemento. Quando voc selecionar o arquivo
suplemento, ele ser adicionado lista e a caixa ativa ser checada.

Se voc criou o arquivo EXEMPLO.XLA anteriormente, ento voc pode
adicion-lo lista usando a opo Procurar.... Quando voc selecionar OK, o arquivo
EXEMPLO.XLA ser carregado. Note que somente o nome do arquivo aparece na lista
de suplementos e que no h uma longa descrio associada com o suplemento. Uma
seo mais tarde deste texto ilustra como fornecer estas descries.

Para ilustrar a diferena entre suplementos e pastas de arquivos, feche o
EXEMPLO.XLS. Neste ponto do exerccio, voc deve ainda ter um arquivo teste para
abrir. Se no, abrir um novo arquivo. Para demonstrar a funo chamada LbsToKg que
est no EXEMPLO.XLA, v para uma clula vazia e digite =LbsToKg(100) e pressione
enter. Note que voc no precisou especificar o nome do arquivo nem configurar uma
referncia. Tambm, se voc selecionar Inserir, Funo, e clicar na categoria Definida
pelo usurio, voc ver LbsToKg listada l.

Bertolo Lio #12 Os Suplementos 394



Agora, selecione Ferramentas, Macro e procure a macro ItIsNow que voc criou no
EXEMPLO.XLS, e que est no suplemento, EXEMPLO.XLA. Embora o
EXEMPLO.XLA esteja carregado a macro no aparece na lista de seleo.


Entretanto, se voc digitar seu nome na caixa de nome de macro e pressionar enter, a
macro roda e diz a voc a hora do dia.

Bertolo Lies de VBA do Excel 395




Se voc quiser atribuir uma macro suplemento a um boto da barra de
ferramentas, voc tambm ter de digitar no nome da macro, como macros suplemento
no so mostrados na lista de seleo da macro. Porque a Microsoft mostra as funes
dos suplementos e no as macros, no tem lgica. Entretanto, este o modo como os
suplementos funcionam.
Bertolo Lio #12 Os Suplementos 396

DESCARREGANDO UM ARQUIVO SUPLEMENTO

Voc pode descarregar um arquivo suplemento que voc carregou selecionando a barra
de ferramentas, Suplementos, e clicar na macro que voc quiser descarregar. Isto
remover a marca na caixa de opo pelo seu nome ou descrio. Voc no pode
descarregar manualmente um suplemento que voc carregou usando Arquivo, Abrir.

Se voc descarregar um suplemento e voc tiver que abrir arquivos que esto
usando uma funo que est armazenada no suplemento, a funo no funcionar. Em
vez disso, o Microsoft Excel mostrar #NAME? como o valor daquela clula contendo a
funo e em qualquer clula que se referir a ela. Se a funo exclusiva da pasta que
usar, ento voc dever armazenar a funo naquela pasta em vez de um arquivo
suplemento ou uma outra pasta.

ALTERANDO UM ARQUIVO SUPLEMENTO

Suponha que voc queira modificar as macros ou funes que voc tem num arquivo
suplemento. Para fazer isto, voc precisa

descarregar o arquivo suplemento,
abrir a pasta contendo as macros,
modificar as macros,
re-criar o arquivo suplemento.
recarregar o arquivo suplemento

Se voc tentar recriar o arquivo suplemento sem primeiro descarreg-lo, o Microsoft
Excel mostrar uma mensagem.

ADICIONANDO DESCRIES PARA OS SEUS SUPLEMENTOS

Se voc quiser mudar ou a descrio curta que aparece na lista de seleo suplemento
ou na longa descrio que aparece na caixa descrio abaixo na lista de seleo
suplemento, voc precisa:

Descarregar o suplemento se ele estiver carregado
Abra o XLS arquivo que criou o suplemento
Selecionar Arquivo, Propriedades do menu Microsoft Excel
Preencha a caixa de ttulos e a caixa de comentrios.

Bertolo Lies de VBA do Excel 397




Salvar o arquivo XLS
Re-criar o arquivo suplemento
Re-load o arquivo suplemento
Encerre o Microsoft Excel e retorne

A entrada caixa de ttulos a descrio que aparece na lista de seleo suplemento.
A entrada comentrio a longa descrio. Afim de novas descries aparecerem no
dilogo seleo suplemento, voc deve primeiro sair do Microsoft Excel e da carreg-lo
novamente.

SUPLEMENTOS E BOTES DA BARRA DE FERRAMENTAS

Se voc criou botes da barra de ferramentas que se refiram a macros num
arquivo XLS, e voc criou um suplemento, os botes continuaro a se referirem ao
arquivo XLS. Voc precisar mudar manualmente os botes para referirem ao arquivo
XLA. Por outro lado, quando voc clicar num boto, o Excel abrir o arquivo XLS, e
ignorar a macro suplemento.

DELETANDO SUPLEMENTOS DA LISTA DE SUPLEMENTO

Embora o Microsoft Excel fornea um significado ao adicionar suplementos
para a lista de suplementos disponveis, ele no fornece uma maneira para delet-los
desta lista. A nica maneira que eu encontrei para fazer isto fechar o Microsoft Excel,
deletar o arquivo suplemento usando Gerenciador de Arquivo, e reiniciar o Microsoft
Bertolo Lio #12 Os Suplementos 398

Excel. Quando o Microsoft Excel inici-lo de volta remova qualquer suplementos ele
pode no se encontrar na lista. Se o suplemento selecionado para ser carregado, voc
ser estimulado a remov-lo da lista.


RESUMO

Suplementos podem ser muito teis se voc precisar distribuir funes. Se voc
usar suplementos, voc dever ter o suplemento ou criar uma barra de ferramentas ou
adicionar um menu ou itens de menu aos menus do Excel de modo que o usurio possa
rodar as macros. Isto necessrio desde que as macros num suplemento no aparecem
na caixa de dilogo de execuo de macro (Barra de ferramentas, Macros, ).


THE

END