Você quer executar uma macro do Word pressionando uma única tecla de função como F8 ou F11 sem segurar Ctrl, Alt ou Shift. Por padrão, a caixa de diálogo Personalizar Teclado do Word exige que você pressione uma combinação de teclas que inclua pelo menos uma tecla modificadora. Essa limitação impede que você atribua diretamente uma macro a uma tecla de função sem modificador pela interface padrão. Este artigo explica a solução usando o Organizer para copiar uma macro para um modelo e depois editando o arquivo Normal.dotm com um procedimento VBA simples para vincular a macro a uma tecla de função pura. Você aprenderá as etapas exatas para conseguir isso sem ferramentas de terceiros.
Principais Conclusões: Atribuir uma Macro a uma Tecla de Função sem Modificadores
- Limitação da caixa de diálogo Personalizar Teclado: O Word exige pressionar uma combinação de teclas com Ctrl, Alt ou Shift ao atribuir atalhos por meio de Arquivo > Opções > Personalizar Faixa de Opções > Atalhos do teclado. Teclas de função puras não são aceitas.
- Solução com VBA e Application.OnKey: O método OnKey no Editor do Visual Basic pode vincular uma macro a uma única tecla, como F9 ou F11, ignorando a restrição da caixa de diálogo.
- Macro AutoOpen no Normal.dotm: Coloque uma atribuição OnKey dentro de uma macro AutoOpen no modelo Normal para que a vinculação esteja ativa toda vez que o Word iniciar.
Por que o Word não Consegue Atribuir uma Macro a uma Tecla de Função Pura pela Interface
A caixa de diálogo Personalizar Teclado do Word foi projetada para aceitar combinações de teclas que incluam pelo menos uma tecla modificadora: Ctrl, Alt ou Shift. Quando você pressiona uma tecla de função como F8 sozinha, a caixa de diálogo a registra como um atalho inválido e não permite confirmar a atribuição. Esse comportamento é intencional para evitar a substituição acidental de atalhos internos do Word, como F7 para Verificar Ortografia e Gramática ou F12 para Salvar Como.
No entanto, o sistema de mensagens de teclado subjacente do Windows suporta a vinculação de macros a teclas de função sem modificador. O ambiente VBA do Word expõe o método Application.OnKey, que pode capturar qualquer pressionamento de tecla, incluindo teclas de função isoladas. O método OnKey executa uma macro específica quando uma determinada tecla é pressionada, independentemente da limitação da caixa de diálogo. Esse método é a única maneira interna de atribuir uma macro a uma tecla de função pura no Word.
Antes de prosseguir, certifique-se de que sua macro esteja armazenada em um modelo que carregue na inicialização, normalmente Normal.dotm. Macros armazenadas em um único documento funcionarão apenas quando esse documento estiver ativo. Para uma atribuição global que funcione em qualquer documento, a macro deve residir em Normal.dotm ou em outro modelo global carregado via Arquivo > Opções > Suplementos.
Etapas para Vincular uma Macro a uma Tecla de Função sem Modificadores Usando VBA
As etapas a seguir usam o Editor do Visual Basic para criar uma macro AutoOpen no Normal.dotm que atribui sua macro personalizada a uma tecla de função específica. O Word executará essa macro AutoOpen toda vez que iniciar, estabelecendo a vinculação da tecla.
- Abra o Editor do Visual Basic
Pressione Alt+F11 para abrir o editor VBA. Se o Project Explorer não estiver visível, pressione Ctrl+R para exibi-lo. - Localize o projeto do modelo Normal
No Project Explorer, expanda o nó chamado “Normal” (Normal.dotm). Se você não o vir, talvez precise exibi-lo clicando em Exibir > Project Explorer. - Insira um módulo para a macro AutoOpen
Clique com o botão direito em “Normal” e escolha Inserir > Módulo. Um novo módulo chamado “Module1” aparece. Clique duas vezes nele para abrir a janela de código. - Escreva a macro AutoOpen
Cole o seguinte código no módulo:Sub AutoOpen()
Application.OnKey Key:="{F8}", Procedure:="MinhaMacro"
End SubSubstitua “{F8}” pela tecla de função que deseja usar. Os códigos de tecla válidos são {F1} a {F12}. Substitua “MinhaMacro” pelo nome exato da sua macro. Se sua macro estiver em um módulo diferente, inclua o caminho completo do módulo: “NomeDoModulo.NomeDaMacro”.
- Escreva a macro que será executada quando a tecla for pressionada
No mesmo módulo ou em um módulo diferente, crie a sub-rotina da macro que realiza o trabalho. Por exemplo:Sub MinhaMacro()
MsgBox "Você pressionou F8"
End SubSalve o arquivo pressionando Ctrl+S ou clicando no ícone de salvar.
- Feche o Word e reabra-o
Saia completamente do Word e inicie-o novamente. A macro AutoOpen é executada automaticamente, vinculando a tecla de função à sua macro. - Teste a vinculação da tecla
Pressione a tecla de função que você atribuiu. Sua macro deve ser executada. Se nada acontecer, verifique se o nome da macro na linha OnKey corresponde exatamente e se a macro está armazenada em Normal.dotm.
A macro AutoOpen deve ser colocada no projeto “Normal”. Se você colocá-la em um projeto específico de documento, a vinculação da tecla funcionará apenas quando esse documento estiver ativo. Para uma vinculação em todo o sistema, o modelo Normal.dotm é o local correto.
Se a Vinculação da Tecla de Função Não Funcionar
A macro não é executada quando pressiono a tecla de função atribuída
Primeiro, verifique se a macro AutoOpen é executada na inicialização. Abra o Word, pressione Alt+F11 e verifique se o módulo que contém AutoOpen existe em Normal. Se o módulo estiver ausente, você pode ter salvo a macro em um modelo ou documento diferente. Recrie o módulo no projeto Normal.
Segundo, certifique-se de que o código da tecla no método OnKey corresponda exatamente à tecla de função. Para F9, use “{F9}”. Para F11, use “{F11}”. Não inclua espaços ou caracteres extras. O código da tecla deve estar entre chaves.
Terceiro, verifique se o nome da sua macro está escrito corretamente. Se a macro estiver em um módulo diferente, prefixe-a com o nome do módulo: “Module1.MinhaMacro”. Se a macro contiver um erro, o Word pode exibir um erro de tempo de execução ou falhar silenciosamente. Teste a macro executando-a manualmente a partir da caixa de diálogo Macros (Alt+F8) para confirmar se funciona.
Outra função do Word é executada em vez da minha macro
Algumas teclas de função têm comandos internos do Word. Por exemplo, F7 abre o painel de Ortografia e F12 abre a caixa de diálogo Salvar Como. Quando você usa Application.OnKey para atribuir uma macro a essa tecla, sua macro substitui o comportamento interno apenas enquanto a macro estiver ativa. Se você quiser restaurar a função original, chame o comando original dentro da sua macro. Por exemplo, para restaurar a função de ortografia do F7 após a execução da sua macro, você pode incluir Application.OnKey Key:="{F7}" no final da sua macro para redefini-la, ou chamar o comando interno usando Application.CommandBars.ExecuteMso "Spelling".
A vinculação da tecla para de funcionar depois que fecho e reabro um documento
Isso acontece quando a macro AutoOpen está armazenada em um documento em vez de em Normal.dotm. O AutoOpen em nível de documento é executado apenas quando esse documento específico é aberto. Quando você abre um documento diferente, a vinculação é perdida. Mova a macro AutoOpen para o projeto Normal para torná-la persistente em todos os documentos.
Atribuição OnKey vs Caixa de Diálogo Personalizar Teclado: Principais Diferenças
| Item | Método OnKey (VBA) | Caixa de Diálogo Personalizar Teclado (IU) |
|---|---|---|
| Tecla de função sem modificador | Suportado | Não suportado |
| Requer conhecimento em VBA | Sim | Não |
| Persistência após reinicialização | Requer AutoOpen no Normal.dotm | Automática quando salvo em Normal.dotm |
| Pode substituir atalhos internos | Sim | Sim, mas apenas com modificador |
| Escopo da vinculação | Global se estiver em Normal.dotm | Global se salvo em Normal.dotm |
Agora você pode atribuir qualquer macro a uma tecla de função pura usando o método Application.OnKey no VBA. Comece colocando a macro em Normal.dotm, depois escreva uma macro AutoOpen que chame OnKey com o código da tecla desejado. Se precisar atribuir várias teclas de função, adicione várias linhas OnKey dentro do mesmo procedimento AutoOpen. Para remover uma vinculação, defina o argumento Procedure como uma string vazia: Application.OnKey Key:="{F8}". Isso redefine a tecla para seu comportamento padrão.