MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

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 : 207
    Registrado : 03/05/2012

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

    Mensagem  Jonatan em Qui 17 Jul 2014, 12: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 : 207
    Registrado : 03/05/2012

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

    Mensagem  Jonatan em Sex 18 Jul 2014, 04:33

    Alguém faz alguma ideia?

    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  Noobezinho em Sex 18 Jul 2014, 05: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 .

    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  Noobezinho em Sex 18 Jul 2014, 06:02

    ...


    Última edição por Noobezinho em Sex 18 Jul 2014, 06: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 : 207
    Registrado : 03/05/2012

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

    Mensagem  Jonatan em Sex 18 Jul 2014, 06: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


    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  Noobezinho em Sex 18 Jul 2014, 06: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 : 207
    Registrado : 03/05/2012

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

    Mensagem  Jonatan em Sex 18 Jul 2014, 06: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ê?

    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  Noobezinho em Sex 18 Jul 2014, 07: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 : 207
    Registrado : 03/05/2012

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

    Mensagem  Jonatan em Sex 18 Jul 2014, 07: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.

    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  Noobezinho em Sex 18 Jul 2014, 08: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 : 207
    Registrado : 03/05/2012

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

    Mensagem  Jonatan em Sex 18 Jul 2014, 11: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 03 Dez 2016, 07:37