VBA Excel - Criando Teclas de Atalho.


Inline image 1
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)








New Picture








Na janela com as macros disponíveis, selecionamos a macro pretendida e escolhemos a opção Options.








New Picture (2)








Abrirá uma nova janela onde podemos indicar que tecla de atalho iremos associar à macro seleccionada.








New Picture (1)








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:
TeclaCó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

Agora, sempre que pressionarem a tecla Enter aparecerá uma mensagem com a informação "Opps !!!". 
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.


Reference: Jorge Paulino



Tags: VBA, 
keys, teclas, atalho, Excel



Nenhum comentário:

Postar um comentário

diHITT - Notícias