NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!

UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI

Você está em: PrincipalArtigosLivroexc2007ribbon › Capítulo 1 : 13
Quer receber novidades e e-books gratuitos?
« Anterior Δ Página principal ¤ Índice Próxima »
Programando o RibbonX no Excel 2007
Autor: Robert Friedrick Martim
Lição 13 - Teclas de Atalho (keytip) para guias e botões

Se o leitor vai trabalhar com customização da interface gráfica do Office é importante que esteja ciente de todas as possibilidades.

Neste tópico veremos como trabalhar com os menus estilo “popup”. Estes menus ocorrem quando nós clicamos com o botão direito do mouse sobre uma determinada área da planilha como mostra a figura abaixo:

Figura 7‑1 Menu estilo “popup”

O popup acima é chamado de “Cell” e possui índice 36.

Neste grande tópico discutirei como criar e usar tais menus.

Adicionando e executando popups personalizados

Nossa primeira parada será na criação de popups personalizados. Na segunda parte veremos como adicionar botões a um popup já existente e executar algo a partir do mesmo.

Vejamos então como se parecerá o popup que estamos interessados antes de seguirmos adiante:


Figura 7‑2 Menu estilo popup

Esta é uma das poucas personalizações que faremos sem a necessidade de invocar XML. Este exemplo consiste unicamente de VBA.

Vejamos, portanto, o objetivo deste popup:

  • Popup deve ser chamado (no lugar do popup “Cell”);
  • O popup será mostrado apenas em determinada área (neste caso A1:O32);
  • O popup deve executar os comandos mostrados na figura acima.

Com os pontos em mente, nós podemos pular diretamente para o nosso código. Explicações acompanham o código.

Primeiramente adicione o seguinte código à planilha onde o popup estará ativo:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, _
    Cancel As Boolean)

'   Determina a área que representa a união entre a área "alvo" (target)
'   e a área onde o popup deve ser ativado
    If Union(Target.Range("A1"), Range("A1:O32")).Address = _
        Range("A1:O32").Address Then

'       Se a união for verdadeira, então mostra o nosso popup
        CommandBars(BARRA).ShowPopup
       
'       Cancela o Popup padrão do Excel
        Cancel = True
    End If
End Sub

No VBE para a pasta de trabalho inseriremos o código abaixo:

Private Sub Workbook_Open()
    Call mnuAtalho
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call delAtalho
End Sub

Adicione um módulo onde inseriremos o código como segue:

'Variável pública utilizada para guardar o nome da barra
'de ferramentas.
Public Const BARRA As String = "mnuAtalho"

Sub mnuAtalho()
    Dim cmdBar  As CommandBar
    Dim mnu     As CommandBarButton
  
'   Apaga a barra de comando anterior caso ela exista
    delAtalho
   
    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 = "Itálico"
        .OnAction = "itálico"
        .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

    Set mnu = cmdBar.Controls.Add(Type:=msoControlButton)
    With mnu
        .Caption = "&Ajuda"
        .OnAction = "ajuda"
        .FaceId = 984
        .BeginGroup = True
    End With

End Sub

Sub delAtalho()
'   Apaga a barra de comando anterior caso ela exista
    On Error Resume Next
    CommandBars(BARRA).Delete
End Sub

Em um segundo módulo (não é necessário, pode-se adicionar no mesmo módulo anterior) adicione o código abaixo:

Sub negrito()
'   Modifica a seleção para negrito
    Selection.Font.Bold = True
End Sub

Sub itálico()
'   Modifica a seleção para itálico
    Selection.Font.Italic = True
End Sub

Sub sublinhado()
'   Modifica a seleção para sublinhado
    Selection.Font.Underline = True
End Sub

Sub sobre()
    msg = "Este exemplo foi criado por Robert F Martim como parte do módulo sobre criação "
    msg = msg & "de menus de atalho utilizando VBA no Excel." & vbCr & vbCr
    msg = msg & "Para maiores informações visite: www.wordpower.com.br" & vbCr & vbCr
    msg = msg & "Para falar com o autor escreva para: rm@msofficegurus.com"

    MsgBox msg, vbInformation, "Sobre este módulo..."

End Sub

Sub ajuda()
    ThisWorkbook.FollowHyperlink "http://www. wordpower.com.br/forum", , True, True
End Sub

A pasta de trabalho está pronta para ser executada.

Partimos agora para modificação de um popup interno.

Modificando popups internos

O nosso objetivo agora é modificar um popup interno do Excel conforme mostra a figura a seguir:


Figura 7‑3 Adicionando botão a menu popup interno

Nós adicionaremos um novo botão o qual irá ordenar as abas de nossa planilha. Este projeto foi originalmente criado por mim e distribuído gratuitamente como um AddIn (suplemento). Aqui, o faremos como uma pasta comum de Excel, porém toda a configuração estará direcionada para um AddIn que o leitor poderá adaptar a vontade.

'Utilize este código caso queira transformar em AddIn este documento
Private Sub Workbook_AddinInstall()
    Dim aiAddin As AddIn
           
        On Error Resume Next
        For Each aiAddin In Application.AddIns
            If aiAddin.Name = ThisWorkbook.Name Then
                aiAddin.Installed = False
                ThisWorkbook.Close False
            End If
        Next
    End If
End Sub

