MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


+4
scandinavo
DFROBINSON
Uilson Brasil
WEBE
8 participantes

    [Resolvido]Navegação no Formulario via modulo VBA

    avatar
    WEBE
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 30
    Registrado : 31/01/2011

    [Resolvido]Navegação no Formulario via modulo VBA Empty [Resolvido]Navegação no Formulario via modulo VBA

    Mensagem  WEBE 30/12/2013, 17:50

    É possível criar um módulo contendo os controles comuns entre os formulários como por exemplo, 'Novo Registro, Apagar, Avançar, Anterior, Salvar, Primeiro Registro, Ultimo... e fazer referencia a eles em todos os forms? Como seria isto?
    Uilson Brasil
    Uilson Brasil
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1039
    Registrado : 23/04/2013

    [Resolvido]Navegação no Formulario via modulo VBA Empty Re: [Resolvido]Navegação no Formulario via modulo VBA

    Mensagem  Uilson Brasil 30/12/2013, 18:11

    Webe,

    Os comandos de navegação são tão simples que é inviável pensar em criar um módulo para tais.

    Outro situação é desabilitar e/ou habilitar campos em um determinado formulário ao salvar, alterar, inserir já que para cada formulário existem campos com nomenclaturas diferentes.


    Abraços,


    .................................................................................
    ::: Uilson Brasil
    ::: Design in Microsoft Access
    avatar
    WEBE
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 30
    Registrado : 31/01/2011

    [Resolvido]Navegação no Formulario via modulo VBA Empty Ok, obrigado.

    Mensagem  WEBE 30/12/2013, 19:02

    Endendo sr. Uilson. Todos os botões são realmente simples. Inclusive todos os meus forms os contém, e quase todos feitos com o próprio assistente do access. Mas se é possível, mesmo sendo simples, gostaria de aprender, ver como seria e testar nos meus projetos. De qualquer forma, grato pela resposta e disposição em ajudar.
    Uilson Brasil
    Uilson Brasil
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1039
    Registrado : 23/04/2013

    [Resolvido]Navegação no Formulario via modulo VBA Empty Re: [Resolvido]Navegação no Formulario via modulo VBA

    Mensagem  Uilson Brasil 30/12/2013, 19:05

    Webe,

    Sendo assim, espero que algum ninja possa te ajudar nessa tarefa.


    Abraços,


    .................................................................................
    ::: Uilson Brasil
    ::: Design in Microsoft Access
    DFROBINSON
    DFROBINSON
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 21/04/2012

    [Resolvido]Navegação no Formulario via modulo VBA Empty DoCmd.GoToRecord

    Mensagem  DFROBINSON 30/12/2013, 23:34

    Boa noite Webe
    Para navegar entre os registros usando VBA existem os comandos:
    - DoCmd.GoToRecord, , acPrevious, acNext, acFirst, , acLast, acNewRec

    Para registro anterior (AcPrevious) e seguinte (acNext) tu deves testar a posição do registro no conjunto de dados e uma maneira de fazer isso é assim:

    Private Sub cmdAnterior_Click()
       With Recordset
           If Not .AbsolutePosition = 0 Then
               DoCmd.GoToRecord , , acPrevious
           End If
       End With
    End Sub

    Private Sub cmdProximo_Click()
       With Recordset
           If .AbsolutePosition > 0 And _
              .AbsolutePosition < .RecordCount - 1 Then
               DoCmd.GoToRecord , , acNext
           End If
       End With
    End Sub

    Assim evitarás de tentar ir para registro anterior ao primeiro ou posterior ao último o que geraria uma mensagem de erro em tempo de execução.

    Espero ter ajudado.

    Daniel Robinson.
    DFROBINSON
    DFROBINSON
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 21/04/2012

    [Resolvido]Navegação no Formulario via modulo VBA Empty Correção

    Mensagem  DFROBINSON 31/12/2013, 17:27

    Olá Webe.
    Segue uma correção:

    Private Sub cmdProximo_Click()
      With Recordset
          If .AbsolutePosition < .RecordCount - 1 Then
              DoCmd.GoToRecord , , acNext
          End If
      End With
    End Sub

    Att.

    Daniel Robinson
    avatar
    WEBE
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 30
    Registrado : 31/01/2011

    [Resolvido]Navegação no Formulario via modulo VBA Empty Re: [Resolvido]Navegação no Formulario via modulo VBA

    Mensagem  WEBE 31/12/2013, 23:25

    Obrigado pela resposta Daniel Robinson. Fiz uns testes aqui e ficou muito bom. No entanto estes comandos devem ser inseridos nos botões em cada um de meus formulários não e isto? Teria como a gente organiza-los em um modulo (Todos em um... Avançar, Salvar, Primeiro...)pra não repetirmos em todos os forms ... e chamarmos através de uma Call xxx ?
    avatar
    WEBE
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 30
    Registrado : 31/01/2011

    [Resolvido]Navegação no Formulario via modulo VBA Empty If ou select case

    Mensagem  WEBE 2/1/2014, 15:01

    Pessoal, tentei o seguinte,

    Public botoesNavegacao

    Select case Navegacao
       
        Case btnPrimeiro_Click = Clicked
        btnPrimeiro_click = True
        Msgbox "Você Clicou no Botão PRIMEIRO"
        btnPrimeiro=false
       
        Case btnUtimo_Click = Clicked
        btnUtimo_click = True
        Msgbox "Você Clicou no Botão ULTIMO"
         btnUtimo = False
       
        Case btnAnterior_Click = Clicked
        btnAnterior_Click = True
        Msgbox "Você Clicou no Botão ANTERIOR"
        btnAnterior = false
       
        Case btnProximo_click = Cliked
        btnAnterior_Click = True
        Msgbox "Você Clicou no Botão PRÓXIMO"
        btnAnterior = False

    End Select

    End Sub

    No Evento ao Clicar de cada Botão tenho Call botoesNavegacao


    Funciona, mas o código continua a ser executado independente do botão que eu cliquei. Aí executa todas as ações dos outros botões também. Como parar o Código caso uma das opções sejam verdadeiras? Ex. Se eu clicar no btnPrimeiro, ele deveria entender que não poderia passar para o próximo case, DEVERIA e finalizar a ação.

    TEntei usar o if, mas acontecia a mesma coisa. Existe alguma função ou comando que identifica qual botão foi clicado? Tentei "Cliked" e "No Clicked", mas sem sucesso.


    Última edição por WEBE em 4/1/2014, 01:42, editado 3 vez(es)
    DFROBINSON
    DFROBINSON
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 21/04/2012

    [Resolvido]Navegação no Formulario via modulo VBA Empty Botões de Navegação

    Mensagem  DFROBINSON 4/1/2014, 00:19

    Olá Webe.

    A ideia de criar um módulo com as funções dos botões de navegação é interessante mas eu não saberia como implementá-la.
    Não sei se ao chamares a função e esta testar a ".AbsolutePosition" se ela vai estar utilizando o recordset do form de onde foi executado o call.
    Sugiro que faças alguns testes. Também podes criar um form ou módulo com essa codificação montada e sempre que fores criar um novo form copiar esse conjunto de códigos pra dentro do form.

    Abraço.

    Daniel Robinson
    avatar
    WEBE
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 30
    Registrado : 31/01/2011

    [Resolvido]Navegação no Formulario via modulo VBA Empty Obrigado

    Mensagem  WEBE 4/1/2014, 00:34

    Obrigado pelo interesse em ajudar. Eu insisto nesta questão, pq além do Aprendizado, tenho um projeto, aqui que em alguns formulários, junto com os botões de navegação de registro terão outros códigos, e para evitar que se misturem e fiquem muito extensos, gostaria deste módulo. Saberia portanto, se há algum erro no código acima, "Select Case", independente dos comando de navegação, deveria funcionar. Mesmo porque nos testes acima tem apenas umas "MsgBox" certo? E as mesmas não estão respeitando as condições...

    Grato.
    DFROBINSON
    DFROBINSON
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 21/04/2012

    [Resolvido]Navegação no Formulario via modulo VBA Empty Select Case

    Mensagem  DFROBINSON 4/1/2014, 00:57

    Nunca utilizei esse tipo de código com "Select Case" mas examinando-o suspeito que possa haver erro de sintaxe:

    Experimente trocar "= Cliked" por "= Clicked"  (incluindo a letra "c" antes da letra "k").
    No fragmento "Case btnAnterior" parece estar faltando "= Clicked"

    Será que pode ser isso ?

    Abraço

    Daniel R.
    avatar
    WEBE
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 30
    Registrado : 31/01/2011

    [Resolvido]Navegação no Formulario via modulo VBA Empty Obrigado

    Mensagem  WEBE 4/1/2014, 01:39

    Obrigado pelas observações, mas conferindo aqui, no meu código estes erros não estão presentes. Penso que foi ao digitá-los aqui no fórum que cometi estes erros de digitação, uma vez que quando postei os mesmos, eu não pude apenas copiá-los, pois não estava em meu PC onde está meu bd.

    Valeu.
    scandinavo
    scandinavo
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1049
    Registrado : 11/11/2009

    [Resolvido]Navegação no Formulario via modulo VBA Empty Re: [Resolvido]Navegação no Formulario via modulo VBA

    Mensagem  scandinavo 15/1/2014, 21:22

    Acho que é isto que você quer.

    Não é de minha autoria, mas o todo conhecimento deve ser compartilhado.



    Boa sorte
    avatar
    WEBE
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 30
    Registrado : 31/01/2011

    [Resolvido]Navegação no Formulario via modulo VBA Empty Muuito Obrigado

    Mensagem  WEBE 16/1/2014, 12:04

    É exatamente isto que procurava. 100%. Muito obrigado Scandinavo. Créditos a você nos bancos onde usarei e infelizmente não sabemos o outro contribuinte. Mas valeu mesmo.
    Obrigado todos que tentaram ajudar.
     cheers
    scandinavo
    scandinavo
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1049
    Registrado : 11/11/2009

    [Resolvido]Navegação no Formulario via modulo VBA Empty Re: [Resolvido]Navegação no Formulario via modulo VBA

    Mensagem  scandinavo 16/1/2014, 22:52

    è isso ai e valeu pelo retorno



    Boa sorte
    Uilson Brasil
    Uilson Brasil
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1039
    Registrado : 23/04/2013

    [Resolvido]Navegação no Formulario via modulo VBA Empty Re: [Resolvido]Navegação no Formulario via modulo VBA

    Mensagem  Uilson Brasil 17/1/2014, 15:10

    Webe,

    Faltou só o resolvido.


    Abraços,


    .................................................................................
    ::: Uilson Brasil
    ::: Design in Microsoft Access
    pcnet
    pcnet
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 302
    Registrado : 16/12/2015

    [Resolvido]Navegação no Formulario via modulo VBA Empty Re: Navegação no Formulario via modulo VBA

    Mensagem  pcnet 17/3/2016, 13:23

    Boa tarde,

    Seria possível disponibilizar o módulo VBA?
    Muito obrigado!

    Cumprimentos
    deyvsonaguiar
    deyvsonaguiar
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 27/09/2015

    [Resolvido]Navegação no Formulario via modulo VBA Empty Como implementar com DAO?

    Mensagem  deyvsonaguiar 6/11/2016, 00:00

    Tentei o código acima e não consegui implementar chamando os controles desacoplados com DAO. Deu esta mensagem de erro:

    erro em tempo de execução '91': a variável do objeto ou a variável do bloco 'with' não foi definida
    jeanrocha
    jeanrocha
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 13/08/2013

    [Resolvido]Navegação no Formulario via modulo VBA Empty Re: Navegação com VBA

    Mensagem  jeanrocha 4/3/2017, 00:29

    Recentemente tive de retirar os controles do formulário e tive de implementar um  módulo com os botões de navegação assim como habilitar e desabilitar as edições, minha questão foi que quase todos os comando funcionaram apenas o botão anterior no módulo não Funcionou, fiz alguns testes e a melhor forma que ficou foi:

    No Módulo ficou assim:

    Function ExcluirBtn(argFrm As Form)
    On Error GoTo fim                                   'Caso não tenha dados não exibe mensagem de erro
    DoCmd.RunCommand acCmdDeleteRecord   'Exclui o registro
    fim:
    End Function

    Function PrimeiroBtn(argFrm As Form)    
    On Error GoTo fim                                 'caso já esteja no primeiro não exibe a mensagem de erro
    DoCmd.GoToRecord , , acFirst
    fim:
    End Function

    Function AnteriorBtn(argFrm As Form)  'Não funcionou, acredito ser na terceira linha o problema
    On Error GoTo fim
    If Form.CurrentRecord = 1 Then          'se posição do registro = 1
    DoCmd.GoToRecord , , acFirst             'mantem ponteiro no primeiro registro
    Else
    DoCmd.GoToRecord , , acPrevious       'retornar posição até chegar o 1º registro
    End If
    fim:
    End Function

    Function ProximoBtn(argFrm As Form)
    On Error GoTo fim
    If Not IsNull("") Then                 'se registro não for vazio...
    DoCmd.GoToRecord , , acNext      'mover para proximo registro…
    Else
    DoCmd.GoToRecord , , acLast      'permanece no ultimo registro.
    End If
    fim:
    End Function

    Function UltimoBtn(argFrm As Form)
    On Error GoTo fim                    ' se já estiver no último não exibe mensagem de erro e permanece no último.
    DoCmd.GoToRecord , , acLast     'move ponteiro para ultimo registro
    fim:
    End Function

    Os Botões dos Forms do DB chamam a função correspondente.
    Exemplo, no evento ao clicar do botão excluir ficou assim:

    Private Sub btnExcluir_Click()
    Call ExcluirBtn(Me)
    Me.Refresh
    End Sub

    No Botão anterior está:

    Private Sub btnAnterior_Click()
    Call AnteriorBtn(Me)
    Me.Refresh
    End Sub


    Apenas o Botão anterior não funcionou, como ainda não consegui resolver e sempre vejo  que vocês são muito atentos a estas questões eu agradeceria muito a ajuda.

    Gostaria de Elogiar especialmente o tópico aqui do site que desabilita todos os campos editáveis do Form em um módulo, e demais funções, o cara que fez arrasou e me ajudou muito, este módulo é uma adaptação dele.

    Desde já agradeço aos que se empenharam.
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3217
    Registrado : 13/12/2016

    [Resolvido]Navegação no Formulario via modulo VBA Empty Re: [Resolvido]Navegação no Formulario via modulo VBA

    Mensagem  Alexandre Fim 4/3/2017, 02:07

    Webe boa noite,

    Na maioria dos sistemas atuais de mercado (SAP, TOTVS, Mastersaf e etc) não utilizam ferramenta de navegação.
    O que eu sugiro é criar os principais botões de comando:

    - Sair
    - Novo Registro
    - Salvar
    - Alterar
    - Excluir
    - Cancelar (ou Desfazer)
    - Pesquisar

    No botão "Pesquisar", faz a chamada para um formulário de Pesquisa (genérico) de dados pertinente ao cadastro em que estiver fazendo no momento.

    Os botões de navegação seria útil em telas de cadastro com poucos registros, mas, imagina uma tela de Cadastro de Produtos com mais de 10.000 registros? Se torna inviável a navegação de registro para fazer a busca do produto desejado.

    Sugiro ainda que você se preocupe mais em manter a qualidade da informação e criando controles e validações, para que o usuário final não digite "qualquer coisa".

    Espero ter ajudado.

    Abraço

    alecardoso gosta desta mensagem

    jeanrocha
    jeanrocha
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 13/08/2013

    [Resolvido]Navegação no Formulario via modulo VBA Empty Re: [Resolvido]Navegação no Formulario via modulo VBA

    Mensagem  jeanrocha 27/11/2017, 17:28

    Outra opção é ativar e desativar os próprios comandos do Formulário access
    No meu caso funcionou da seguinte forma:

    Código para o botão salvar e ao abrir o formulário

    Código:

    Function FormSalvo(argFrm As Form)            '  Para o botão salvar
        Form.ControlBox = False                          ' Desativa a caixa de controle (não funcionou comigo mas deixei)
        Form.RecordSelectors = False                   ' Desabilita o seletor de registros
        Form.NavigationButtons = True                 ' Desabilita a navegação de registros
        Form.ScrollBars = False                           ' Desabilita as barras de rolagem

        Call DesBloqueioBtn(Me)                          'Habilita todos os botões
        Call BloqueioTxt(Me)                                'Bloqueia todos os campos editáveis.
        Me.btnSalvar.Enabled = False                   ' Desabilita apenas o salvar
    End Function

    Código para o editar e novo registro

    Código:

    Function FormEditavel(argFrm As Form)              ' Para o botão editar e novo
        Form.ControlBox = False                               ' Desativa a caixa de controle
        Form.RecordSelectors = False                        ' Desabilita o seletor de registros
        Form.NavigationButtons = False                    ' Desabilita a navegação de registros
        Form.ScrollBars = False                                ' Desabilita as barras de rolagem

        Call BloqueioBtn(Me)                                     ' Bloqueia botões
        Call DesBloqueioTxt(Me)                                ' Desbloqueia campos editáveis
        Me.btnSalvar.Enabled = True                          ' Habilita apenas o botão salvar
        Me.Cod.Enabled = False                                 ' Desabilita o campo código
                  
    End Function

    Módulo com o bloqueio e desbloqueio de botões e campos editáveis, a minha modificação foi separar o bloqueio dos campos editáveis dos botões para se adequar as minha necessidades.

    Código:

    Function BloqueioBtn(argFrm As Form)
            
        Dim ctl As Control
          
        For Each ctl In argFrm.Controls
            With ctl
                Select Case .ControlType
                                      
                          
                    'Deixar inativo todos os botões de comando
                    Case acCommandButton
                            .Enabled = False
                    
                End Select
            End With
        Next ctl
    End Function

    Function DesBloqueioBtn(argFrm As Form)
            
        Dim ctl As Control
          
        For Each ctl In argFrm.Controls
            With ctl
                Select Case .ControlType
                      
                    'Deixar inativo todos os botões de comando
                    Case acCommandButton
                            .Enabled = True

                End Select
            End With
        Next ctl
    End Function

    Function BloqueioTxt(argFrm As Form)
            
        Dim ctl As Control
          
        For Each ctl In argFrm.Controls
            With ctl
                Select Case .ControlType
                                      
                    'Bloquear todas as caixas de texto
                    Case acTextBox
                            .Enabled = False
                    
                    'Bloquear todas as caixas de combinação
                    Case acComboBox
                            .Enabled = False
                            
                    'Bloquear todas as caixas de seleção
                    Case acCheckBox
                            .Enabled = False
                            
                       'Deixar inativo todos as ListBox
                     Case acListBox
                            .Enabled = False
                          
                End Select
            End With
        Next ctl
    End Function

    Function DesBloqueioTxt(argFrm As Form)
            
        Dim ctl As Control
          
        For Each ctl In argFrm.Controls
            With ctl
                Select Case .ControlType
                                      
                    'Bloquear todas as caixas de texto
                    Case acTextBox
                            .Enabled = True
                    
                    'Bloquear todas as caixas de combinação
                    Case acComboBox
                            .Enabled = True
                            
                    'Bloquear todas as caixas de seleção
                    Case acCheckBox
                            .Enabled = True
                            
                       'Deixar inativo todos as ListBox
                     Case acListBox
                            .Enabled = True
                          
                End Select
            End With
        Next ctl
    End Function

    Agradeço novamente ao fórum e espero que seja útil este código.

    alecardoso gosta desta mensagem


    Conteúdo patrocinado


    [Resolvido]Navegação no Formulario via modulo VBA Empty Re: [Resolvido]Navegação no Formulario via modulo VBA

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 27/4/2024, 00:44