Você está na página 1de 49

Srie Como Fazer

Criando menus, barras de comando e botes


personalizados no Excel usando VBA
por Robert Friedrick Martim

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Nota sobre direitos autorais


Este eBook de autoria de Robert F Martim, sendo comercializado atravs do site
www.juliobattisti.com.br

ou

atravs

do

site

de

leiles

Mercado

Livre:

www.mercadolivre.com.br.

Ao adquirir este eBook voc tem o direito de l-lo na tela do seu computador e de imprimir
quantas cpias desejar, desde que sejam para uso pessoal. vetada a distribuio deste eBook,
mediante cpia ou qualquer outro meio de reproduo, para outras pessoas. Se voc recebeu
este eBook atravs de e-mail ou via FTP de algum site da Internet, ou atravs de CD de Revista,
saiba que voc esta com uma cpia pirata, no autorizada. Se for este o seu caso entre em
contato com o autor atravs do e-mail rm@faircourt.com ou comunique diretamente ao nosso
site atravs do e-mail webmaster@juliobattisti.com.br.
Ao regularizar a sua cpia, voc estar remunerando, mediante uma pequena quantia, o trabalho
do autor e incentivando que novos trabalhos sejam disponibilizados.
Visite periodicamente o site www.juliobattisti.com.br para ficar por dentro das novidades!

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

ii

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Pr-requisitos
Para completar este curso, voc precisa ter um conhecimento mnimo de manipulao das
planilhas do Excel. Porm, o conhecimento bsico de VBA ser necessrio para que o jargo
(embora ele tenha sido reduzido ao mximo) no atrapalhe a compreenso, desenvolvimento e
aprendizado.
Este curso no tem por objetivo ensinar qualquer outra coisa a no ser a criao de menus, barras
de comando e botes personalizados no Excel utilizando VBA (Visual Basic for Application).
Os leitores interessados podem adquirir o curso bsico de Excel em 120 lies no seguinte
endereo: www.juliobattisti.com.br/excel120/excel120.asp

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

iii

Objetivos deste eBook


Este eBook foi dividido em mdulos. Este primeiro mdulo visita a criao de menus, barras de
comando e botes personalizados no Excel usando o Visual Basic for Application (VBA).
O trabalho foi desenvolvido a partir da demanda dos usurios do site www.juliobattisti.com.br. O
material procura analisar questes pertinentes ao dia-a-dia de seu trabalho. Vrios exemplos so
retirados das dvidas colocadas no frum do site ou enviadas diretamente para o autor pelos
assinantes do site.
A linguagem utilizada descontrada e com o mnimo de jargo possvel. O objetivo ter um
eBook com contedo relevante e de fcil compreenso.
Qualquer dvida referente a este mdulo podem ser colocadas diretamente no frum Excel
avanado no endereo: http://www.juliobattisti.com.br/forum/forum.asp?FORUM_ID=3
Comentrios e sugestes para melhora do material podem ser enviados diretamente para o autor
no endereo rm@faircourt.com

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

iv

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

NDICE ANALTICO
Introduo ........................................................................................................................................ 1
Bem-vindo a srie Como Fazer. ........................................................................................... 1
Antes de continuar .................................................................................................................. 1
1.

O que um menu e o que uma barra de comando ............................................................. 2

2.

Como menus e barras de comando so criadas .................................................................... 3

3.

Dimensionando os objetos corretamente................................................................................ 8

4.

Posicionando os objetos ....................................................................................................... 10

5.

Criando e executando aes nos menus.............................................................................. 13

6.

Colocando os FaceIDs.......................................................................................................... 17
6.1. FaceID personalizadas................................................................................................. 17

7.

Criando menus de atalho ...................................................................................................... 20

8.

Menus Dropdown................................................................................................................ 26

9.

Botes Toggle ....................................................................................................................... 32

10.

Automatizando a criao de menus...................................................................................... 36

11.

Sobre o autor ........................................................................................................................ 43

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

SRIES: COMO FAZER

Criando menus, barras de comando e botes


personalizado no Excel usando VBA
por Robert Friedrick Martim

