Criar um botão na barra de ferramentas para chamar suas macros

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.

Isto são barras de ferramentas...

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.

Sua barra de Ferramentas Personalizada


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.
 

3 Responses

Leave a Comment