Banco de Dados - Access

Criando menus personalizados no MS Access – Parte 3

Nesta série de artigos, estarei mostrando como criar tais menus de forma eficiente utilizando uma conexão ao nosso banco de dados para carregar os itens que comporão o nosso menu. Este breve tutorial assume um conhecimento prévio do MS Access.

por Robert Martim



Você alguma vez precisou criar um menu personalizado no Access? Se sim, como foi que você levou a cabo o processo?

Existem várias formas de se criar menus personalizados no Office e o MS Access nos fornece tabelas que podem ser utilizadas para armazenar os dados que serão utilizados para criar nossos menus.

Nesta série de artigos, estarei mostrando como criar tais menus de forma eficiente utilizando uma conexão ao nosso banco de dados para carregar os itens que comporão o nosso menu. Este breve tutorial assume um conhecimento prévio do MS Access. Para acessar a primeira parte desta série de artigos e arquivos clique aqui. Para acessar a segunda parte clique aqui.

Neste artigo mostrarei como executar ações e atalhos de teclado utilizando a propriedade OnAction e o método Execute. Além disso mostrarei como criar teclas de atalho no Access.

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.

Primeiramente, 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 1 – Propriedade OnAction e Método Execute

Os faceID’s ficam a critério do leitor. No próximo artigo estarei mostrando como criar uma lista das faces disponíveis no Office dentro do próprio Access em uma barra de comando.

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 2 – MsgBox chamada pela Propriedade OnAction

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


Figura 3 – Janela de relacionamentos ativada pela Método Execute

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 de teclado para o nosso botão.

Atalhos de teclado 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 meus cursos 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.

Para 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?

Primeiramente, 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 sinal gráfico "&" (ampersand) é utilizado para sublinhar a letra chave do atalho.

O botão de menu acima será inserido no menu Arquivo como o primeiro item:


Figura 4 – Criando tecla de atalho

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

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.

Conclusão:

Este Tutorial é a terceira parte da série que estarei escrevendo sobre criação de Menus Personalizados no MS Access. Fique ligado no Linha de Código para as próximas dicas!

Os arquivos mdb contendo os exemplos acima podem ser baixado clicando aqui.

Se você deseja saber mais ou tem críticas, sugestões e comentários fale diretamento com o autor pelo email rm@faircourt.com ou deixe aqui no site.

Notas:
Este artigo é um excerto do curso de minha autoria sobre criação de menus personalizados no Access o qual pode ser adquirido através do link http://www.juliobattisti.com.br/cursos/accessmenus/default.asp. Outros cursos da série incluem menus no Excel (http://www.juliobattisti.com.br/cursos/excelvbamenus/default.asp) e Word (http://www.juliobattisti.com.br/cursos/wordmenus/default.asp).

Robert Martim

Robert Martim - Formado e Pós-Graduado em Finanças pela Universidade de Londres, Reino Unido. Diretor de TI da Faircourt Capital Limited (Reino Unido). Fornece suporte pro bono em TI à entidade de caridade Nigeriana NIDOE (Nigerians in Diaspora Organisation Europe) desde 2001. Colaborador ativo do fórum Excel Avançado do site www.juliobattisti.com.br, onde divide seu conhecimento e experiência com outros membros do espaço.
Autor do livro Excel e VBA na Modelagem Financeira: Uma abordagem prática.