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

    [Resolvido]Função para vários formulários.

    Compartilhe

    Jonatan
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 227
    Registrado : 03/05/2012

    [Resolvido]Função para vários formulários.

    Mensagem  Jonatan em Qui 17 Jul 2014, 20:49

    Olá, adaptei o seguinte exemplo do amigo JPaulo:

    Public Function ValidaPreenchimento() As Boolean
    'By JPaulo ® Maximo Access
    Dim ctl As Control
    For Each ctl In Forms(Fomulário_Usuários).Controls

    If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then ' Altera: incluso: "Or ctl.ControlType = acComboBox"
    If ctl.Tag = 1 Then
    If IsNull(ctl.Value) Then
    MsgBox "O Campo '" & ctl.StatusBarText & "' não pode ficar em branco"
    ctl.SetFocus
    DoCmd.CancelEvent
    Exit Function
    End If
    End If
    End If
    Next
    End Function


    Preciso que essa função esteja acessível a todos os forms.

    Grato

    Jonatan
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 227
    Registrado : 03/05/2012

    Re: [Resolvido]Função para vários formulários.

    Mensagem  Jonatan em Sex 18 Jul 2014, 12:33

    Alguém faz alguma ideia?
    avatar
    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2807
    Registrado : 29/06/2012

    Re: [Resolvido]Função para vários formulários.

    Mensagem  Noobezinho em Sex 18 Jul 2014, 13:52

    Olá Jonatan

    Veja se isso te ajuda:


    Código:


    Function TestaCampos() As Boolean
        Dim I As Integer
        Dim strMsg As String
        Dim strTitle As String
       TestaCampos = True

        'inicia o loop pelos controle do formulário
        'a contagem começa em zero (0) até  x-1
        For I = 0 To Screen.ActiveForm.Count - 1
            'se o controle tem a marca(tag) = t então
            If Screen.ActiveForm(I).Tag = "t" Then
                'se o campo está vazio então
                If IsNull(Screen.ActiveForm(I)) Or Screen.ActiveForm(I) = "" Then
                    'emite mensagem acompanhado do nome do controle
                    strMsg = "É obrigatório o preenchimento do campo '" & Screen.ActiveForm(I).Name & "'!"
                    strTitle = "Campo em Branco"
                    MsgBox strMsg, 48, strTitle
                    'move o foco para o controle
                   Screen.ActiveForm(I).SetFocus
                    TestaCampos = False
                  
                    Exit Function
                End If
            End If
        Next I


    End Function



    Abraços

    Noob


    .................................................................................
    Noobezinho

    * A solução funcionou?  [Você precisa estar registrado e conectado para ver esta imagem.] 
    Agradeça e feche o tópico clicando no botão Resolvido
    Se não sabe como, veja [Você precisa estar registrado e conectado para ver este link.].

    Como anexar imagem no teu post do fórum : [Você precisa estar registrado e conectado para ver este link.]

    * Criar arquivos.zip com o Winrar - veja [Você precisa estar registrado e conectado para ver este link.].

    Atualmente estou verificando se quem está pedindo ajuda, ajudamos e não retornou.
    Se a pessoa em questão não deu retorno, não tentarei ajudar novamente .
    avatar
    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2807
    Registrado : 29/06/2012

    Re: [Resolvido]Função para vários formulários.

    Mensagem  Noobezinho em Sex 18 Jul 2014, 14:02

    ...


    Última edição por Noobezinho em Sex 18 Jul 2014, 14:32, editado 1 vez(es)


    .................................................................................
    Noobezinho

    * A solução funcionou?  [Você precisa estar registrado e conectado para ver esta imagem.] 
    Agradeça e feche o tópico clicando no botão Resolvido
    Se não sabe como, veja [Você precisa estar registrado e conectado para ver este link.].

    Como anexar imagem no teu post do fórum : [Você precisa estar registrado e conectado para ver este link.]

    * Criar arquivos.zip com o Winrar - veja [Você precisa estar registrado e conectado para ver este link.].

    Atualmente estou verificando se quem está pedindo ajuda, ajudamos e não retornou.
    Se a pessoa em questão não deu retorno, não tentarei ajudar novamente .

    Jonatan
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 227
    Registrado : 03/05/2012

    Re: [Resolvido]Função para vários formulários.

    Mensagem  Jonatan em Sex 18 Jul 2014, 14:28

    Noobezinho, não teria como fazer com a função que passei? Deixar acessível a todos os forms?

    E outra coisa que notei:

    A função do JPaulo funcionou pra mim, mas abro o form de usuários através de uma macro, depois disso a função não funciona mais. Sabe o porquê?

    Talvez seja por isso: For Each ctl In Forms(Fomulário_Usuários).Controls (as vezes depuro e da errro, mas em outras vezes não)

    O código original era: For Each ctl In Me.Controls (erro: Uso de Me inválido)

    Abraços

    avatar
    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2807
    Registrado : 29/06/2012

    Re: [Resolvido]Função para vários formulários.

    Mensagem  Noobezinho em Sex 18 Jul 2014, 14:42

    Aquela é igual a essa.

    A diferença é porque a função é para todos os formulários.

    Ela funciona no formulário que está ativo no momento.
    A função deve ser chamada através de um botão fechar do formulário, ou no evento ao fechar de um formulário, melhor
    nesse ultimo.
    E se não sabe ainda, tem que colocar a letra t na propriedade Marca na folha de propriedades
    de cada controle que deseja forçar o preenchimento.

    O fato de chamar o form por uma macro não interfere no código

    Isso depende de em qual evento está executando o código.

    Lembre-se esse código é o ultimo ser executando quando fechar o formulário ou mudar de registro.

    Noob





    .................................................................................
    Noobezinho

    * A solução funcionou?  [Você precisa estar registrado e conectado para ver esta imagem.] 
    Agradeça e feche o tópico clicando no botão Resolvido
    Se não sabe como, veja [Você precisa estar registrado e conectado para ver este link.].

    Como anexar imagem no teu post do fórum : [Você precisa estar registrado e conectado para ver este link.]

    * Criar arquivos.zip com o Winrar - veja [Você precisa estar registrado e conectado para ver este link.].

    Atualmente estou verificando se quem está pedindo ajuda, ajudamos e não retornou.
    Se a pessoa em questão não deu retorno, não tentarei ajudar novamente .

    Jonatan
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 227
    Registrado : 03/05/2012

    Re: [Resolvido]Função para vários formulários.

    Mensagem  Jonatan em Sex 18 Jul 2014, 14:50

    Quando uso For Each ctl In Forms(Fomulário_Usuários).Controls, ocorre isso:

    O número que você utilizou para se referir ao formulário é inválido.

    Sabe o porquê?
    avatar
    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2807
    Registrado : 29/06/2012

    Re: [Resolvido]Função para vários formulários.

    Mensagem  Noobezinho em Sex 18 Jul 2014, 15:11

    Jonatan


    Ai está o código modificado

    Código:

    Public Function ValidaPreenchimento() As Boolean
    'By JPaulo ® Maximo Access
    'Alterado por Noob
    Dim ctl As Control
    For Each ctl In Screen.ActiveForm.Controls

        If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then ' Altera: incluso: "Or ctl.ControlType = acComboBox"
          If ctl.Tag = 1 Then
              If IsNull(ctl.Value) Then
                MsgBox "O Campo '" & ctl.Name & "' não pode ficar em branco"
                ctl.SetFocus
                ValidaPreenchimento = False
                DoCmd.CancelEvent
                Exit Function
              End If
          End If
        End If
    Next
    End Function


    Abraços

    Noob


    .................................................................................
    Noobezinho

    * A solução funcionou?  [Você precisa estar registrado e conectado para ver esta imagem.] 
    Agradeça e feche o tópico clicando no botão Resolvido
    Se não sabe como, veja [Você precisa estar registrado e conectado para ver este link.].

    Como anexar imagem no teu post do fórum : [Você precisa estar registrado e conectado para ver este link.]

    * Criar arquivos.zip com o Winrar - veja [Você precisa estar registrado e conectado para ver este link.].

    Atualmente estou verificando se quem está pedindo ajuda, ajudamos e não retornou.
    Se a pessoa em questão não deu retorno, não tentarei ajudar novamente .

    Jonatan
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 227
    Registrado : 03/05/2012

    Re: [Resolvido]Função para vários formulários.

    Mensagem  Jonatan em Sex 18 Jul 2014, 15:33

    Noob, perfeito. Funcionou direitinho.

    Só para constar, o primeiro código que passou também funcionou perfeitamente.


    Para encerrar gostaria de tirar umas dúvidas se possível:

    1. Quando depuro aparece: Você inseriu uma expressão que requer que um formulário seja a janela ativa.

    2. Pra que serve esse ValidaPreenchimento = False?

    3. Abro esse form a partir de um form principal com uma macro, depois a função não funciona. Mas com o seu código funcionou.

    Grato pela ajuda.
    avatar
    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2807
    Registrado : 29/06/2012

    Re: [Resolvido]Função para vários formulários.

    Mensagem  Noobezinho em Sex 18 Jul 2014, 16:00

    Bem, vejo que sabe usar a janela imediata.  Wink 

    1-A nome da propriedade ActiveForm já diz tudo.

    O formulário tem que estar ativo ou ela dará erro.

    Como você deve ter colocado o ponto de interrupção antes ou na linha dessa propriedade , ela vai reclamar.
    Procure colocar o ponto de interrupção logo após essa linha e poderá depurar o código normalmente.

    2) Veja que a função retorna um boolean (true/false)
    Eu chamo a função assim:
    If Not ValidaPreenchimento Then 'Se a função retornou falso
    Exit Sub
    End If

    3) Não posso dizer nada sobre isso sem analisar a coisa toda. Mas que bom que funfou com o código que enviei  Razz   Wink 

    Valeu o retorno

    Boa sorte

    Noob



    .................................................................................
    Noobezinho

    * A solução funcionou?  [Você precisa estar registrado e conectado para ver esta imagem.] 
    Agradeça e feche o tópico clicando no botão Resolvido
    Se não sabe como, veja [Você precisa estar registrado e conectado para ver este link.].

    Como anexar imagem no teu post do fórum : [Você precisa estar registrado e conectado para ver este link.]

    * Criar arquivos.zip com o Winrar - veja [Você precisa estar registrado e conectado para ver este link.].

    Atualmente estou verificando se quem está pedindo ajuda, ajudamos e não retornou.
    Se a pessoa em questão não deu retorno, não tentarei ajudar novamente .

    Jonatan
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 227
    Registrado : 03/05/2012

    Re: [Resolvido]Função para vários formulários.

    Mensagem  Jonatan em Sex 18 Jul 2014, 19:42

    Obrigado.

    Vou anexar um exemplo, caso queira analisar dê retorno, por favor.


    Grato
    Anexos
    Database1.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (40 Kb) Baixado 7 vez(es)

      Data/hora atual: Sab 16 Dez 2017, 20:47