AS EMPRESAS ESTÃO "DESESPERADAS" POR ESTE TIPO DE PROFISSIONAL... - VOCÊ É UM DELES?

MEGA FORMAÇÃO EM INFRAESTRUTURA DE TI - O Conhecimento que Vira Dinheiro - CLIQUE AQUI

Você está em: PrincipalArtigosSérie "Como Fazer": Menus no Access › Lições : 09
Quer receber novidades e e-books gratuitos?
« Anterior Δ Página principal ¤ Índice Próxima »
Criando menus, barras de comando e botões personalizados no Access usando VBA
Autor: Robert Friedrick Martim
Lição 008 - Criando "popups" de atalho

Um outro tipo de menu interessante é o menu de atalho com o botão direito do mouse. Este menu é acessado quando clicamos com o botão direito do mouse sobre a planilha ou qualquer outro local de nossa área de trabalho como mostra figura abaixo:


Figura 8-1

Nesta parte mostrarei como fazer tipo de menu no Access. Diferentemente dos outros aplicativos do Office, o Access não é orientado para eventos. Portanto, o método utilizado será aplicado aos formulários do Access.

Além de podermos criar o nosso próprio menu de atalho podemos adicionar um botão de atalho a um menu já existente. Para uma lista dos menus do Access veja o último tópico deste módulo.

A lógica para criação deste tipo de menu é a mesma que as apresentadas anteriormente.

No Excel, por exemplo, precisamos definir o evento BeforeRightClick na planilha onde ele ocorrerá. Já no Access este evento não existe. Ao invés disso utilizaremos o evento MouseDown do formulário. Este evento recebe vários argumentos, mas o argumento que nos interesse é o Button. Este argumento pode receber um número inteiro (integer) através das constantes acLeftButton (1), acRightButton (2) e acMiddleButton (4).

O botão que nos interessa é o acRightButton o qual normalmente utilizamos para este tipo de tarefa.

rimeiro, vamos criar o menu. Para isso utilizaremos dois módulos: um que conterá o código para a criação dos menus e outro que conterá as ações (OnAction) efetuadas pelo menu.

O menu que estaremos criando conterá as seguintes opções:

  • Inserir nova tabela
  • Inserir novo formulário
  • Inserir novo relatório
  • Sobre  (mostra informações sobre este aplicativo)
  • Ajuda (mostra a ajuda para do Access XP)

O código deve ser escrito em um módulo para menu somente (neste exemplo, o nome do módulo é basMenu). O código construído com as opções acima fica:

Public Const NOMEBARRA As String = "mnuAtalho"

Sub mnuAtalho()

    Dim cmdBar  As CommandBar

    Dim mnu     As CommandBarButton

   

    delAtalho 'Apaga a barra de comando anterior caso ela exista

    Set cmdBar = CommandBars.Add _

      (Name:=NOMEBARRA, Position:=msoBarPopup, Temporary:=True)

   

    Set mnu = cmdBar.Controls.Add(Type:=msoControlButton)

    With mnu

        .Caption = "Inserir nova tabela"

        .OnAction = "novaTabela"

        .FaceId = 583

    End With

       

    Set mnu = cmdBar.Controls.Add(Type:=msoControlButton)

    With mnu

        .Caption = "Inserir novo formulário"

        .OnAction = "novoForm"

        .FaceId = 512

    End With

       

    Set mnu = cmdBar.Controls.Add(Type:=msoControlButton)

    With mnu

        .Caption = "Inserir novo relatório"

        .OnAction = "novoRelatório"

        .FaceId = 1714

    End With

   

    Set mnu = cmdBar.Controls.Add(Type:=msoControlButton)

    With mnu

        .Caption = "&Sobre..."

        .OnAction = "sobre"

        .FaceId = 326

        .BeginGroup = True

    End With

   Set mnu = cmdBar.Controls.Add(Type:=msoControlButton)

    With mnu

        .Caption = "&Ajuda"

        .OnAction = "ajuda"

        .FaceId = 984

        .BeginGroup = True

    End With

 

End Sub

Sub delAtalho()

'   Continua a execução caso o menu não esteja presente

    On Error Resume Next

    CommandBars(NOMEBARRA).Delete

End Sub

Com o menu feito, precisamos agora escrever as rotinas das ações definidas na propriedade OnAction:

Sub novaTabela()

'   Dimensiona o objeto tabela

    Dim tabela  As TableDef

   

    On Error Resume Next

'   Remove a tabela "tabela1" do projeto atual

    DoCmd.DeleteObject acTable, "tabela1"

   

'   Solicita ao usuário que entre o nome da nova tabela e campo

    nomeTabela = InputBox("Digite o nome de uma nova tabela", _

      "Nova tabela...", "tabela1")

    nomeCampo = InputBox("Digite o nome de um novo campo", _

      "Novo campo...", "campo1")

 

'   Create uma nova tabela no banco de dados atual

    Set tabela = CurrentDb.CreateTableDef(nomeTabela)

   

    With tabela

'       Anexa o campo à tabela

        .Fields.Append .CreateField(nomeCampo, DB_TEXT)

    End With

   

'   Anexa a tabela ao projeto atual

    CurrentDb.TableDefs.Append tabela

 

'   Atualiza a janela do projeto atual

    Application.RefreshDatabaseWindow

End Sub

 


Sub novoForm()

'   Dimensiona o formulário

    Dim Form    As Form

 

