Excel: Dicas de VBA – Criando Teclas de Atalho

Quando criamos código em VBA necessitamos de o executar e isso pode ser feito de diversas formas:

  • 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)
  • Através de teclas de atalho (shortcuts)

A possibilidade de utilizar determinadas teclas para chamar o código que criamos é muito prático e muito útil. Neste pequeno artigo iremos ver algumas formas e exemplos de como associar teclas de atalho a procedimentos e ver as principais diferenças entre os dois métodos disponíveis.

A maneira mais simples e mais usada pela maioria dos utilizadores, é seleccionando o separador Developer e escolhendo a opção Macros (ou pressionando as teclas Alt+F8)

New Picture

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

New Picture (2)

Irá abrir então 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 será Ctrl+a (por exemplo) 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

Muito simples e muito prático!

No entanto isto limita-nos à utilização de determinadas combinações de teclas o que poderá ser, em alguns casos, 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étodoApplication.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 ficheiro de Excel é aberto, e definir no arranque 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 procedimentoMostraResultado 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 emThisWorkbook e o procedimento CopiaDados está criado no código da Sheet1.

Mas atenção 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 Excel. É importante testar sempre!

Muito importante também verificar se não estamos a utilizar uma combinação do próprio sistema operativo. 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, no Excel, sempre que carregarem na tecla Enter aparecerá uma mensagem com a informação “Opps !!!”.

Mas podemos também desabilitar as associações que definidas. Para tal, basta 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 oCtrl+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 dos problemas que as associações podem causar.

É sem dúvida uma forma muito prática de chamar código VBA.

Fonte: Visual Basic em Português

Anúncios

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s