Introduo
Bem-vindo a srie Como Fazer.
Nas series que sero escritas estaremos olhando em aspectos distintos do Excel de acordo com a
demanda do frum Excel Jlio Battisti (http://www.juliobattisti.com.br). A inteno principal
fornecer ao internauta uma ferramenta que concentre a ateno na soluo de um problema
especfico.
Nesta primeira srie estaremos vendo as diversas possibilidades de se criar barras de comandos
e menus personalizados. Iremos utilizar mtodos manuais e dinmicos para criar nossas barras e
menus. Estaremos olhando os elementos que compem os menus e barras de comando e como
eles so utilizados na soluo de nossos problemas.

Antes de continuar
O trabalho desenvolvido foi testado para compatibilidade com Excel 2002 e 2003. Devido rpida
mudana em termos de tecnologia de software, ateno sempre ser dada s verses mais
recentes do aplicativo Excel.
Sugestes sero sempre bem-vindas e esperamos que o leitor participe pro ativamente no
desenvolvimento do material aqui apresentado.
Finalmente, quando objetos e variveis so dimensionados nesta apostila utilizada a conveno
de dimensionamento dos objetos e variveis. Por exemplo, um boto dimensionado como Dim
btn.

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

1.

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

O que um menu e o que uma barra de comando

Menus e barras de comando so objetos da rea de trabalho do Excel (e qualquer outro aplicativo
que utilize estas ferramentas) que permitem o usurio interagir com o ambiente de trabalho.
Menus e barras de comando deixam o trabalho mais dinmico e eficiente. Embora vrios
comandos possam ser acessados atravs de teclas de atalho, muitos outros no o so. Desta
forma, menus e barras de comando desempenham um papel crtico em nossa produtividade.
Ao criarmos menus e barras de comando queremos personalizar a rea de trabalho ou desejamos
acrescentar funes que no esto disponveis nos menus e barras padres do aplicativo. A figura
abaixo mostra o menu do Excel e vrias barras de comando:

Figura 1-1

O menu principal est no topo do aplicativo. Do lado esquerdo do aplicativo temos a barra de
formatao, na parte inferior temos a barra de Desenho, no canto direito temos a barra de grficos
e flutuando na rea de trabalho temos a barra padro.
Como podemos ver, ao criarmos barras de comando podemos fix-las em qualquer parte da rea
de trabalho.
Hoje, no existe uma linha entre menus e barras de comando, em outras palavras, o menu
principal do Excel, na verdade, est dentro de uma barra de comando e pode ser arrastado e
colocado em um local qualquer da rea de trabalho. Ele no fixo com o aplicativo em si. Isto
representa uma flexibilidade enorme em termos de manuseio do objeto em questo.

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

2.

Como menus e barras de comando so criadas

Menus e barras de comando so objetos e como tais possuem mtodos e propriedades. Para se
criar este tipo de objeto precisamos colocar o cdigo em um mdulo. Para inserir um mdulo de
programao precisamos estar na rea de edio de cdigo conhecida como VBE (Visual Basic
Editor). Para acessar esta rea pressione Alt+F11. Quando o VBE for aberto clique em Inserir -->
Modulo para inserir um mdulo VBA.
No mdulo, precisamos definir a sub-rotina que conter o cdigo que criar nossos menus. A
figura abaixo mostra a abertura e fechamento de uma sub-rotina:

Figura 2-1

Qualquer coisa escrita em visual basic em Sub-End Sub ser executada pelo programa.
Como foi dito, menus e barras de comando so objetos. Quando criamos nossos cdigos boa
prtica definir a dimenso (Dim) destes objetos ou variveis. Por exemplo:
Sub criandoMenus()
Dim cmdBar
As Object
Dim mnu
As Object
End Sub
Quando criamos estes objetos, precisamos dar um set para que o programa reconhea o tipo de
objeto. Por exemplo, se pergunte: o que Object? Object apenas no diz nada sobre o que o
objeto ou faz. O Exemplo abaixo mostra como instruir o programa a reconhecer o objeto:
Sub criandoMenus()
Dim cmdBar
As Object
Dim mnu
As Object
Set cmdBar = CommandBars.Add(Name:="Criando Menus")
End Sub
Neste exemplo, estamos instruindo o VBA a acrescentar um objeto chamado cmdBar coleo de
barras de comando do aplicativo. O nome desta nova barra de comando Criando Menus. Ao
rodarmos o cdigo acima, podemos verificar que o objeto realmente adicionado coleo de
barras de comando indo at Ferramentas --> Personalizar. A figura abaixo mostra esta nova barra
na coleo:

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Figura 2-2

Para que esta barra de comando fique visvel, precisamos selecion-las na caixa de barras de
comando. Uma alternativa incluir no cdigo uma linha que faa isso:
Sub criandoMenus()
Dim cmdBar
As Object
Dim mnu
As Object
Set cmdBar = CommandBars.Add(Name:="Criando Menus")
cmdBar.Visible = True
End Sub
Ao executarmos o cdigo, a barra apresentada na tela:

Figura 2-3

Porm, como vimos anteriormente, a barra de comando pode estar em qualquer posio em
nossa rea de trabalho. O VBA nos permite posicionar a barra nas cinco cantos da rea de
trabalho. Estas posies so:
msoBarFloating (barra flutuante na tela)
msoBarTop (barra colocada no topo)
Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

msoBarLeft (barra colocada no canto esquerdo)


msoBarRight (barra colocada no canto direito)
msoBarBottom (barra colocada na parte inferior)
Para posicionar a nossa barra de comando utilizando Position:=nomeDaPosio (conforme a
lista anterior). O cdigo revisto fica:
Sub criandoMenus()
Dim cmdBar
As Object
Dim mnu
As Object
Set cmdBar = CommandBars.Add(Name:="Criando Menus", _
Position:=msoBarFloating)
cmdBar.Visible = True
End Sub
A barra de comando o objeto que recebe os menus (msoControlPopUp) e botes (como os
botes que possuem cones de salvar, abrir, etc.)
O objeto mnu criado anteriormente no diz nada sobre o objeto e precisamos defini-lo como
fizemos com o cmdBar. A lgica de insero a mesma que a anterior, isto , como inserimos a
barra de comando a coleo de barras de comando do Excel, agora, vamos adicionar um menu a
esta barra de comando:
Sub criandoMenus()
Dim cmdBar
As Object
Dim mnu
As Object
Set cmdBar = CommandBars.Add(Name:="Criando Menus", _
Position:=msoBarFloating)
Set mnu = cmdBar.Controls.Add(Type:=msoControlPopUp)
With mnu
.Caption = meu menu
.Width = 200
End With
cmdBar.Visible = True
End Sub
Com isso criamos nossa barra de comando contendo um menu:

Figura 2-4

O bloco With-End With nos permite definir as propriedades e mtodos do objeto mnu sem precisar
repetir o seu nome (mnu) para cada propriedade ou mtodo que definimos.
Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Por analogia, podemos criar outros menus, precisando apenas defini-los no cdigo. Para cada
mnu que entrar no cdigo. Por exemplo:
Sub criandoMenus()
... Cdigo anterior suprimido para este exemplo
Set mnu = cmdBar.Controls.Add(Type:=msoControlPopUp)
With mnu
.Caption = meu menu
End With
Set mnu = cmdBar.Controls.Add(Type:=msoControlPopUp)
With mnu
.Caption = Seu menu
End With
End Sub

Figura 2-5

Porm, o controle msoControlPopUp apenas abre o popup. Ele incapaz de executar


instrues. Para se executar instrues precisamos adicionar o controle msoControlButton. Este
controle pode ser inserido na barra ao no menu.
Sub criandoMenus()
... Cdigo anterior suprimido para este exemplo
Set mnu = cmdBar.Controls.Add(Type:=msoControlButton)
mnu.FaceId = 326
Set mnu = cmdBar.Controls.Add(Type:=msoControlPopUp)
mnu.Caption = meu menu
Set mnu = mnu.Controls.Add(Type:=msoControlButton)
mnu.FaceId = 926
Set mnu = cmdBar.Controls.Add(Type:=msoControlPopUp)
mnu.Caption = Seu menu
End Sub
Ao executarmos o cdigo obtemos o seguinte resultado:

Figura 2-6

Observe que no preciso definir um objeto para o boto. Podemos utilizar o objeto mnu para
fazer isso (poderamos at usar o cmdBar)1.
1

Embora seja possvel, esta prtica no aconselhvel. Mais adiante veremos o porqu.
Autor:
Robert F Martim
Criado em:
Publicado: www.juliobattisti.com.br
ltima edio:
Contato:
rm@faircourt.com

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Os leitores acostumados com VBA devem ter notado que ao inserir o ponto (.) aps o nome do
objeto a caixa contendo a lista de propriedades e mtodos no exibida. Mas quando tentamos
forar a exibio da caixa o VBE no aceita. Este tipo de problema diz respeito ao objeto em si.
Lembra quando perguntamos que objeto era esse? Pois bem, quando definimos a dimenso do
objeto como sendo Object ele pode ser qualquer coisa. Em outras palavras, a caixa de
propriedades e mtodos no fica disponvel porque o VBA no reconhece o objeto. A soluo para
o nosso problema bem simples: basta dimensionar o objeto corretamente.
Quando criamos nossa barra de comando, ns utilizamos os seguintes objetos:
CommandBar (para o cmdbar)
CommandBarPopup (para o msoControlPopUp)
CommandBarButton (para o msoControlButton)
Embora tenhamos utilizados estes objetos, ns no os dimensionamos explicitamente como
sendo este objeto. Quando dimensionamos o objeto importante dimension-lo com a classe
correta. Embora isso no afete o resultado, ele certamente afeta o desempenho e a nossa
produtividade. Nos exemplos anteriores fica difcil saber qual propriedade ou mtodo a ser
utilizado. A menos que voc os conhea o seu trabalho ser muito menos produtivo.

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

3.

Dimensionando os objetos corretamente

No h nada que diga que voc no possa utilizar o mtodo apresentado anteriormente para criar
suas barras de comando, menus e botes.
A figura abaixo mostra a criao das dimenses dos objetos utilizados:

Figura 3-1

Ao definirmos explicitamente o tipo do objeto estamos deixando o cdigo mais claro para outra
pessoa ler e estamos facilitando o nosso trabalho tambm. As dimenses so redefinidas abaixo:
Sub criandoMenus()
Dim cmdBar
As CommandBar
Dim mnu
As CommandBarPopup
Dim btn
As CommandBarButton
End Sub
Com dimenses definidas com a classe dos objetos corretamente, as vantagens comea
aparecer. Vamos ver o exemplo do boto (btn):

Figura 3-2

O VBA disponibiliza as propriedades e mtodos para o objeto btn porque ele sabe em qual classe
ele deve buscar tais informaes. O nosso trabalho fica mais dinmico e eficiente pois podemos
rapidamente correr a lista e buscar o que procuramos. Antes, precisvamos adivinhar ou saber de
antemo quais eram as propriedades e mtodos de cada objeto.

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Como os objetos possuem o prefixo CommandBars fica relativamente fcil dimensionar os objetos
corretamente. O cdigo completo comentado e dimensionado corretamente fica:
Sub criandoMenus()
Dim cmdBar
As CommandBar
Dim mnu
As CommandBarPopup
Dim btn
As CommandBarButton
On Error Resume Next Continua a execuo mesmo que haja um erro
Deleta o menu anterior se ele existir
CommandBars("Criando Menus").Delete
Adiciona o objeto cmdBar a coleo de barras de comando do Excel
A barra adicionada est posicionada como msoBarFloating.
Outras opes de posicionamento incluem:
msoBarTop, msoBarLeft, msoBarRight e msoBarBottom
Set cmdBar = CommandBars.Add(Name:="Criando Menus", _
Position:=msoBarFloating)
Adiciona um boto a barra de comando cmdBar
Set btn = cmdBar.Controls.Add(Type:=msoControlButton)
btn.FaceId = 326 Define a figura a ser mostrada no boto
Adiciona um menu a barra de comando cmdBar
Set mnu = cmdBar.Controls.Add(Type:=msoControlPopup)
With mnu
.Caption = "meu menu" Define o nome a ser exibido no menu
End With
Set btn = mnu.Controls.Add(Type:=msoControlButton)
btn.FaceId = 926
Set mnu = cmdBar.Controls.Add(Type:=msoControlPopup)
With mnu
.Caption = "Seu menu"
End With
cmdBar.Visible = True Exibi a barra de comando cmdBar
End Sub
Este exemplo est disponvel na pasta de trabalho MenusParte1.

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

10

4.

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Posicionando os objetos

Uma questo que devemos responder : onde devemos colocar nosso menu? Via de regra, ns
criamos menus para facilitar o trabalho e acesso do usurio a certos comandos, automaes ou
funes que criamos. Portanto, no adianta criar um menu do tipo msoControlPopup nos cantos
pois o acesso ao menu ficar estranho. Geralmente barras de comando so colocadas no topo
utilizando-se o msoBarTop. Um outro mtodo bastante utilizado criar um menu personalizado
na barra de comando contendo os menus do Excel.
Nesta parte estaremos fazendo exatamente isso. Estaremos posicionando o nosso menu em
diferentes pontos de nossa rea de trabalho.
No primeiro exemplo, repetiremos o cdigo desenvolvido anteriormente para adicionar alguns
extras. A primeira coisa que desejamos fazer posicionar a nossa barra de comando. No
momento, a barra est para flutuante e iremos coloc-la no lado esquerdo:
Sub criandoMenus()
Somente as partes novas sero repetidas. O resto ser suprimido
Set cmdBar = CommandBars.Add(Name:="Criando Menus", _
Position:=msoBarLeft) Fixa a barra do lado esquerdo
Protege a barra contra movimentos e redimensionamento
cmdBar.Protection = msoBarNoMove + msoBarNoResize
cmdBar.Visible = True Exibi a barra de comando cmdBar
End Sub
O cdigo acima introduz mais uma versatilidade das barras de comando. Muitas vezes no
queremos que o usurio fique movimentando as barras de comando, pois isso pode prejudicar o
layout geral do aplicativo que desenvolvemos. A maneira como isso feita demonstrada acima.
O posicionamento na lateral esquerda e fixo. O usurio no pode movimentar ou modificar o
tamanho da barra de comando. Outras formas de proteo incluem:
msoBarNoChangeDock (no permite acoplar a barra de comando aos cantos do aplicativo)
msoBarNoChangeVisible (no permite esconder a barra de comando)
msoBarNoCustomize (no permite que o usurio personalize a barra)
msoBarNoHorizontalDock (permite acoplar somente na vertical, isto , nas laterais
esquerda e direita do aplicativo)
msoBarNoMove (no permite a movimentao da barra)
msoBarNoProtection (a barra no possui proteo alguma)
msoBarNoResize (no permite o redimensionamento da barra)
Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

11

msoBarNoVerticalDock permite acoplar somente na horizontal, isto , na parte superior


ou inferior do aplicativo. Veja msoBarNoHorizontalDock)
Neste caso especfico, estamos lidando com o posicionamento de nossa barra de comando. E o
posicionamento de nosso menu? Como podemos posicionar o nosso menu no Excel?
Geralmente, quando criamos menus queremos adicion-los ao menu principal do Excel. Porm,
importante saber onde ele ser posicionado. Por exemplo, se desejamos posicionar nosso menu
antes do menu Arquivo, como procedemos? Os menus so indexados o que facilita o nosso
trabalho. Como o menu Arquivo o primeiro, a sua posio 1. A numerao continua assim at
o ltimo menu da barra de comando padro.
Para posicionar nosso menu no topo, modificaremos o nosso cdigo e dimenso dos objetos
ligeiramente:
Sub criandoMenus()
Dim cmdBar
As CommandBarPopup
Dim mnu
As CommandBarPopup
Dim btn
As CommandBarButton
End Sub
Como estamos interessados em adicionar um controle tipo menu ao menu principal do Excel,
precisamos redimension-lo para CommandBarPopup. Novamente, precisamos instruir o Excel de
forma que ele saiba o que fazer com os objetos:
Sub criandoMenus()
On Error Resume Next 'Continua a execuo mesmo que haja um erro
'Deleta o menu anterior se ele existir
CommandBars(1).Controls("Criando Menus").Delete
'Position defini a posio onde o menu ser inserido
'Neste caso ele inserido antes do menu "Arquivo"
Set cmdBar = CommandBars(1).Controls.Add(Type:=msoControlPopup, _
before:=1)
cmdBar.Caption = "Criando Menus"
Set btn = cmdBar.Controls.Add(Type:=msoControlButton)
With btn
.Caption = "Boto 1"
.FaceId = 326
End With
Set mnu = cmdBar.Controls.Add(Type:=msoControlPopup)
mnu.Caption = "menu 1" 'Define o nome a ser exibido no menu
Set btn = mnu.Controls.Add(Type:=msoControlButton)
With btn
.Caption = "Boto 2"
.FaceId = 926
End With
End Sub
O resultado:

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