'   Remove o formulário "form1"

    On Error Resume Next

    DoCmd.DeleteObject acForm, "form1"

   

'   Solicita ao usuário o nome do novo formulário

    novoNome = InputBox("Digite o nome do novo formulário", _

      "Novo formulário...", "form1")

 

'   Cria um novo formulário baseado no frmIniciar

    Set Form = CreateForm(, "frmIniciar")

 

'   Define a fonte de dados (RecordSource) do formulário

    Form.RecordSource = "Funcionários"

 

'   Nome velho do formulário para que seja renomeado

    nomeVelho = Form.Name

 

'   Salva e fecha o formulário

    DoCmd.Save acForm, Form.Name

    DoCmd.Close acForm, Form.Name

 

'   Modifica o nome do formulário para o nome dado pelo usuário

    DoCmd.Rename novoNome, acForm, nomeVelho

End Sub

 

Sub novoRelatório()

'   Veja comentário para a rotina de criação do formulário

    Dim relatório    As Report

   

    On Error Resume Next

    DoCmd.DeleteObject acReport, "relatório"

   

    novoNome = InputBox("Digite o nome do novo relatório", _

      "Novo relatório...", "relatório")

 

    Set relatório = CreateReport(, "relatório")

   

    relatório.RecordSource = "Funcionários"

   

    nomeVelho = relatório.Name

 

    DoCmd.Save acReport, relatório.Name

    DoCmd.Close acReport, relatório.Name

 

    DoCmd.Rename novoNome, acReport, nomeVelho

End Sub

Finalmente, precisamos construir a rotina no formulário que chamará o menu de atalho. No formulário que você criou, abra o VBE onde entraremos o seguinte código:

'Chama a rotina de para criação dos menus de atalho

Private Sub Form_Open(Cancel As Integer)

    Call mnuAtalho

End Sub

 


'Carrega o menu de atalho e omite o menu de atalho padrão do Access

Private Sub Detalhe_MouseDown(Button As Integer, Shift As Integer, _

    X As Single, Y As Single)

    'Captura o botão direito do mouse

    If Button = acRightButton Then

        'Cancela o evento padrão para o botão

        DoCmd.CancelEvent

        'Mostra o menu de atalho personalizado

        CommandBars(NOMEBARRA).ShowPopup

    End If

End Sub

Uma vez compilado, o menu terá o seguinte formato:


Figura 8-2

O exemplo anterior mostra como criar o nosso próprio menu de atalho e cancelar o menu do evento padrão para o objeto formulário.

O próximo exemplo mostra como criar um botão e anexa-lo à lista de um menu de atalho popup já existente.

Adicionando um controle a um menu de atalho popup já existente

Em alguns casos não estamos interessados em remover um menu popup padrão. Ao invés disso queremos adicionar um botão a um controle já existente.

O maior problema aqui é identificar o controle. No último capítulo mostro como criar uma rotina para listar todas as barras de comando e respectivos controles. É nesta lista que podemos identificar as barras de comando.

O exemplo abaixo mostra a barra Database Titlebar com um controle extra chamado Sobre logo no topo.


Figura 8-3

Se você não deseja que o usuário tenha acesso a este menu, você pode bloqueá-lo através do método mostrado anteriormente.

orém, aqui, tudo que desejamos fazer é adicionar um controle do tipo msoControlButton ao menu popup existente.

Decido a barra de comando que receberá o controle, criar o botão é bem simples:

Sub adicionarAoPopup()

    Dim btn         As CommandBarButton

   

    On Error Resume Next

    CommandBars("Database TitleBar").Controls("Robert").Delete

   

    Set btn = CommandBars("Database TitleBar").Controls.Add( _

      msoControlButton, before:=1)

        btn.Caption = "Sobre"

        btn.FaceId = 326

End Sub

Não é necessária a criação de dois módulos para fazer isso.Os módulos criados aqui são para melhor organização do material.

« Anterior Δ Página principal ¤ Índice Próxima »

você conhece a universidade do access?

Universidade do Access - Curso Completo de Access
com tudo para você dominar o Access - do Básico ao
Avançado - até a Criação de Sistemas Profissionais
Completos - Passo a Passo - Tela a Tela

Capa da Universidade do Access

Aplica-se ao Access 2019, 2016, 2013 e 2010!

13 Cursos - 574 Vídeo-Aulas - 63:32 horas

Para todos os detalhes, acesse:

https://juliobattisti.com.br/universidade-do-access.asp

Quer receber novidades e e-books gratuitos?

MEGA FORMAÇÃO EM INFRAESTRUTURA DE TI

(Online, Vitalício, Prático e Atualizado)!

  • Chega de ser Ignorado pelo Mercado!

  • A vida não vai Melhorar Sozinha!

  • Quem domina infraestrutura, domina o Mercado.

  • Com esta Formação você vai Dominar o Conhecimento e torne-se o Profissional que as Empresas estão Buscando, "desesperadamente", mas não estão encontrando.

NÃO PROCURE VAGAS, SEJA PROCURADO!

 

Curso Completo de Excel - Curso Online com Certificado - 925 Vídeo Aulas - 22 Cursos - 120:42 horas

 

Para Todos os Detalhes, Acesse:

Curso Completo de Excel - Curso Online com Certificado - 925 Vídeo Aulas - 22 Cursos - 120:42 horas

 

https://juliobattisti.com.br/curso-infra-ti.asp

 

Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434

Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208

Todos os direitos reservados, Júlio Battisti 2001-2026 ®

LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO

DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI