Quando criamos menus queremos executar algo. Não adianta criar algo lindo e ele não funciona. Com os botões temos duas maneiras para executar um comando no botão:
A diferença entre OnAction e Execute é que OnAction executa um comando que nós mesmos criamos ao passo que Execute executa um comando interno do Access como Imprimir, por exemplo. Porém, o Execute é acionado quando criamos nosso botão, portanto, iremos utilizar o ID do botão interno para executar o comando. Em outras palavras, definiremos o nosso botão de forma que ele faça a mesma coisa quando clicamos no botão de relacionamentos no menu Ferramentas.
rimeiramente, vamos criar o código que montará nosso menu:
Public Const MENUACCESS As String = "Menu Bar"
Sub executandoMenus()
Dim mnu As CommandBarPopup
Dim btn As CommandBarButton
On Error Resume Next
CommandBars(MENUACCESS).Controls("Executar comandos").Delete
Set mnu = CommandBars(MENUACCESS).Controls.Add _
(Type:=msoControlPopup, before:=1)
mnu.Caption = "Executar comandos"
Set btn = mnu.Controls.Add(Type:=msoControlButton)
With btn
.Caption = "Exemplo OnAction"
.FaceId = 1018
'Mensagem refere-se a macro a ser executada
.OnAction = "Mensagem"
End With
'Defini o ID do botão como sendo 523 (Relacionamentos).
'Quando o botão for clicado o Access carrega
'a caixa de relacionamentos
Set btn = mnu.Controls.Add(Type:=msoControlButton, ID:=523)
With btn
.Caption = "Exemplo Execute"
.FaceId = 523
'Este método está comentado, pois utilizaremos
'o ID 523 para executá-lo
'.Execute
End With
End Sub |
O nosso menu tem o seguinte aspecto:

Figura 6-1
Os faceID’s ficam a critério do leitor. Mais adiante veremos como personalizar as carinhas dos botões de menu.
Observe que no OnAction nós colocamos o nome da macro a ser executada. Porém, no caso do Execute utilizamos o número referente ao comando que desejamos executar. Como o OnAction necessita de uma macro precisamos acrescentá-la ao nosso projeto. Como exemplo, podemos utilizar a seguinte sub-rotina:
Sub Mensagem()
MsgBox "Não há nada neste botão que possa ser executado.", _
vbInformation
End Sub
|
Quando clicamos no primeiro botão ele executa o OnAction e a mensagem é passada para o usuário:

Figura 6-2
Já no segundo botão estamos executando um comando interno do Access com um ID igual a 523:

Figura 6-3
Uma vez que definimos qual é o ID do comando o método Execute torna-se redundante, pois ao clicarmos no botão o comando será executado. Porém, há situações onde queremos que o comando seja executado quando o código é rodado.
Os comandos acima são acessados através de um “clique”, porém, podemos também acrescentar um combinação de teclas para criar um atalho para o nosso botão.
Atalhos são acessados diretamente do teclado e facilitam a execução de comando, pois não precisamos recorrer ao mouse toda vez que desejamos executar tal comando.
O processo é o mesmo que o OnAction. Na verdade, o OnAction é que determina a macro a ser executada. O que precisamos fazer é utilizar a propriedade ShortCutText para criar o Atalho e defini-lo no código.
O procedimento a seguir descreve como adicionar um atalho de teclado ao menu.
Se você possui os módulos sobre o mesmo assunto no Word e Excel aqui você encontrará uma grande diferença. O Access não é direcionado por eventos, portanto, tudo aquilo que é executado é executado dentro do projeto e não no aplicativo. Assim sendo, você não tem a opção Application.MacroOptions como no Excel ou KeyBindings como no Word.
ara se criar teclas de atalho no Access nós precisamos utilizar macros. Porém, como você notará a macro não é a mesma coisa que o código VBA, então, como fazer para adicionar uma tecla de atalho?
rimeiramente, vamos adicionar o menu. Como o atalho não está diretamente relacionado ao código, a forma como criamos o menu continua a mesma. Contudo, adicionaremos o texto indicativo do atalho ao botão que criaremos:
Public Const MENUACCESS As String = "Menu Bar" |
Sub mnuAtalho()
Dim mnu As CommandBarPopup
Dim btn As CommandBarButton
On Error Resume Next
' apaga o menu caso ele já exista
CommandBars(MENUACCESS).Controls(1).Controls _
("Abrir Janela Iniciar ").Delete
Set mnu = CommandBars(MENUACCESS).FindControl(ID:=30002)
Set btn = mnu.Controls.Add(Type:=msoControlButton, before:=1)
With btn
' O ampersand (&) é para indicar a chava do atalho
.Caption = "Abrir Janela &Iniciar"
.ShortcutText = "Ctrl+Shift+I"
.OnAction = "Iniciar"
End With
End Sub |
O botão de menu acima será inserido no menu Arquivo como o primeiro item:

Figura 6-4
O atalho será CTRL+SHIT+I. Antes de adicionarmos o atalho, você precisa saber como representas as teclas acima. A tabela abaixo mostra as teclas e como elas devem ser representadas:
TECLA |
Representada por |
CONTROL |
^ |
FUNCTION |
{F1} |
SHIFT |
+ |
No exemplo, desejamos adicionar o atalho CTRL+SHIT+I, portanto, estaremos olhando para a seguinte combinação ^+I. Se por outro lado a combinação fosse CTRL+F2, então, teríamos ^{F2} e assim sucessivamente.
É importante lembrar que certos atalhos podem entrar em conflito com algum atalho do sistema. Atalhos comuns são CTRL+P, CTRL+C, CTRL+Z, etc. Ao utilizar teclas de atalho, assegure-se que elas não entram em conflito com uma tecla já existente.
Com o botão inserido onde desejamos e com as informações acima compreendidas, podemos partir para a criação do atalho.
Abra a janela do banco de dados e vá até o grupo de macros. Crie uma nova macro e dê o nome de AutoKeys, como mostra a figura:

Figura 6-5
Abra a macro em modo de design. Quando a janela de design da macro abrir, clique no menu Exibir e selecione a opção Nomes de macro. É neste novo campo que você deverá inserir as teclas de atalho ^+I. No campo Ação selecione a opção ExecutarCódigo e no campo Nome da função digite Iniciar():

Figura 6-6
Iniciar() refere-se a função abaixo. Esta função irá carregar a janela Inicializar:
Function Iniciar()
DoCmd.RunCommand acCmdStartupProperties
End Function |
Enquanto o seu projeto estiver aberto, sempre que necessitar chamar a janela de inicialização basta pressionar CTRL+SHIFT+I.
Este método pode ser utilizado para qualquer tipo de atalho que você tenha em mente. Lembre-se, porém, se sempre verificar as teclas antes. Se as teclas entram em conflito com as teclas padrões, estas teclas não funcionarão.
Veja mais adianta tópico sobre como listar os ID’s dos menus do Access
|