12

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Figura 4-1

Alm de podemos adicionar os menus em qualquer posio do menu padro do Excel, podemos
tambm inserir botes nos prprios menus do Excel.
Por exemplo, vamos supor que desejamos acrescentar um boto no menu Arquivo antes do boto
Novo (o primeiro boto no menu Arquivo). Neste caso, precisamos saber qual o ID do menu em
questo. No caso do menu Arquivo o ID 30002.2
Sub criandoMenus()
Dim mnu
As CommandBarPopup
On Error Resume Next
Set mnu = CommandBars(1).FindControl(ID:=30002)
Set btn = mnu.Controls.Add(Type:=msoControlButton, Before:=1)
With btn
.Caption = "MEU BOTAO"
.FaceId = 984
End With
End Sub

Figura 4-2

Um boto inserido no menu Arquivo antes do boto Novo. A instruo Before (Antes de) indica
onde o boto ser inserido. No existe a opo After (Depois de), pois por analogia tudo que for
antes no pode ser depois. Em outras palavras, se nosso boto est antes de algum boto ou ele
o primeiro de tudo ou ele est posicionado depois de algum outro boto e, portanto, antes de
algum outro. Quando no definimos, o Excel sempre joga o boto no final da lista.
Com o menu criado, precisamos adicionar eventos aos botes. Observe que somente os botes
recebem eventos. Barras de comando e menus do tipo popup no executam comandos.

Uma lista contendo os nmeros de identificao dos itens dos menus pode ser encontrada em: http://www.microsoft.com

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

5.

13

Criando e executando aes nos menus

Quando criamos menus queremos executar algo. No adianta criar algo lindo e ele no funciona.
Como os botes temos duas maneiras para executar um comando no boto:
OnAction
Execute
A diferena entre OnAction e Execute que OnAction executa um comando que ns mesmos
criamos ao passo que Execute executa um comando interno do Excel como Imprimir, por
exemplo. Porm, o Execute acionado quando criamos nosso boto, portanto, iremos utilizar o ID
do boto interno para executar o comando.
Primeiramente, vamos criar o cdigo que montar nosso menu:
Sub executandoMenus()
Dim mnu
As CommandBarPopup
Dim btn
As CommandBarButton
On Error Resume Next
CommandBars(1).Controls("Executar comandos").Delete
Set
mnu
=
CommandBars(1).Controls.Add(Type:=msoControlPopup,
before:=1)
mnu.Caption = "Executar comandos"
Set btn = mnu.Controls.Add(Type:=msoControlButton)
With btn
.Caption = "Exemplo OnAction"
.FaceId = 400
.OnAction = "Mensagem" 'Mensagem refere-se a macro a ser executada
End With
'Defini o ID do boto como sendo 901 (Filtro Avanado).
'Quando o boto for clicado o Excel carrega a caixa do Filtro Avanado
Set btn = mnu.Controls.Add(Type:=msoControlButton, ID:=901)
With btn
.Caption = "Exemplo Execute"
.FaceId = 600
'Este mtodo est comentado pois utilizaremos
'o ID 901 para execut-lo
'.Execute
End With
End Sub
O nosso menu tem o seguinte aspecto:

Figura 5-1
Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

14

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Os faceIDs ficam a critrio do leitor. Mais adiante veremos como personalizar as carinhas dos
botes de menu.
Observe que no OnAction ns colocamos o nome da macro a ser executada. Porm, no caso do
Execute estaremos utilizando o nmero referente ao comando que desejamos executar para fazer
o que desejamos. Como o OnAction necessita de uma macro precisamos acrescent-la ao nosso
projeto. Como exemplo, podemos utilizar a seguinte sub-rotina:
Sub Mensagem()
MsgBox "Esta uma mensagem de teste gerada em: " & Date
End Sub
Quando clicamos no primeiro boto ele executa o OnAction e a mensagem passada para o
usurio:

Figura 5-2

J no segundo boto estamos executando um comando interno do Excel com um ID igual a 901:

Figura 5-3

Uma vez que definimos qual o ID do comando o mtodo Execute torna-se redundante, pois ao
clicarmos no boto o comando ser executado. Porm, h situaes onde queremos que o
comando seja executado quando o cdigo rodado.
Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

15

Os comandos acima so acessados atravs de um clique, porm, podemos tambm acrescentar


um combinao de teclas para criar um atalho para o nosso boto.
Atalhos so acessados diretamente do teclado e facilitam a execuo de comando, pois no
precisamos recorrer ao mouse toda vez que desejamos executar tal comando.
O processo o mesmo que o OnAction. Na verdade, o OnAction que determina a macro a
ser executada. O que precisamos fazer utilizar a propriedade ShortCutText para criar o
Atalho e defini-lo no cdigo
O procedimento a seguir descreve como adicionar um atalho de teclado ao menu. Primeiro,
precisamos criar o menu. Neste exemplo, anexaremos o nosso boto ao menu Arquivo:
Sub mnuAtalho()
Dim mnu As CommandBarPopup
Dim btn As CommandBarButton
On Error Resume Next
'apaga o menu caso ele j exista
Call deletarMenu
Set mnu = CommandBars(1).FindControl(Id:=30002)
Set btn = mnu.Controls.Add(Type:=msoControlButton, before:=1)
With btn
.Caption = "&Abrir texto" 'O ampersand (&) indica o atalho
.ShortcutText = "Ctrl+Shift+A"
.OnAction = "abrirTxt"
End With
'Adiciona o atalho a macro que desejamos rodar
Application.MacroOptions Macro:="abrirTxt", _
HasShortcutKey:=True, _
ShortcutKey:="A"
' a letra que comanda o atalho.
'Neste caso a letra "A"
End Sub
A compilao acima e composta de duas partes. A primeira monta o menu que desejamos e a
segunda cria o Atalho (Shortcut) que desejamos. importante lembrar que certos atalhos podem
entrar em conflito com algum atalho do sistema. No caso anterior, se o atalho for definido como
Ctrl+Alt+A ao pressionar esta combinao de teclas obtemos ao invs da execuo do
comando.
Observe tambm que, diferentemente do que foi feito antes, para deletar o menu anterior
chamamos uma sub-rotina diferentes. Esta forma de construo melhor do que a utilizada
anteriormente, pois possibilita a chamada da deleo sem construir um novo menu. Nos exemplos
que o leitor encontrar neste mdulo a utilizao de ambos os mtodos feita propositalmente
para forar o aprendizado.
Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

16

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Voltando da digresso, ao pressionarmos Ctrl+Shift+A a caixa de dilogo abrir mostrada e


filtrada para mostrar somente arquivos texto:

Figura 5-4

A criao de atalhos para menu devem ser pensadas de antemo para que os atalhos tenham
significado sejam intuitivos.

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

6.

17

Colocando os FaceIDs

Nos exemplos anteriores em vrios casos foi colocado um FaceID no boto. O nico objeto do
menu que pode receber a carinha o boto.
O Excel possui centenas dessas carinhas que podem ser utilizadas em nossos projetos. A figura
abaixo mostra uma planilha do Excel contendo diversas carinhas e suas respectivas referncias
numricas3:

Figura 6-1

Alm das carinhas disponibilizadas com o Excel podemos tambm utilizar as nossas carinhas
personalizadas. Para utilizar as carinhas disponveis com o Excel basta seguir os exemplos
anteriores. Porm, para criar as nossas prprias carinhas precisamos desenvolver nosso cdigo
um pouco. A figura abaixo mostra uma barra de comando contendo FaceIDs personalizadas:

Figura 6-2

6.1. FaceID personalizadas


Para se criar este tipo de temos que passar por dois processos:
1. Copiar a figura

Esta planilha pode ser baixada no seguinte endereo: www.j-walk.com/ss/excel/tips/faceidgrid.exe

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

18

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

2. Colar a figura no boto


Para iniciar vamos criar vrias figuras em uma planilha. As figuras podem ser desenhadas (como
no exemplo abaixo) ou importadas de arquivos qualquer.

Figura 6-3

Acima, temos 7 figuras distintas que utilizaremos para criar a barra de comando personalizada
como mostrado anteriormente. Para o que desejamos fazer, precisamos dar nomes que as
figuras. O ideal que os nomes sejam em sria. Neste caso especfico, os nomes so fig1, fig2,
fig3, fig4, fig5, fig6 e fig7.
Como o processo de copiar envolve a seleo do objeto a ser copiado, precisamos levar isso em
conta no nosso cdigo. Alm disso, tendo em vista que copiamos estas figuras para uma planilha
em nossa pasta de trabalho precisamos fazer referncia a esta pasta tambm.
Sendo assim, o cdigo que resolve nosso problema pode ser dado por:
Sub carinhasPersonalizadas()
Dim cmdBar
As CommandBar
Dim btn
As CommandBarButton
Dim ws
As Worksheet
On Error Resume Next
CommandBars("Carinhas personalizadas").Delete
Set ws = ThisWorkbook.Sheets("FaceID")
Set cmdBar = CommandBars.Add(Name:="Carinhas personalizadas", _
Position:=msoBarFloating)
For i = 1 To 7
ws.Shapes("fig" & i).Select
Selection.Copy
Set btn = cmdBar.Controls.Add(Type:=msoControlButton)
With btn
.Caption = "Meu nome fig" & i
.Width = 30
.PasteFace
End With
Next i
cmdBar.Visible = True
End Sub
Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

19

O que o cdigo est fazendo


Primeiramente precisamos definir os objetos. O objeto novo o ws (worksheet planilha). Uma
vez que dimensionamos o objeto precisamos dizer ao programa para definir a ws como sendo a
planilha FaceID.
O cdigo continuar a se desenvolver como nos exemplos anteriores, isto , damos um set no
cmdBar e nos botes. A nica diferena aqui que ao dar o set no Caption do boto fazemos
isso dentro de um loop.

Figura 6-4

O exemplo deste tpico encontra-se na planilha FaceIDs Personalizados.xls que


acompanha este mdulo.

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

20

7.

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Criando menus de atalho

Um outro tipo de menu interessante o menu de atalho. Este menu acessado quando clicamos
com o boto direito do mouse sobre a planilha ou qualquer outro local de nossa rea de trabalho
como mostra figura abaixo:

Figura 7-1

Nesta parte estaremos vendo exatamente este tipo de menu.


Assim como os menus anteriores, podemos acrescentar o nosso boto ao menu de atalho.
Contudo, podemos tambm criar os nossos menus de atalho que respondem quando clicamos em
determinados locais da rea de trabalho.
A lgica para criao deste tipo de menu a mesma que a anterior.
O que precisamos definir claramente o evento BeforeRightClick na planilha onde ele
ocorrer. Alm disso iremos definir a criao do atalho assim que a planilha abrir e a destruio do
menu quando a planilha fechar. Esta uma boa prtica que estaremos desenvolvendo agora, pois
no uma boa idia deixar barras de comando ou menus sem suas referncias.

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

21

Primeiro, vamos criar o menu. Para isso utilizaremos dois mdulo: um que conter o cdigo para a
criao dos menus e outro que conter as aes (OnAction) efetuadas pelo menu4.
O menu que estaremos criando conter as seguintes opes:
Negrito (transforma a seleo em negrito)
Itlico (transforma a seleo em itlico)
Sublinhado (transforma a seleo em sublinhado)
Sobre (mostra informaes sobre este aplicativo)
Ajuda (mostra a ajuda para do Excel XP)
O cdigo de ser escrito em um mdulo para menu somente (neste exemplo, o nome do mdulo
modMenu). O cdigo construdo com as opes acima fica:
Public Const BARRA As String = "mnuAtalho" 'constante do nome do menu
Sub mnuAtalho()
Dim cmdBar As CommandBar
Dim mnu
As CommandBarButton
delAtalho 'Apaga a barra de comando anterior caso ela exista
Set cmdBar = CommandBars.Add _
(Name:=BARRA, Position:=msoBarPopup, Temporary:=True)
Set mnu = cmdBar.Controls.Add(Type:=msoControlButton)
With mnu
.Caption = "Negrito"
.OnAction = "negrito"
.FaceId = 113
End With
Set mnu = cmdBar.Controls.Add(Type:=msoControlButton)
With mnu
.Caption = "Itlico"
.OnAction = "itlico"
.FaceId = 114
End With
Set mnu = cmdBar.Controls.Add(Type:=msoControlButton)
With mnu
.Caption = "Sublinhado"
.OnAction = "sublinhado"
.FaceId = 115
End With
Set mnu = cmdBar.Controls.Add(Type:=msoControlButton)
With mnu
.Caption = "&Sobre..."
.OnAction = "sobre"
.FaceId = 326
.BeginGroup = True
End With
4

