Como carregar o seu menu sem que ele vá para lista de suplementos?

A Microsoft, nesta versão 2007, decidiu que todos os itens de menu deveriam ficar expostos para facilitar a vida de programadores e utilizadores.   Resolveu também mudar o layout e a forma de como manipulá-los através da programação XML.   Menus agora se chamam Faixas (Ribbons) e devido as mudanças radicais na estruturação, podemos afirmar que menu será coisa do passado.   Você ainda poderá criar e/o alterar menus no Access 2007 mais só através da programação pelo VBA.

Os menus funcionam perfeitamente e dependendo da configuração de inicialização feita no seu  aplicativo, serão alocados nas Ribbons do Access 2007, na guia suplementos.   Veja na figura abaixo:

Usando Access


Podemos modificar esta configuração tanto na versão anterior do Access  como no Access 2007.    Vejamos primeiro, como configurar pela versão anterior.  Abra o aplicativo no modo estrutura ,  vá no menu "ferramentas" e clique em "inicializar".

Usando Access


Desmarque os itens: "Permitir uso de menus completos do Access" e "Permitir barras de ferramentas internas". 

Abrindo o aplicativo pelo Access 2007, depois da configuração:

Usando Access


Agora configurando direto no Access 2007, para ter o mesmo efeito mostrado na figura acima., proceda da seguinte forma: abra o aplicativo no modo estrutura, selecione o botão do Office (canto superior esquerdo) e clique em "Opções do Access".  Selecione o menu "Banco de dados atual" e desmarque os itens:"Permitir Menus Completos" e "Permitir Barras de Ferramentas Internas.   Veja na figura abaixo:

Usando Access

Pode acontecer que o Access 2007 configure o menu para não visível e/ou não habilitado, depois das configurações citadas acima.  A solução para isso é rodar duas linhas no VBA, que passe o menu para a condição visível e/ou habilitado.   Abra o banco de dados no modo estrutura (no Access 2007).   Dê um CTRL + G e digite na janela imediata os comandos, conforme a figura abaixo. Pressione a tecla ENTER para cada comando digitado.    Feche tudo , reabra o BD e pronto.

Usando Access

Como resolver essa questão não tendo acesso ao Access 2007?   Adicionando os comandos, mostrado acima, na inicialização do seu Banco de Dados através de um formulário de inicialização ou através da macro AutoExec.

Como resolver pela macro AutoExec ?

Abra uma nova macro e selecione a ação "ExecutarCódigo" e digite o nome da função a ser carregada( exemplo: fncCarregaMenu() ).  Salve a macro com o nome de AutoExec.


Usando Access
Abra o módulo global e crie a função, conforme indicado abaixo:
 

Public function fncCarregaMenu()

On error resume next
'------------------------------
'comando para habilitar o menu
'------------------------------
application.CommandBars("NomeDoSeuMenu").Enabled = true
 
'--------------------------------------
'comando para tornar o menu visível
'--------------------------------------
application.CommandBars("NomeDoSeuMenu").Visible = true


End Function

 

 


21 comentário(s)

Nixon   2/6/2009 18:31:51

Mesmo desmarcando o indicado, continua aparecendo o menu inicio.

Avelino Sampaio   3/6/2009 13:51:56

Olá Nixon

Quando a faixa INICIO aparece é uma indicação de que o SEU menu pode NÃO estar carregado na inicialização. Verifique em: BOTÃO DO OFFICE > OPÇÕES DO ACCESS > BANCOS DE DADOS ATUAL > BARRAS DE MENUS (verifique se seu menu está na lista). Observe que numa das figuras acima, o meu menu de exemplo chama-se "menu_principal"

Grato
Avelino Sampaio

Avelino Sampaio   14/7/2009 19:02:51

ATENÇÃO

A dica que foi dada é para arquivos com extensão MDB rodando no Access 2007. Se você importou os objetos mais o menu para a nova extensão ACCDB do Access 2007, o menu irá se apresentar na FAIXA(ribbon) de suplementos.

