Quando criamos códigos VBA necessitamos executá-los e isso pode ser feito de muitos modos:
- Através de Eventos,
- Através de funções personalizadas (UDF),
- Através de um objecto que irá chamar o nosso código (quer esteja na worksheet ou na ribbon), e
- Através de teclas de atalho (shortcuts)
A possibilidade de utilizar determinadas teclas para chamar o código que criamos é muito prática e útil. Neste artigo veremos algumas formas e exemplos de como associar teclas de atalho a procedimentos, compreendendo as principais diferenças entre os dois métodos disponíveis.
A maneira mais simples e usada pela maioria dos utilizadores, é selecionando o separador Developer, escolhendo a opção Macros (ou pressionando as teclas Alt+F8)
Na janela com as macros disponíveis, selecionamos a macro pretendida e escolhemos a opção Options.
Abrirá uma nova janela onde podemos indicar que tecla de atalho iremos associar à macro seleccionada.
Neste exemplo, visível na imagem anterior, para chamar a Macro1, a combinação definida é Ctrl+a. Podemos indicar diversas letras (apenas letras) e se indicarmos uma letra em minúscula a combinação associada, por exemplo, será Ctrl+a e se indicarmos a letra em maiúscula a combinação associada será Ctrl+Shift+a.
Alguns exemplos:
a = Ctrl + a
u = Ctrl + u
A = Ctrl + Shift + a
U = Ctrl + Shift + u
Simples e prático.
No entanto isto limita-nos à utilização de determinadas combinações de teclas , e isso em alguns casos, poderá ser um problema. Além disso não permite a atribuição dinâmica e a utilização de teclas especiais. Mas isto pode ser resolvido utilizando VBA.
Para atribuir uma tecla de atalho a uma macro, utilizamos o método Application.OnKey()
Application.OnKey "combinação", "procedimento a associar"
Exemplo:
Application.OnKey "^a", "Macro1"
Neste caso é associada a combinação Ctrl+a à Macro1.
Mas vejamos a tabela de códigos de teclas especiais, que além das letras e números podem ser utilizados:
Tecla | Código |
BACKSPACE | {BACKSPACE} ou {BS} |
BREAK | {BREAK} |
CAPS LOCK | {CAPSLOCK} |
CLEAR | {CLEAR} |
DELETE ou DEL | {DELETE} ou {DEL} |
DOWN ARROW | {DOWN} |
END | {END} |
ENTER (teclado numérico) | {ENTER} |
ENTER | ~ (tilde) |
ESC | {ESCAPE} ou {ESC} |
HELP | {HELP} |
HOME | {HOME} |
INS | {INSERT} |
LEFT ARROW | {LEFT} |
NUM LOCK | {NUMLOCK} |
PAGE DOWN | {PGDN} |
PAGE UP | {PGUP} |
RETURN | {RETURN} |
RIGHT ARROW | {RIGHT} |
SCROLL LOCK | {SCROLLLOCK} |
TAB | {TAB} |
UP ARROW | {UP} |
F1 a F15 | {F1} até {F15} |
E as teclas que são usadas para combinar:
Tecla | Código |
SHIFT | + (adicção) |
CTRL | ^ (acento circunflexo) |
ALT | % (percentagem) |
Assim, com a lista de códigos, podemos combinar e associar conjuntos de teclas a macros que tenhamos criado/gravado. Podemos utilizar o evento Workbook_Open(), que é executado quando o Excel é aberto, e definindo ao abrir as associações que queremos, por exemplo:
Private Sub Workbook_Open()
Application.OnKey "+^{UP}", "MostraResultado"
Application.OnKey "%{INSERT}", "CopiaDados"
End Sub
Neste caso, a combinação Shift+Ctrl+Seta Cima chama o procedimento MostraResultado e a combinação Alt+Insert chama o procedimento CopiaDados.
No entanto estas atribuições funcionam se os procedimentos estiverem definidos num módulo, pois se estiverem definidos no Workbook ou em determinado Worksheet não irá funcionar. Nestes casos é necessário definir o caminho para eles, como é possível ver no exemplo seguinte:
Private Sub Workbook_Open()
Application.OnKey "+^{UP}", "ThisWorkbook.MostraResultado"
Application.OnKey "%{INSERT}", "Sheet1.CopiaDados"
End Sub
Aqui estamos a indicar que o procedimento MostraResultado está criado em ThisWorkbook e o procedimento CopiaDados está criado no código da Sheet1.
Mas atente que determinadas combinações, especialmente usando a tecla Alt mais uma letra ou número, não funcionam, pois são usadas como teclas de atalho do próprio MS Excel. É importante testar sempre!
É importante verificar se não estamos a utilizar uma combinação do próprio sistema operacional. Por exemplo, a combinação Ctrl+C ("^c") serve para copiar informação (copy), assim como o Ctrl+V ("^v") serve para colar informação (paste). Se atribuirmos estas combinações a diferentes procedimentos, é sobreposto o funcionamento normal (neste caso o copy/paste) e passará a chamar os procedimentos que definimos. Isto pode ser desagradável para muitos utilizadores.
Um exemplo muito simples para que testem rapidamente e entendam o problema de algumas associações. Coloquem o seguinte código num módulo e executem o procedimento AssociaTeclas.
Sub AssociaTeclas()
Application.OnKey "~", "Opps"
End Sub
Sub Opps()
MsgBox "Opps !!!"
End Sub
Mas podemos também desabilitar as associações definidas. Para isso não definir o segundo argumento do método OnKey() que é opcional.
Sub DesabilitaTeclas()
Application.OnKey "~"
Application.OnKey "^v"
Application.OnKey "^v"
Application.OnKey "%{INSERT}"
Application.OnKey "+^{UP}"
End Sub
Após executar o procedimento DesabilitaTeclas as associações definidas deixariam de funcionar e, neste caso, o Enter voltaria a funcionar como antes, assim como o Ctrl+c e o Ctrl+v.
Neste pequeno artigo vimos como é simples atribuir teclas de atalho para chamar procedimentos, utilizando as opções já disponíveis e através de código, e alguns problemas que as associações podem causar.
As associações são, sem dúvida, uma forma muito efetiva de se evocar certas funcionalidades.