No necessria a criao de dois mdulos para fazer isso.Os mdulos criados aqui so para melhor organizao do material.

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

22

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Set mnu = cmdBar.Controls.Add(Type:=msoControlButton)


With mnu
.Caption = "&Ajuda"
.OnAction = "ajuda"
.FaceId = 984
.BeginGroup = True
End With
End Sub
Uma vez compilado, o menu ter o seguinte formato:

Figura 7-2

Porm, ainda no estamos prontos para a compilao. Precisamos definir os OnAction para
cada boto em nosso menu e os eventos que iro dispara o menu acima.
No mesmo mdulo acrescente o cdigo para deleo do menu:
Sub delAtalho()
'Apaga a barra de comando anterior caso ela exista
On Error Resume Next
CommandBars(BARRA).Delete
End Sub
Crie um mdulo chamado modOnAction onde entraremos os seguintes cdigos:
Sub negrito()
'Modifica a seleo para negrito
Selection.Font.Bold = True
End Sub
Sub itlico()
'Modifica a seleo para itlico
Selection.Font.Italic = True
End Sub
Sub sublinhado()
'Modifica a seleo para sublinhado
Selection.Font.Underline = True
End Sub

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

23

Sub sobre()
msg = "Este exemplo foi criado por Robert F Martim como parte " _
& "do mdulo sobre criao "
msg = msg & "de menus de atalho utilizando VBA no " _
& "Excel." & vbCr & vbCr
msg = msg & "Para maiores informaes visite: " _
& "www.juliobattisti.com.br" & vbCr & vbCr
msg = msg & "Para falar com o autor escreva para: rm@faircourt.com"
MsgBox msg, vbInformation, "Sobre este mdulo..."
End Sub
Sub ajuda()
'Mostra o Help do Excel XP
'Caso o seu Excel seja o 2000, mude para XLMAIN9
'Se for o 2003, mude para XLMAIN11
Application.Help "XLMAIN10.CHM"
End Sub
Como o menu disparado quando clicamos com o boto direito do mouse, precisamos criar este
evento. Nesta parte estamos interessados no RightClick na Plan1. Abra o VBE da Plan1 e
entre o seguinte cdigo:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, _
Cancel As Boolean)
If Union(Target.Range("A1"), Range("A1:O32")).Address = _
Range("A1:O32").Address Then
CommandBars(BARRA).ShowPopup
Cancel = True 'Cancela o Popup padro do Excel
End If
End Sub
Est a parte final de nosso cdigo. O cdigo para criao e deleo do menu quando a planilha
aberta ou fechada encontra-se na planilha que acompanha este tpico e no ser repetido
abaixo.
Ao clicar e executar o menu:

Figura 7-3

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

24

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

A nossa prxima parada adicionar o nosso boto a um dos menus de atalho padro do Excel.
Para fazermos isso, precisamos saber o ndice ou nome do menu ao qual acrescentaremos. Com
este mdulo h um aplicativo que cria uma lista dos nomes destes menus para sua futura
referncia.
A barra de comando que nos interessa a Cell cujo ndice 295. Para adicionar um boto a esta
barra de comando, procedemos da mesma forma quando adicionamos o boto ao menu principal
do Excel:
Sub mnuAtalho()
Dim mnu As CommandBarButton
delAtalho
Set mnu = CommandBars(29).Controls.Add(Type:=msoControlButton, _
before:=1)
With mnu
.Caption = "Sobre..."
.FaceId = 326
.OnAction = "sobre"
End With
End Sub
No cdigo anterior, chamamos a sub-rotina delAtalho. Diferentemente dos exemplos anteriores
no iremos utilizar o mtodo Delete, mas o mtodo Reset:
Sub delAtalho()
On Error Resume Next
CommandBars(29).Reset
End Sub
Aps a compilao do menu e o clique direito sobre qualquer rea da planilha:

No Excel 2002, o ndice 28.


Autor:
Robert F Martim
Publicado: www.juliobattisti.com.br
Contato:
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

25

Figura 7-4

Os dois exemplos deste tpico encontra-se nas planilhas MenuAtalho1.xls e


MenuAtalho2.xls que acompanham este mdulo.

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

26

8.

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Menus Dropdown

Os menus tipo dropdown (tambm chamados de combobox) so os menus que contm uma lista
que quando clicada disponibiliza os itens da lista para o usurio. A figura abaixo mostra o exemplo
clssico do Excel:

Figure 8-1

Atravs desta lista podemos selecionar a visualizao de nossa rea de trabalho, isto , podemos
ampliar ou reduzir o tamanho da rea de trabalho conforme necessrio.
O exemplo que estaremos olhando retirado de uma de minhas respostas no frum sobre este
assunto. Contudo, a resposta no frum utiliza apenas uma das possibilidades. Aqui estaremos
vendo como construir este tipo de combobox de uma forma diferente.
A nossa combobox conter uma lista de todas as planilhas disponveis na pasta de trabalho e
quando um item da lista selecionado a planilha em questo selecionada. Este mtodo pode
ser interessante se possumos um nmero elevado de planilhas ou se desejamos esconder as
guias das planilhas, por exemplo.
O menu que construiremos mostrado na figura abaixo:

Figure 8-2

Primeiramente, vamos definir o nome da barra de comando como sendo uma Public Const
(constante pblica). No topo do mdulo devemos entrar a seguinte linha:
Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

27

Public Const CMDBARNOME As String = "Menu combobox"


O nome da constante pode ser qualquer coisa que o leitor desejar. Agora, a constante
CMDBARNOME pode ser acessada de qualquer sub-rotina que escrevemos sem a necessidade de
redimension-la. O prximo passo a construo do menu:
Sub wsMenus()
Dim cmdBar
Dim btnDropDown
Dim ws
Dim wb
Dim wsNome

As CommandBar
As Object
As Worksheet
As Workbook
As String

Set wb = ActiveWorkbook
On Error Resume Next
CommandBars(CMDBARNOME).Delete
Set cmdBar = CommandBars.Add(Name:=CMDBARNOME, _
Position:=msoBarFloating)
Set btnDropDown = cmdBar.Controls.Add(msoControlComboBox)
btnDropDown.Width = 200
For Each ws In wb.Sheets
wsNome = ws.Name
btnDropDown.AddItem wsNome
Next
btnDropDown.ListIndex = 1
btnDropDown.OnAction = "wsAcessar"
cmdBar.Visible = True
End Sub
Como o controle btnDropDown no esta disponvel nos objeto Commandbar, o definimos como
sendo um Object apenas. O mtodo para se adicionar um item ao btnDropDown o mesmo
que utilizamos para adicionar um item a uma listbox ou combobox em um formulrio. Desta
forma, se houver alguma dvida sobre os mtodos e propriedades disponveis em um
msoControlComboBox podemos procurar nas propriedades e mtodos de um combobox para
formulrio, pois ambos so quase idnticos.
O ListIndex da combobox colocado para 1, pois queremos que o primeiro item da lista seja
selecionado. Se pularmos esta linha, o primeiro item da lista aparece em branco como mostram as
figuras abaixo:

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

28

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Figura 8-1

Figura 8-2

