Oi pessoal.
Hoje mostraremos com dar um ar “profissional” aos seus projetos de macros.
Geralmente construímos nossas macros (rotinas VBA) e chamamos através de atalhos, botões de comando ou até mesmo eventos da planilha ou pasta de trabalho.
Enfim, quero mostrar neste artigo, outra maneira bem interessante de fazer uma chamada à macro com uma aparência limpa e amigável ao usuário.
Vamos criar nossa própria barra de ferramentas ao estilo do próprio Excel.
Dessa maneira, o usuário pode ter uma experiência melhor e mais semelhante ao que já está acostumado.
Bom, pra começar, vamos definir o que precisaremos neste projeto.
Criar um módulo para construir nossa macro e nossa barra de ferramentas;
Definir os eventos Open e Before_Close da pasta de trabalho para iniciar e eliminar a barra de ferramentas, respectivamente.
Abra o VBA Project (ALT+F11).
Duplo clique em EstaPasta_de_trabalho.
Escreva o código abaixo:
Private Sub Workbook_Open()
On Error Resume Next
'Cria a Barra de ferramentas personalizada
Call CriarMenus
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
'Exclui a Barra de ferramentas personalizada
Call DeletarMenu
End Sub
Quando os eventos Abrir e Fechar da pasta de trabalho são invocados, a barra de ferramentas é criada ou excluída, respectivamente.
Agora podemos criar os procedimentos que criarão sua CommandBar e também criar as macros que serão chamadas por cada botão desta barra. Para isso, inclua um Módulo ao projeto e digite o código a seguir.
Public Const CMDBARNOME As String = "Minha CommandBar"
Public Const BTN_MACRO_1 As String = "Executar MACRO 1"
Public Const BTN_MACRO_2 As String = "Executar MACRO 2"
Public Sub CriarMenus()
Dim cmdbar As CommandBar
Dim cmdButton As CommandBarButton
Dim menu As CommandBarPopup
On Error Resume Next
'Exclui a barra caso já exista
Call DeletarMenu
'Adiciona a barra de ferramentas
Set cmdbar = CommandBars.Add(CMDBARNOME, msoBarFloating)
'Limpa a barra de Ferramentas
With cmdbar
.Controls(BTN_MACRO_1).Delete
.Controls(BTN_MACRO_2).Delete
.Visible = True
End With
'Adiciona os botões
Set cmdButton = cmdbar.Controls.Add(Type:=msoControlButton)
With cmdButton
.Caption = BTN_MACRO_1 'Define o título do botão
.Style = msoButtonCaption 'Apenas exibe Título
.OnAction = "Macro1" 'Macro a ser executada
.Visible = True 'Botão estará visível?
.Width = 150 'Tamanho do botão
End With
Set cmdButton = cmdbar.Controls.Add(Type:=msoControlButton)
With cmdButton
.Caption = BTN_MACRO_2 'Define o título do botão
.Style = msoButtonIconAndCaption 'Exibe Ícone e Título
.FaceId = 59 'Id do ícone
.OnAction = "Macro2" 'Macro a ser executada
.Visible = True 'Botão estará visível?
.Width = 150 'Tamanho do botão
End With
End Sub
Public Sub DeletarMenu()
On Error Resume Next
Application.CommandBars(CMDBARNOME).Delete
End Sub
Sub Macro1()
'Essa Macro será chamada ao clicar no primeiro botão da barra de ferramentas
MsgBox "Ei... eu sou a Macro 1...", vbInformation
End Sub
Sub Macro2()
'Essa Macro será chamada ao clicar no segundo botão da barra de ferramentas
MsgBox "Agora é a Macro 2, ok...", vbInformation
End Sub
As Macro1 e Macro2 são exemplos das macros que você poderá criar para o seu programa. Elas serão executadas ao clicar em alguns dos botões da sua barra de Ferramentas.
Você pode ter notado que o segundo botão têm um ícone. Este ícone é definido na propriedade FaceId. Neste site aqui tem umas tabelinhas onde você poderá encontrar os Ids destes ícones.
Então é isso aí pessoal.
Abração.
Boa Noite, gostaria de poder contar com vocês para esclarecer uma dúvida sobre o VBA.
Como consigo converter uma sequencia de strings concatenados em uma formula.
Exemplo: =”=”+A1&”+”&+A2&”+”&+A3&”+”&+A4
Dentro de cada celula desta econtra-se o nome de uma RANGE (Value) o resultado da concatenação seria +- assim : +Total1+Total2+Total3+Total4, só que ao copiar esta formula (usando o VBA) para uma célula qq ela vai como texto e eu preciso que vá como formula. Alguem pode me ajudar?
Webberson,
Não sei como você está implementando o teu código, mas quando vc escrever uma fórmula pelo excel use a propriedade range.FormulaLocal, ok.
E você deve escrevê-la da maneira que ela seria realmente escrita dentro da célula. No seu caso, pelo que entendi vc deveria escrevê-la assim:
range.FormulaLocal = “=+A1+A2+A3+A4”
Onde range é a tua célula. Não é necessário utilizar o & (e-comercial)!
Abç