Private Sub Workbook_Open()
    criarBotao
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    resetPopup
End Sub

O próximo passo requer a criação da rotina que construirá o nosso menu. Adicione um módulo onde colocaremos o código abaixo:

Sub criarBotao()
    Dim cmdbar  As CommandBar
    Dim btn     As CommandBarButton
   
'   Reseta o popup "Ply" o qual se refere ao
'   popup apresentado quando clicamos sobre a guia
'   de planilhas
    Application.CommandBars("Ply").Reset
   
'   Seta a barra de comando como sendo a "Ply"
    Set cmdbar = Application.CommandBars("Ply")

'   Adiciona um botao logo no topo do popup
    Set btn = cmdbar.Controls.Add(Type:=msoControlButton, Before:=1)
   
'   Com o botao, definir as seguintes propriedades:
    With btn
'       estilo
        .Style = msoButtonIconAndCaption
       
'       rótulo
        .Caption = "ORDENAR ABAS"
       
'       Face do botão
        .FaceId = 210

'       macro a ser executada quando o botão for clicado
        .OnAction = "Ordenar"
    End With
   
End Sub

Sub resetPopup()
'   Reseta o popup ao sairmos da pasta de trabalho
    Application.CommandBars("Ply").Reset
End Sub

O nosso próximo passo requer a criação da rotina que ordenará as planilhas:

Sub Ordenar()
    Dim n       As Long
    Dim i       As Long
    Dim j       As Long
   
'   Conta o número de planilhas para saber se há algo
'   realmente para ordenar ou nã0.
    n = ActiveWorkbook.Sheets.Count
   
'   Caso existe apenas uma planilha na pasta de trabalho,
'   mostrar a mensagem abaixo e sair da rotina.
    If n = 1 Then
        MsgBox "Há somente uma planilha nesta pasta de trabalho!", _
        vbInformation
        Exit Sub
    End If

'   Faz um loop pelas planilhas e as move de acordo com a planilha anterior
    For i = 1 To n - 1
        For j = i + 1 To n
            If Sheets(j).Name < Sheets(i).Name Then
                Sheets(j).Move Before:=Sheets(i)
            End If
        Next
    Next
End Sub

Caso o leitor queira, salve como um suplemento do Excel e instale-o. O documento está pronto para ser usado.

Finalmente, este método ainda é válido para todo menu popup que esteja sob o sistema antigo dentro do Office. Porém, existem popups (como o popup para gráficos) os quais aparecem sob um novo sistema (o OfficeArt). Nestes casos, nós não podemos adicionar um botão/comando ao popup.

Ao terminar de escrever este treinamento ainda não havia uma solução aplicável a este problema.
« Anterior Δ Página principal ¤ Índice Próxima »

Quer Aprender VBA no Excel, Sem Dificuldades, com Exemplos
Práticos Passo a Passo e com Explicações Detalhadas?

Aprenda com Júlio Battisti: "Macros e Programação VBA no Excel 2010 Através de Exemplos Práticos e Úteis - Passo a Passos

Junto com o livro você Recebe 11 Bônus Incluindo 50 horas de Vídeo Aulas.

Mesmo que Você não Saiba Nada de Programação VBA ou já Tenha Tentado
Aprender VBA e Desistiu ou Achou Difícil, com Este Livro EU GARANTO que Você Aprenderá, SEM DIFICULDADES. APRENDIZADO GARANTIDO.

Clique Aqui Para Todos os Detalhes sobre Esta Oferta

- É com alegria que Comunico o lançamento do meu 42º Livro.

 

- Perfeito para Iniciantes em Programação VBA.

 

- Abordo desde o Básico até Comandos Avançados.

 

- Códigos detalhadamente explicados, linha por linha.

 

- Criação de Funções e Procedimentos com VBA.

 

- O Modelo de Objetos do Excel - Exemplos Práticos.

 

- Criação de Formulários - UseForms.

 

- Criação de um Sistema de Cadastro Completo, com Foto.

 

- Como trabalhar com Tabelas Dinâmicas na Programação VBA.

 

- Como trabalhar com Gráficos na Programação VBA.

 

- Rotina que Escreve um número por Extenso usando VBA.

 

- E muito, muito mais mesmo...

 

- Junto com o livro você recebe 50 horas de Vídeo Aulas sobre Macros, Programação VBA, Fórmulas e Funções Avançadas, Dashboards e Muito mais.

 

[Bônus]: 60 horas de Vídeo Aulas sobre Macros, Programação VBA, Fórmulas e Funções Avançadas no Excel, Recursos Avançados, Dashboards e Muito mais.

 

Aprenda com Júlio Battisti: "Macros e Programação VBA no Excel 2010 Através de Exemplos Práticos e Uteis - Passo a Passos

Aprenda com Júlio Battisti: "Macros e Programação VBA no Excel 2010 Através de Exemplos Práticos e Uteis - Passo a Passos

A BÍBLIA DA
PROGRAMAÇÃO
VBA NO EXCEL

 

Quer receber novidades e e-books gratuitos?

Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434

Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208

Todos os direitos reservados, Júlio Battisti 2001-2021 ®

[LIVRO]: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2010 - PASSO-A-PASSO

APRENDA COM JULIO BATTISTI - 1124 PÁGINAS: CLIQUE AQUI