O que deve ter acontecido com o Nixon é que após as alterações citadas aqui, ele ficou com as Ribbons início e suplementos ativas.

É possível ocultar a ribbon INÍCIO para ficar apenas com a Ribbon suplementos mais o aspecto do menu, inserido na ribbon, ao meu ver, não ficará nem um pouco elegante.

Vou dar os passos aqui de forma bem sucinta para ocultar a ribbon INÍCIO

1 - Criar a tabela USysRibbons com os campos ID(numeração automática), RibbonName(texto ), RibbonXml(memorando)

2 - Abra a tabela e digite para a RibbonName : MinhaFaixa
E para a RibbonXml:

[customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"]
[ribbon startFromScratch="false"]
[tabs]
[tab idMso="TabHomeAccess" visible="false" /]
[tab idMso="TabAddIns" label="Meu menu" /]
[/tabs]
[/ribbon]
[/customUI]

troque [..] por <..>

3 - Feche o BD e o reabra para ele ler a tabela.

4 - Vá em: Botão do Office > Opções do Access > Banco de dados atual > Nome da faixa de opções > Escolha MinhaFaixa.

5 - Feche o bd e reabra para ver o resultado

Sucesso
...

Neto   18/7/2009 19:06:29

Cara... estava mantendo minha aplicação toda em Access2003 por causa destas Barras (ribbons). Vou testar a sua dica, e tendo sucesso, vou migrar para o Access2007.

E de todas as pesquisas que procurei na net, esta foi sem dúvida a mais completa.

Obrigado.

Avelino Sampaio   20/7/2009 19:00:33

Neto, se tiver alguma dificuladde pode entrar em contato comigo que tento lhe ajudar neste processo.

Sucesso

Carlos Eduardo   1/8/2009 22:31:54

Avelino,

Funcionou beleza a dica da Ribbon.
Valeu.
Sds,

Carlos Eduardo

Machado   12/8/2009 12:55:08

Prezado amigo, você poderia me ajudar em:
Criei algumas abas, com botões para chamar formul... mas, quando chamo um relatório gostaria que ativasse a aba padrão "Visualização de Impressão". É possível fazer via VBA, também em VBA posso OCULTAR, DESABILITAR uma Aba ou um controle nessas...
De já agradeço...

Avelino Sampaio   26/8/2009 06:15:20

Machado,

você esta se refindo a que Access ? No Access 2007 o correto é desenvolver ribbons para isso. Em breve estarei oferendo vídeo-aulas ensinando a programar isso.

Se vc ainda não conseguiu resolver o seu problema entre em contato comigo pelo link contato.

Sucesso

Ren@tas2   21/9/2009 08:59:35

Eaii gostei muito porque eu tô fazendo uma prova e ajudou.....

ObrigadOo

Adélio   20/10/2009 01:01:32

Amigo, suas dicas são ótimas!
Gostaria de um auxílio: pretendo atribuir, durante a execução do banco de dados, a alguns botões das ribbons, a condição de "false" para o atributo enabled. Sei fazer isso via xml, mas não sei como fazer para que, em tempo de execução, um determinado botão fique desativado.

Ou seja, como fazer com que o access leia novamente, durante a execução do banco, a XML, para desativar determinados botões?

Avelino Sampaio   20/10/2009 06:59:10

Adélio,

1) Acrescente uma chamada de função na linha do esquema.
customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="fncOnLoad"

2) Num módulo global crie uma variável Public e acrescente a função abaixo

Option Compare Database
Public objFaixa As IRibbonUI
----------------------------------------------------------------------------------
Public Sub fncOnLoad(ribbon As IRibbonUI)
Set objFaixa = ribbon
End Sub

3) A variável assume a classe IRibbonUI que possui os métodos INVALIDATE E INVALIDATECONTROL.

4) Para reavaliar um controle da ribbon você tem que informar o id do controle para o objeto

objFaixa.invalidatecontrol (btClientes)

