Índice:
Vídeo: [Excel VBA] Botão para Mudar de Planilha 2025
Antes do Excel 2007, os programadores VBA usaram o objeto CommandBar para criar menus personalizados, barras de ferramentas personalizadas e menus de atalho personalizados (clique com o botão direito do mouse). Começando com o Excel 2007, o objeto CommandBar está em uma posição bastante estranha. Se você escrever código para personalizar um menu ou uma barra de ferramentas, o Excel intercepta esse código e ignora muitos de seus comandos.
Em vez de exibir seu aprimoramento de interface bem pensado, o Excel 2007 (como versões posteriores) simplesmente despeja seus menus personalizados e barras de ferramentas em uma guia de fita abrangente chamada Add-Ins.
As personalizações do menu e da barra de ferramentas terminam nos Add-Ins → Comandos do menu ou o grupo Add-Ins → Custom Toolbars. Mas a personalização de menus de atalho (que também usa o objeto CommandBar) ainda funciona como sempre - bem, tipo de.
Bottom line? O objeto CommandBar já não é muito útil, mas continua a ser a única maneira de personalizar menus de atalho.
Adicionando um novo item ao menu de atalho da célula
Abaixo, você encontrará o código de exemplo que adiciona um novo item ao menu de atalho que aparece quando você clica com o botão direito do mouse em uma célula. Você deve ser capaz de adaptar esses exemplos às suas necessidades.
Você pode aprimorar o utilitário Change Case um pouco, tornando-o disponível no menu de atalhos da célula.
O procedimento AddToShortcut adiciona um novo item de menu ao menu de atalhos de célula. Você pode adaptá-lo para apontar para suas próprias macros alterando as propriedades Legenda e OnAction do objeto chamado NewControl.
Sub AddToShortCut () Dim Bar como CommandBar Dim NewControl como CommandBarButton DeleteFromShortcut Set Bar = Application. CommandBars ("Cell") Defina NewControl = Barra. Controles. Adicionar _ (Tipo: = msoControlButton, ID: = 1, _ temporário: = Verdadeiro) Com NewControl. Legenda = "e caso de mudança". OnAction = "ChangeCase". Style = msoButtonIconAndCaption End With End Sub
Quando você modifica um menu de atalho, essa modificação permanece em vigor até você reiniciar o Excel. Em outras palavras, os menus de atalho modificados não são redefinidos quando você fecha o caderno de trabalho que contém o código VBA. Portanto, se você escrever código para modificar um menu de atalho, quase sempre escreve um código para reverter o efeito de sua modificação.
O procedimento DeleteFromShortcut remove o novo item de menu do menu de atalhos da célula:
Sub DeleteFromShortcut () On Error Resume Next Application. CommandBars ("Cell"). Controles _ ("& Change Case"). Delete End Sub
Isso mostra como o novo item de menu é exibido depois de clicar com o botão direito do mouse em uma célula.
O primeiro comando real após a declaração de algumas variáveis chama o procedimento DeleteFromShortcut. Esta declaração garante que apenas um item de menu Change Case aparece no menu de atalho do celular. Tente comentar essa linha (coloque um apóstrofo no início da linha) e execute o procedimento algumas vezes - mas não se deixe levar!
Clique com o botão direito do mouse em uma célula, e você pode ver várias instâncias do item de menu Change Case. Se livrar de todas as entradas executando DeleteFromShortcut várias vezes (uma vez por cada item de menu extra).
Finalmente, você precisa de uma maneira de adicionar o item do menu de atalho quando a pasta de trabalho for aberta e excluir o item do menu quando a pasta de trabalho for fechada. Fazer isso é fácil. Basta adicionar esses dois procedimentos de evento ao módulo de código ThisWorkbook:
Private Sub Workbook_Open () Call AddToShortCut End Sub Private Sub Workbook_BeforeClose (Cancelar como booleano) Call DeleteFromShortcut End Sub
O procedimento Workbook_Open é executado quando o livro está aberto, e o procedimento Workbook_BeforeClose é executado antes que o livro esteja fechado. O que o médico ordenou.
O que é diferente no Excel 2013 e Excel 2016?
Se você usou o VBA para trabalhar com menus de atalho no Excel 2007 ou anterior, você precisa estar ciente de uma mudança significativa.
No passado, se o seu código modificasse um menu de atalho, essa modificação estava em vigor para todas as pastas de trabalho. Por exemplo, se você adicionou um novo item ao menu do botão direito da célula, esse novo item apareceria quando você clicou com o botão direito do mouse em uma célula em qualquer pasta de trabalho (além de outras pastas de trabalho que você abrirá mais tarde). Em outras palavras, as modificações no menu de atalho foram feitas no nível de aplicação .
Excel 2013 e Excel 2016 usam uma única interface de documento, e isso afeta os menus de atalho. As mudanças que você faz nos menus de atalho afetam apenas a janela da pasta de trabalho ativa. Quando você executa o código que modifica o menu de atalho, o menu de atalho para janelas diferentes da janela ativa não será alterado. Esta é uma saída radical de como as coisas costumavam funcionar.
Outro toque: se o usuário abrir uma pasta de trabalho (ou criar uma nova pasta de trabalho) quando a janela ativa exibe o menu de atalho modificado, a nova pasta de trabalho também exibe o menu de atalho modificado. Em outras palavras, as novas janelas exibem os mesmos menus de atalho que a janela que estava ativa quando as novas janelas foram abertas.
Linha inferior: no passado, se você abriu uma pasta de trabalho ou adicionasse esses menus de atalho modificados, você poderia ter certeza de que os menus de atalho modificados estarão disponíveis em todas as pastas de trabalho. Você não tem mais essa garantia.
