Menu Suspenso no Excel – VBA

Planilha Comemorativa do JEC Campeão 2011
Planilha Comemorativa do JEC Campeão 2011
3 de dezembro de 2011
Listar todos os arquivos de um diretório
Listar todos os arquivos de um diretório
21 de dezembro de 2011

Objetivo: Demonstrar a criação de um menu suspenso no Excel.

Encontrei no livro VBA e Macros para Microsoft Office Excel 2007 de Bill Jelen e Tracy Syrstad este código que achei interessante e adaptei nesta planilha com comentários relevantes.

Este código executa um menu suspenso quando é acionada uma macro, ocultando todos os menus suspensos do botão direito da planilha e depois adicionando novamente.

Ao abrir a planilha e fechar os menus são “resetados” ou seja, voltam ao seu estado normal, caso contrário todas as opções normais do botão direito do Excel seriam ocultas.

Abaixo o código fonte:

Sub MenuSuspenso()
    Application.CommandBars("Cell").Reset
    
    Dim cbc As CommandBarControl
    
    'Oculta todos os comandos do botão direito
    For Each cbc In Application.CommandBars("cell").Controls
        cbc.Visible = False
    Next cbc
    
    'Adiciona um comando ao menu suspenso
    With Application.CommandBars("Cell").Controls.Add(temporary:=True)
        .Caption = "Minha Macro 1"
        .OnAction = "Test1"
    End With
    
    'Adiciona um comando ao menu suspenso
    With Application.CommandBars("Cell").Controls.Add(temporary:=True)
        .Caption = "Minha Macro 2"
        .OnAction = "Test2"
    End With
    
    'Adiciona um comando ao menu suspenso
    With Application.CommandBars("Cell").Controls.Add(temporary:=True)
        .Caption = "Minha Macro 3"
        .OnAction = "Test3"
    End With
    
    Application.CommandBars("Cell").ShowPopup
End Sub

Sub Test1()
    MsgBox "Essa é a macro Teste1 do menu de evento do clique com o botão direito personalizado do objeto ActiveX..", , "Item de menu ''Minha Macro 1''"
End Sub

Sub Test2()
    MsgBox "Essa é a macro Teste2 do menu de evento do clique com o botão direito personalizado do objeto ActiveX..", , "Item de menu ''Minha Macro 2''"
End Sub

Sub Test3()
    MsgBox "Essa é a macro Teste3 do menu de evento do clique com o botão direito personalizado do objeto ActiveX..", , "Item de menu ''Minha Macro 3''"
End Sub

Abraço

Marcos Rieper

10 Comments

  1. sidney disse:

    Excelente trabalho. parabéns !
    Não ficou claro prá mim , as opções de comando do SQL.
    Vc tem video aula em DVD ? E QUAL O PREÇO ?
    UM ABRAÇO

    SIDNEY

  2. Anselmo disse:

    No Excel 2003, eu conseguia, por meio de uma macro, alterar a macro que foi atribuída a uma figura qualquer (um retângulo, por exemplo). Já no 2007, não consigo nem com reza braba. Explicando melhor: numa determinada planilha, enquanto o usuário vai digitando dados dentro das células, os retângulos, que criei, imitando botões de comando, ficam atribuídos a uma macro que chamo de “macro-nula”, que não executa ação alguma. Fiz isso pra prevenir acidente no caso de o usuário clicar sem querer num dos botões. Ao final, quando o usuário preenche a última célula, esse preenchimento seguido do Enter aciona uma macro que habilita os botões, ou seja, muda as atribuições de todos eles, de modo que, ao serem clicados, executem as ações paras as quais foram programados. Na construção da macro de reativar os botões, tudo corre bem, mas, quando eu clico no botão para executar a ação, aparece o seguinte erro no VBA: ” Selection.OnAction = “Armazena_total””. Ou seja, a macro apenas seleciona o retângulo “Armazena_total”, mas não atribui a macro “Armazena_Total” ao mesmo.

  3. Renan Stoffel disse:

    Tem como eu colocar esse menu em uma form

  4. Tiago Humberto disse:

    Boa noite Marcos, gostei muito de seu site.

    Gostaria de sua ajuda, fiz um menu suspenso com o seguinte código:

    Sub Meses()

    Application.CommandBars(“Cell”).Reset

    Dim cbc As CommandBarControl

    ‘Oculta todos os comandos do botão direito
    For Each cbc In Application.CommandBars(“cell”).Controls
    cbc.Visible = False
    Next cbc
    ‘Adiciona um comando ao menu suspenso
    With Application.CommandBars(“Cell”).Controls.Add(Temporary:=True)
    .Caption = “Janeiro”
    .OnAction = “jan”

    End With

    With Application.CommandBars(“Cell”).Controls.Add(Temporary:=True)
    .Caption = “Fevereiro”
    .OnAction = “fev”

    End With
    ‘Adiciona um comando ao menu suspenso
    With Application.CommandBars(“Cell”).Controls.Add(Temporary:=True)
    .Caption = “Março”
    .OnAction = “mar”

    End With

    With Application.CommandBars(“Cell”).Controls.Add(Temporary:=True)
    .Caption = “Abril”
    .OnAction = “abr”

    End With

    With Application.CommandBars(“Cell”).Controls.Add(Temporary:=True)
    .Caption = “Maio”
    .OnAction = “mai”

    End With

    With Application.CommandBars(“Cell”).Controls.Add(Temporary:=True)
    .Caption = “Junho”
    .OnAction = “jun”

    End With

    With Application.CommandBars(“Cell”).Controls.Add(Temporary:=True)
    .Caption = “Julho”
    .OnAction = “jul”

    End With

    With Application.CommandBars(“Cell”).Controls.Add(Temporary:=True)
    .Caption = “Agosto”
    .OnAction = “ago”

    End With

    With Application.CommandBars(“Cell”).Controls.Add(Temporary:=True)
    .Caption = “Setembro”
    .OnAction = “sete”

    End With

    With Application.CommandBars(“Cell”).Controls.Add(Temporary:=True)
    .Caption = “Outubro”
    .OnAction = “out”

    End With

    With Application.CommandBars(“Cell”).Controls.Add(Temporary:=True)
    .Caption = “Novembro”
    .OnAction = “nov”

    End With

    With Application.CommandBars(“Cell”).Controls.Add(Temporary:=True)
    .Caption = “Dezembro”
    .OnAction = “dez”

    End With

    Application.CommandBars(“Cell”).ShowPopup

    End Sub

    Em que a ação da macro é selecionar a aba do mês.
    Até ai tudo bem, mas quando seleciono a aba, Jan por exemplo, não consigo editar a planilha, ela fica travada. A planilha só funciona quando eu clico na aba.

  5. Adriana disse:

    Olá Marcos
    Muito bom esta planilha com um menu de acesso.
    Só ficou uma duvida, as planilhas que são abertas, ao acessar uma das opções, ficam com o rolamento e edição bloqueadas. Como deixar desbloqueadas após a nova planilha ser exibida?

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Inscreva-se no nosso canal do Youtube!


Junte-se ao nosso canal do Youtube. Começamos em abril de 2016, mas já temos mais de 06:00 h de treinamentos gratuitos e este número irá aumentar. Vídeos novos todos os sábados.