Este apenas um detalhe e fica a critrio do leitor definir em qual modo se pretende apresentar a
barra de comando.
Com a barra de comando e o btnDropDown prontos, precisamos definir a macro que executa o
OnAction. Em nosso cdigo chamamos esta macro de wsAcessar. Quando um dos itens da
lista selecionado esta sub-rotina executada.
Sub wsAcessar()
Dim wsndice As Integer
wsndice= CommandBars(CMDBARNOME).Controls(1).ListIndex
ThisWorkbook.Sheets(wsndice).Activate
End Sub
A dimenso wsndice refere-se ao ndice do item na btnDropDown. Contudo, como este o
ndice referente planilha, tambm, podemos utilizar valor para ativar a planilha selecionada na
lista. Um outro ponto a ser observado que podemos dispensar o wsndice e escrever somente
uma linha de cdigo nesta sub-rotina:
ThisWorkbook.Sheets(CommandBars(CMDBARNOME). _
Controls(1).ListIndex).Activate
Portanto, podemos cortar o dimensionamento de wsndice e a linha que o define como sendo
igual ao ndice do item selecionado no controle btnDropDown.
Infelizmente, o mtodo anterior deixa vrias perguntas no ar: e se uma planilha for removida ou
adicionada? E se uma planilha mudar de posio? Se fizermos isso, veremos que o mtodo
anterior falha em nos fornecer as respostas s questes colocadas. A soluo rever o mtodo
utilizado e procurar uma soluo melhor.
Contudo, solues no so vendidas em latinhas no mercado da esquina e precisamos pensar em
uma maneira mais eficiente e pesquisar uma soluo. Em programao uma soluo no existe
at que ela seja inventada. O prximo exemplo utiliza uma Class para inventar uma resposta
para nossa questo.
Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

29

Primeiro, vamos definir o problema. Como a Class manipula os eventos e as propriedades,


estamos interessados em uma classe que:
Reconhea quando uma planilha e adicionada ou removida da pasta atual
Reconhea quando mudamos uma planilha de posio
Reconhea a pasta de trabalho atual e atualize a btnDropDown
A primeira parte requer a definio do evento que desejamos capturar:
Public WithEvents appXL As Application
Os eventos so referentes ao aplicativo Excel. Veja que a definio pblica como fizemos com a
constante do nome de nossa barra de comando. Assim como definimos a constante como sendo
um String aqui definimos os eventos sendo capturados como sendo Application.
A seguir, escrevemos o cdigo que manipular o evento dentro da classe. Primeiramente,
capturaremos os eventos que ocorrem na pasta ativa e dizem respeito s planilhas desta pasta:
Private Sub appXL_SheetActivate(ByVal Sh As Object)
Dim btnDropDown
As Object
Dim ws
As Worksheet
Dim i
As Long
Set btnDropDown = CommandBars(CMDBARNOME).FindControl _
(Type:=msoControlDropdown, Tag:="Lista")
btnDropDown.Clear
For Each ws In Sh.Parent.Sheets
btnDropDown.AddItem ws.Name
Next
For i = 1 To btnDropDown.ListCount
If btnDropDown.List(i) = Sh.Name Then _
btnDropDown.ListIndex = i: Exit For
Next
End Sub
A declarao das variveis segue os exemplos anteriores. Em seguida, definimos o
btnDropDown atravs do mtodo FindControl o qual aplicado em nossa barra de comando.
A busca feita atravs do Tag que utilizaremos na sub-rotina que desenvolveremos. O
FindControl tambm pode ser utilizado com o nmero do ndice do controle, porm, quando o
desenvolvimento no de larga escala mais fcil visualizar o que estamos fazendo atravs de
Tags.

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

30

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Aps a definio do objeto btnDropDown, limpamos quaisquer valores que esto presentes no
btnDropDown. Embora neste exemplo isto no seja crtico boa prtica sempre limpar qualquer
lista antes de adicionar uma lista nova.
Com o objeto ws fazemos, agora, um loop em todas as planilhas presentes na pasta ativa.
Utilizamos o mtodo AddItem como fizemos em nosso primeiro exemplo.
Finalmente, checamos o ndice do btnDropDown e casamos este valor com o ndice e nome da
planilha a qual ele se refere.
Como isso terminamos a captura dos eventos ocorridos nas planilhas. Agora, precisamos capturar
os eventos da pasta de trabalho. Aqui, teremos menos trabalhos pois queremos apenas saber a
pasta atual para que o evento da planilha seja reprocessado. Assim sendo, tudo que desejamos
saber quando uma pasta nova ativada para que o evento da planilha seja rodado:
Private Sub appXL_WorkbookActivate(ByVal Wb As Workbook)
appXL_SheetActivate Wb.ActiveSheet
End Sub
Quando uma pasta de trabalho (workbook) ativada o evento para a planilha rodado e definido
como a planilha ativa (ActiveSheet) na pasta de trabalho atual (AtiveWorkbook). Quando o
evento ocorre as planilhas listadas no btnDropDown so as da pasta ativa.
Para terminar precisamos construir nossa barra de comando contendo a combobox. Depois das
vrias construes anteriores, no h segredo algum nesta construo, apenas algumas
novidades:
Public Const CMDBARNOME As String = "Menu combobox"
'Dimensiona o objeto contendo os eventos como sendo a classe onde
'onde eventos foram definidos
Dim appExcel As New Classe1
Sub wsMenus()
Dim cmdBar
Dim btnDropDown

As CommandBar
As Object

Set cmdBar = CommandBars.Add(CMDBARNOME, msoBarFloating)


cmdBar.Width = 150
Set btnDropDown = cmdBar.Controls.Add(Type:=msoControlDropdown)
With btnDropDown
.Tag = "Lista"
.OnAction = "selPlanilha"
.Width = 150
End With
'Define os eventos do aplicativo que sero monitorados
Set appExcel.appXL = Application
Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

31

With cmdBar
.Visible = True
.Protection = msoBarNoChangeDock + msoBarNoResize
End With
End Sub
Primeiramente, precisamos acessar as informaes contidas na Classe1. Para fazer isso
dimensionamos um objeto (neste caso appExcel) como uma nova classe que referida como a
classe por ns criada.
Em seguida criamos nosso menu como fizemos anteriormente. Quando definimos as propriedades
do btnDropDown acrescentamos um Tag ao btnDropDown pois este o valor sendo
procurado na Classe1 atravs do FindControl.
Finalmente, definimos a propriedade appXL da dimenso appExcel como sendo o aplicativo
(Application). O restando do cdigo j foi discutido, sendo desnecessrio explicar novamente.
O cdigo anterior criar o menu e aplica os eventos ao menu. Porm, ainda precisamos definir a
sub-rotina que ativa a planilha selecionada na lista. Esta sub-rotina foi chamada de selPlanilha
na propriedade OnAction:
Sub selPlanilha()
Dim btnDropDown As Object
On Error Resume Next
Set btnDropDown = CommandBars.FindControl _
(Type:=msoControlDropdown, Tag:="Lista")
ActiveWorkbook.Sheets(btnDropDown.Text).Activate
End Sub
Mais uma vez utilizamos a Tag para encontrar o controle btnDropDown. Quando o controle
encontrado, instrumos o Excel a selecionar a planilha cujo nome igual ao texto contido no
btnDropDown.
Terminamos aqui a soluo de nosso problema.
Os dois exemplos deste tpico encontram-se respectivamente nas planilhas
MenuCombobox1.xls e MenuCombobox1.xls que acompanham este mdulo.

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

32

9.

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Botes Toggle

Botes do tipo toggle so teis quando desejamos ativar ou desativar algo em nossa pasta.
Vamos supor por exemplo que desejamos esconder as guias das planilhas..
O processo um pouco lento pois precisamos ir at Ferramentas Opes e depois
selecionar a opo que desejamos. Com um boto do tipo toggle podemos fazer exatamente isso
facilitando o nosso trabalho enormemente.
No tpico anterior, tivemos que criar uma classe para lidar com os eventos. Aqui, teremos que
fazer a mesma coisa. O que acontece que se mudarmos de uma pasta onde as guias esto
escondidas para uma onde elas no esto, sem uma classe para lidar com o evento de mudana
de uma pasta para outra o boto toggle no refletir a mudana e permanecer ticado ou no. A
figura abaixo mostra um exemplo de boto toggle:

Figura 9-1

Novamente, iremos iniciar pela classe que lidar com os seguintes eventos:
Ativao da planilha
Ativao da pasta
Ativao da janela
Como cada planilha dentro de uma pasta pode ter as guias ativas ou no, precisamos ter certeza
que quando mudamos de planilha o estado do boto toggle tambm muda. O mesmo vale para a
pasta de trabalho quando uma nova pasta adicionada, por exemplo.
Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

33

A ativao da janela um outro evento, pois podemos estar trabalhando em pastas diferentes as
quais acessamos conforme desenvolvemos o trabalho. Os eventos aqui so mais fceis do que os
do tpico anterior:
Public WithEvents appXL As Application
Private Sub appXL_SheetActivate(ByVal Sh As Object)
Call mostrarGuias
End Sub
Private Sub appXL_WorkbookActivate(ByVal Wb As Workbook)
Call mostrarGuias
End Sub
Private Sub appXL_WindowActivate(ByVal Wb As Workbook, _
ByVal Wn As Window)
Call mostrarGuias
End Sub
O primeiro evento diz respeito a ativao da planilha (worksheet). O segundo o evento da
pasta (workbook) e o terceiro o evento conjunto da janela (window) e da pasta (workbook).
Com os eventos definidos, podemos construir o mdulo que criar o menu:
Dim appExcel As New Classe1
Public Const MNUNOME = "Exemplo Toggle"
Sub wsMenus()
Dim mnu
Dim btn

As CommandBarPopup
As CommandBarButton

Set mnu = CommandBars(1).Controls.Add _


(Type:=msoControlPopup, before:=1)
mnu.Caption = MNUNOME
Set btn = mnu.Controls.Add(Type:=msoControlButton)
With btn
.Caption = "&Mostrar guia"
.OnAction = "guias"
.Tag = "ExemploToggle"
End With
Set appExcel.appXL = Application
End Sub

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

34

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Como pode ser observado a construo do menu idntica as anteriores. Precisamos agora
construir a macro guias que chamada quando clicamos no boto:
Sub guias()
If TypeName(ActiveSheet) = "Worksheet" Then
ActiveWindow.DisplayWorkbookTabs = _
Not ActiveWindow.DisplayWorkbookTabs
Call mostrarGuias
End If
End Sub
Esta sub-rotina checa primeiramente se o tipo uma planilha. Se sim, checamos o estado das
guias. Vamos supor que mostrar a guia (DisplayWorkbookTabs) seja falso (false). No cdigo
acima estamos invertendo este valor, pois aps o clique o DisplayWorkbookTabs deve assumir
o valor verdadeiro. Como no sabemos de antemo qual o estado das guias, utilizamos o
estado atual das guias para definir o novo estado.
A funo Not no VBA, assim como na planilha, utilizada para inverter o valor Boolean de um
expresso. Em outras palavras, se o valor verdadeiro (true) a funo Not retorna falso
(false) e vice-versa. No prxima sub-rotina, isso deve ficar mais claro.
Resolvida a sub-rotina anterior, chamamos a sub-rotina que mostrar ou esconder as guias:
Sub mostrarGuias()
Dim btn As Object
Dim btnDropDown As Object
On Error Resume Next
Set btn = CommandBars.FindControl _
(Type:=msoControlButton, Tag:="ExemploToggle")
If Not ActiveWindow.DisplayWorkbookTabs = True Then
btn.State = msoButtonUp
Else:
btn.State = msoButtonDown
End If
End Sub
Observe como a construo do Not tem um significado literal: If not true (se no for
verdadeiro) Then (ento). Em outras palavras, se ActiveWindow.DisplayWorkbookTabs for
falso (false), ento o estado do boto toggle msoButtonUp. Por outro lado, se
ActiveWindow.DisplayWorkbookTabs for verdadeiro (true) o estado do boto
msoButtonDown. Esta mesma construo poderia ter sido:
If ActiveWindow.DisplayWorkbookTabs = False Then
btn.State = msoButtonUp
ElseIf ActiveWindow.DisplayWorkbookTabs = True
btn.State = msoButtonDown
End If
Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

35

Porm, com a segunda opo acrescentamos linhas extras de cdigo desnecessrias.


O trabalho final para o boto toggle:

Figure 9-1

O exemplo deste tpico encontra-se na planilha MenuToggle.xls.

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

36

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

10. Automatizando a criao de menus


At este ponto criamos vrios menus e o leitor deve ter percebido que se o volume de menus e
botes for elevado teremos um grande problema, pois o cdigo ficar muito longo.
Esta parte dedicada automao deste processo. Embora os mtodos anteriores sejam
considerados automaes, aqui automao quer dizer separar o cdigo dos itens que compem
a barra de comando e menus.
Vamos supor que desejamos inserir um menu antes do menu Arquivo no Excel. Este novo menu,
conter 8 diferentes botes e dois popups. O primeiro popup conter 5 botes e o segundo popup
conter 6 botes. Coloque agora no contexto dos cdigos anteriores.
desnecessrio dizer que o cdigo para a construo de tal menu ser enorme. Sem contar que
se houver necessidade de acrescentar ou retirar menus e botes temos que editar diretamente no
cdigo. Voc esqueceu um acento e tem que correr para o cdigo. Um menu foi inserido na ordem
errada e l vamos ns para o cdigo novamente.
Com certeza deve haver uma forma mais fcil para fazer isso, certo? Correto. Contudo, formas
mais fceis de fazer algo esto sempre evoluindo. Antes viajar de cavalo era eficiente, depois foi
carro e hoje avio. Em breve ser foguetes e quem sabe um dia viajaremos por tele
transportao como no Jornada nas Estrelas.
Os mtodos apresentados funcionam assim. Hoje, eles so eficientes. Amanh algum inventa
uma idia melhor. Portanto, ao desenvolver os mtodos apresentados pense em como voc pode
melhorar-los.
Deixando o papo furado de lado, vamos ao que interessa: como melhorar o procedimento de
criao de menus.
Primeiramente, precisamos estar claros do que desejamos fazer. Por exemplo, queremos
acrescentar um FaceID? Queremos acrescentar um atalho? Qual a ao a ser executada? O que
est sendo adicionado uma barra de comando, menu ou boto? Em que ordem eles entram?
Onde eles estaro posicionados? Flutuando ou anexado ao menu principal do Excel?
Estas so perguntas que precisamos fazer antes de construirmos qualquer coisa. Observe que
quando perguntamos algo, efetivamente j temos as respostas do que procuramos. Pense nisso.
Voc sabe as respostas, porm, no sabe como implement-las. Esta a diferena. Portanto, se
h uma pergunta tem que haver uma resposta, caso contrrio a pergunta invlida.
Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

37

Como isto em mente estamos prontos para iniciar a construo de nossa folha de soluo. Aqui,
passarei o meu raciocnio por trs da soluo por mim apresentada.
O Excel uma grande matriz e utilizaremos isso em nosso favor. Por exemplo, imagine a Plan1
como sendo a nossa barra de comando. Tudo que est dentro da Plan1 , portanto, um item de
nossa barra de comando, por analogia.
Agora imagine a primeira linha com diversos cabealhos e embaixo de cada cabealho um srie
de itens. Se cada cabealho um menu (popup), ento, cada item abaixo um boto deste
popup.
Outra forma de visualizar isso dizer que cada planilha um menu (popup) e os itens contidos
dentro de cada planilha representam os botes destes popups. O nome da barra de comando
seria, digamos, o nome da pasta.
Como podemos ver, com um pouco de imaginao estamos contemplando formas diferentes de
solucionar o mesmo problema. Como cada objeto tem suas propriedades, precisamos definir
quais propriedades nos interessam. Para o primeiro exemplo estaremos utilizando as seguintes
propriedades:
Name/Caption
FaceId (para botes somente)
OnAction (para botes somente)
ShortcutText (para botes somente)
BeginGroup
Como a barra de comando composta por trs objetos, estaremos manipulando estes trs casos:
CMDBAR (a barra de comando em si)
MMENU (o menus tipo popup)
BOTAO (os botes que executaro os comandos)
Para evitar erro na digitao (o que nos causaria dores de cabea no cdigo) os trs itens acima
sero selecionados a partir de uma lista de validao.
Uma vez construda a sua tabela em uma planilha do Excel, o formato geral deve ter a seguinte
cara:
Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

38

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Figura 10-1

Como cada propriedade est escrita em ingls no VBA, os cabealhos tambm foram inseridos
em ingls para facilitar a referncia, leitura e compreenso.
Como de praxe, iniciamos o nosso cdigo com a declarao das variveis:
Sub MenusAutomatizados()
Dim
Dim
Dim
Dim
Dim

ws
linha
cBar
mnu
btn

As
As
As
As
As

Worksheet
Long
CommandBar
CommandBarPopup
CommandBarButton

Set ws = ThisWorkbook.Sheets("ItensMenus")
linha = 3
End Sub
A varivel ws importante pois precisamos definir onde esto os itens que fazem parte de nossa
barra de comando. A varivel linha importante pois efetuaremos um loop na primeira coluna
para varrer todos os itens entrados. Como o primeiro item est na linha nmero 3 o valor inicial de
nossa linha definido como sendo 3.
O nosso prximo passo definir os casos:
Sub MenusAutomatizados ()
'Aqui entram as linhas apresentadas acima
With ws
Do Until IsEmpty(.Cells(linha, 1))
TIPO = .Cells(linha, 1)
Select Case TIPO
Case "CMDBAR"
'Cdigo de construo da barra entrar aqui
Case "MMENU"
'Cdigo de construo da menu entrar aqui
Case "BOTAO"
'Cdigo de construo do boto entrar aqui
End Select
linha = linha + 1
Loop
End With
End Sub

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

39

O que o cdigo acima est fazendo definir o TIPO conforme o loop ocorre, seleciona o caso do
tipo (ie CMDBAR, MMENU ou BOTAO). As casos esto entre aspas porque so textos
(string). Uma vez decidido qual o caso contido na ws.cells(linha,1) o caso executado.
Como os objetos so inseridos em ordem, precisamos definir isso claramente. Como foi dito
anteriormente, se em um planilha temos um coluna com um cabealho que representa o menu,
ento, tudo abaixo deste cabealho representa os botes deste menu.
A estrutura apresentada acima segue esta mesma lgica. Se esta ordem no for seguida, os
botes sero adicionados aos menus errados.
Definindo o primeiro caso (Case "CMDBAR"), temos:
Case "CMDBAR"
Set cBar = CommandBars.Add _
(Name:=.Cells(linha, 2), Position:=msoBarFloating)
Se este foi o caso encontrado durante o loop ele executado. O nosso prximo caso o menu
popup (Case "MMENU"). A construo deste caso :
Case "MMENU"
Set mnu = cBar.Controls.Add(Type:=msoControlPopup)
mnu.Caption = ws.Cells(linha, 2)
Como o rtulo (Caption) encontra-se na segunda coluna, basta definir a linha atual do loop como
sendo o local onde o texto se encontra. O mesmo vale para o BeginGroup.
Finalmente, temos o caso do boto (Case "BOTAO"):
Case "BOTAO"
Set btn = mnu.Controls.Add(Type:=msoControlButton)
With btn
.Caption = ws.Cells(linha, 2)
.FaceId = ws.Cells(linha, 3)
.OnAction = ws.Cells(linha, 4)
.ShortcutText = ws.Cells(linha, 5)
.BeginGroup = ws.Cells(linha, 6)
End With
Aqui, as propriedades do boto so inseridas conforme a sua respectiva posio na tabela
apresentada acima.
Montando o quebra-cabea do cdigo acima temos:

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

40

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Sub MenusAutomatizados ()
Dim
Dim
Dim
Dim
Dim

ws
linha
cBar
mnu
btn

As
As
As
As
As

Worksheet
Long
CommandBar
CommandBarPopup
CommandBarButton

Set ws = ThisWorkbook.Sheets("ItensMenus")
linha = 3
delBarra 'Deleta a barra anterior caso ela exista
With ws
Do Until IsEmpty(.Cells(linha, 1))
TIPO = .Cells(linha, 1)
Select Case TIPO
Case "CMDBAR"
Set cBar = CommandBars.Add _
(Name:=.Cells(linha, 2), Position:=msoBarFloating)
Case "MMENU"
Set mnu = cBar.Controls.Add(Type:=msoControlPopup)
mnu.Caption = ws.Cells(linha, 2)
Case "BOTAO"
Set btn = mnu.Controls.Add(Type:=msoControlButton)
With btn
.Caption = ws.Cells(linha, 2)
.FaceId = ws.Cells(linha, 3)
.OnAction = ws.Cells(linha, 4)
.ShortcutText = ws.Cells(linha, 5)
.BeginGroup = ws.Cells(linha, 6)
End With
End Select
linha = linha + 1
Loop
End With
'Utiliza o mesmo argumento que o BeginGroup
cBar.Visible = ws.Cells(3, 6)
End Sub
Como podemos ver, o volume de cdigo drasticamente reduzido e uma vez que ele esteja
funcionando, precisamos somente nos concentrar na digitao dos itens que compem nossa
barra de comando.
Aps a execuo de nosso cdigo, obtemos o seguinte resultado baseado nas informaes
digitadas na planilha contendo os itens do menu:

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

41

Figura 10-2

Para provar a versatilidade deste mtodos, iremos acrescentar mais um caso: ATALHOS. Aqui,
estamos interessados em inserir um boto de atalho no menu de atalho para as clulas (barra de
comando nmero 29). nossa lista anterior vamos acrescentar a palavra ATALHO conforme a
figura abaixo:

Figura 10-3

Assim sendo, temos mais um caso (Case) a ser avaliado no cdigo anterior. Conforme o loop
ocorre o novo caso sendo avaliado :
Case "ATALHO"
Set btn = CommandBars(.Cells(linha, 7)).Controls.Add
With btn
.Caption = ws.Cells(linha, 2)
.FaceId = ws.Cells(linha, 3)
.OnAction = ws.Cells(linha, 4)
.BeginGroup = ws.Cells(linha, 6)
End With
Basta inserir o cdigo acima no cdigo final anterior e temos mais caso que devidamente tratado
pelo VBA.
Aps a execuo tudo construdo e temos um belo resultado:

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

42

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

Figura 10-4

O mtodo utilizado acima o mesmo mtodo utilizado pelo Excel para listar todos os menus e
comandos disponveis. Se voc pretende criar menus mais complexos, estude a maneira como o
Excel lista as barras de comandos. Utilize a pasta de trabalho Listar Menus para fazer isso.
Terminamos aqui a nossa jornada no mundo dos menus em Excel. Qualquer dvida ou sugesto,
no hesite em contatar o autor no e-mail abaixo.
O autor pode ser encontrado diariamente no frum Jlio Battisti no endereo abaixo respondendo
perguntas sobre diversos aspectos do Excel.

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel

43

11. Sobre o autor


Abaixo o leitor encontra um pequeno resumo do currculo e atividades do autor deste mdulo:
FORMAO ACADMICA:

Formado e Ps-Graduado em Finanas pela Universidade de Londres, Reino Unido

Membro da Sociedade Brasileira de Econometria

LINGUAGENS DE PROGRAMAO E PLATAFORMAS:

Visual Basic, Calculadores Programveis Casio e Sharp

BDs: MS Access and Lotus Approach

Plataformas: Windows NT, 2000, XP, Linux Red Hat

EXPERINCIA PROFISSIONAL
FAIRCOURT CAPITAL LIMITED (REINO UNIDO)

outubro 02-

fev96-maio02

Diretor TI

MELVALE GROUP (REINO UNIDO)

Gerente de Exportao para a frica Ocidental


Gerente de TI

OUTRAS ESPECIALIZAES

Inspeo e regulamentaes Nigerianas para importao e exportao


(Nigerian-British Chamber of Commerce & Cotecna International)

Procedimentos de exportao no Reino Unido (The Institute of Export, Reino Unido)

ICC 500 e Incoterms (The Institute of Export, Reino Unido)

OUTRAS ATIVIDADES
Fornece suporte pro bono em TI entidade de caridade Nigeriana NIDOE (Nigerians in Diaspora
Organisation Europe) desde 2001. Participou ativamente na organizao da conferncia sobre
Boa Governncia e Responsabilidade Fiscal promovida pelo ONG em Abuja, Nigria, em
Novembro 2003. Foi um dos principais colaboradores na elaborao do relatrio final sobre a
conferncia entregue a presidncia da Repblica Nigeriana em maio de 2004.
Autor do livro Excel e VBA na Modelagem Financeira: Uma abordagem prtica (no
prelo). Editora Axcel Books, 2004.
Colaborador ativo do frum Excel Avanado do site www.jliobattisti.com.br, onde divide seu
conhecimento e experincia com outros membros do espao.

Autor:
Publicado:
Contato:

Robert F Martim

www.juliobattisti.com.br
rm@faircourt.com

Criado em:
ltima edio:

19/5/2004 11:28:00
3/7/2004 20:21:00

Você também pode gostar