Onde btclientes, como exemplo, seria o id de um botão que carrega um formulário de clientes

5) quando vc manda reavaliar um controle, é necessário que o controle possua um atribbuto get para se chamar uma função e aí através da função vc determina o que deve ser feito. No seu caso habilita-lo ou não.

6) Se precisar de mais esclarecimentos entre em contato, ok

Sucesso

Adélio   20/10/2009 16:11:01

Boa tarde, meu caro. Antes de mais nada, obrigado pelo auxílio.
Abusando um pouco mais de sua boa vontade, gostaria de aprofundar um pouco na questão: pelo que entendi, a fncOnLoad() será chamada pelo atributo get, quando eu mando reavaliar um controle. Porém, não consegui concatenar minha necessidade com a solução proposta.

Serei um tanto ousado e explicarei o que estou fazendo (pedindo perdão se eu disser alguma besteira, pois na verdade eu sou apenas contador e advogado... trabalho com informática por puro PRAZER). Mas vamos à situação concreta (no próximo comentário):


Adélio   20/10/2009 16:15:30

-Meu banco de dados tem uma tabela chamada "MenusRibbons" onde eu informo todos os atributos que desejo (id, label, keytip, enabled, size etc). Também tem um campo "Cod", chave.
-Tenho uma tabela de permissões de acesso de usuários, em que informo o código do usuário e o campo "Cod" correspondente ao item de menu que eu desejo. Se o usuário estiver naquela tabela, com aquele item de menu, o atributo enabled será "true". Caso contrário, será "false".
-Construo a XML com base nessas configurações, no momento da abertura do banco de dados.
-Minha dúvida: como fazer com que o Access leia TODA A XML novamente, reavaliando TODOS os controles da Ribbon, antes dela ser exibida?

Avelino Sampaio   20/10/2009 17:49:26

Adélio,

Acesse o link contato do site para eu receber seu email.

Tenho aqui um exemplo e uma vídeo-aula improvisada sobre este tema, que acredito, possa esclarecer melhor a suas dúvidas.

Fico no aguardo

ANTONIO   27/12/2009 23:10:53

o meu access é 2007,qdo os menus saem no suplementos que virou o nome do menu fica deselegante.
vc sabe como faz para colocar eles somente na linha horizontal sem ficar na vertical?obrigado.

Avelino Sampaio   29/12/2009 12:12:40

Atonio,

me forneça mais detalhes pelo link "contato" aqui do site. Se possível, me enviando uma imagem da tela (print screen), para que eu possa te ajudar de forma mais efetiva.

No aguardo

antonio   1/1/2010 15:25:03

obrigado avelino ,andei estudando seu exemplo e aprofundei no assunto so que sei so um pouquinho ainda,qdo vc coloca na propriedade o nome do botao button id,que pasta ele busca esse nome?sse for interno no access como faço para listar os botoes exisstentes?obrigado

márcio   17/2/2010 13:48:10

avelino utilizei sua dica e deu certo, mas como faço para ativar os menus após desativá-los?
um abraço

Avelino Sampaio   24/2/2010 05:15:23

Márcio,

Segurando a tecla SHIFT, na inicialização do aplicativo, vc consegue ter acesso a estrutura.

Se não for isso, entre em contato pelo link CONTATO e me forneça mais detalhes para eu poder te ajudar de forma mais efetiva.

Sucesso

Helder   26/7/2010 21:04:47

Como faço para criar uma barra de menu personalizada para minha base de dados

Aldovrando   13/8/2010 15:36:16

Avelino eu crei a barra certinho to usando uma função no xml cahamda getEnabled que chama uma função dentro do meu banco de dados se o usuario tem permissão ou não para aquele botão.. ele executa tudo sem da erro mas o botão não atualiza. Usei o método InvalidateControl q vc comenta la em cima.. mas os botões ficam todos desativados.. até os q o usuario tem permissão.

E agora o q eu faço?


Envie seu comentário: