Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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.
2.
3.
4.
5.
6.
Colocando os FaceIDs.......................................................................................................... 17
6.1. FaceID personalizadas................................................................................................. 17
7.
8.
Menus Dropdown................................................................................................................ 26
9.
10.
11.
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
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
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.
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
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
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.
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
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
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
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
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
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
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
Figura 6-4
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
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
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
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:
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
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
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
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
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
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
Figure 9-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
36
Srie Como Fazer: Criando menus, barras de comando e botes personalizados no Excel
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
EXPERINCIA PROFISSIONAL
FAIRCOURT CAPITAL LIMITED (REINO UNIDO)
outubro 02-
fev96-maio02
Diretor TI
OUTRAS ESPECIALIZAES
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