MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    Navegação no Formulario via modulo VBA

    Compartilhe

    WEBE
    Novato
    Novato

    Respeito às Regras 100%

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

    Navegação no Formulario via modulo VBA

    Mensagem  WEBE em Seg 30 Dez 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?
    avatar
    Uilson Brasil
    VIP
    VIP

    Respeito às Regras 100%

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

    Re: Navegação no Formulario via modulo VBA

    Mensagem  Uilson Brasil em Seg 30 Dez 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

    WEBE
    Novato
    Novato

    Respeito às Regras 100%

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

    Ok, obrigado.

    Mensagem  WEBE em Seg 30 Dez 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.
    avatar
    Uilson Brasil
    VIP
    VIP

    Respeito às Regras 100%

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

    Re: Navegação no Formulario via modulo VBA

    Mensagem  Uilson Brasil em Seg 30 Dez 2013, 19:05

    Webe,

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


    Abraços,


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

    Respeito às Regras 100%

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

    DoCmd.GoToRecord

    Mensagem  DFROBINSON em Seg 30 Dez 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.
    avatar
    DFROBINSON
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

    Correção

    Mensagem  DFROBINSON em Ter 31 Dez 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

    WEBE
    Novato
    Novato

    Respeito às Regras 100%

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

    Re: Navegação no Formulario via modulo VBA

    Mensagem  WEBE em Ter 31 Dez 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 ?

    WEBE
    Novato
    Novato

    Respeito às Regras 100%

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

    If ou select case

    Mensagem  WEBE em Qui 02 Jan 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 Sab 04 Jan 2014, 01:42, editado 3 vez(es)
    avatar
    DFROBINSON
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

    Botões de Navegação

    Mensagem  DFROBINSON em Sab 04 Jan 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

    WEBE
    Novato
    Novato

    Respeito às Regras 100%

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

    Obrigado

    Mensagem  WEBE em Sab 04 Jan 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.
    avatar
    DFROBINSON
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

    Select Case

    Mensagem  DFROBINSON em Sab 04 Jan 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.

    WEBE
    Novato
    Novato

    Respeito às Regras 100%

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

    Obrigado

    Mensagem  WEBE em Sab 04 Jan 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.
    avatar
    scandinavo
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: Navegação no Formulario via modulo VBA

    Mensagem  scandinavo em Qua 15 Jan 2014, 21:22

    Acho que é isto que você quer.

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



    Boa sorte

    WEBE
    Novato
    Novato

    Respeito às Regras 100%

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

    Muuito Obrigado

    Mensagem  WEBE em Qui 16 Jan 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
    avatar
    scandinavo
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: Navegação no Formulario via modulo VBA

    Mensagem  scandinavo em Qui 16 Jan 2014, 22:52

    è isso ai e valeu pelo retorno



    Boa sorte
    avatar
    Uilson Brasil
    VIP
    VIP

    Respeito às Regras 100%

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

    Re: Navegação no Formulario via modulo VBA

    Mensagem  Uilson Brasil em Sex 17 Jan 2014, 15:10

    Webe,

    Faltou só o resolvido.


    Abraços,


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

    Respeito às Regras 100%

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

    Re: Navegação no Formulario via modulo VBA

    Mensagem  pcnet em Qui 17 Mar 2016, 13:23

    Boa tarde,

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

    Cumprimentos
    avatar
    deyvsonaguiar
    Novato
    Novato

    Respeito às Regras 100%

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

    Como implementar com DAO?

    Mensagem  deyvsonaguiar em Dom 06 Nov 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
    avatar
    jeanrocha
    Novato
    Novato

    Respeito às Regras 100%

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

    Re: Navegação com VBA

    Mensagem  jeanrocha em Sab 04 Mar 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.
    avatar
    Alexandre Fim
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

    Re: Navegação no Formulario via modulo VBA

    Mensagem  Alexandre Fim em Sab 04 Mar 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

      Data/hora atual: Ter 25 Jul 2017, 05:30