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

    Função IF Composta

    Compartilhe

    midris
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 9
    Registrado : 18/11/2013

    Função IF Composta

    Mensagem  midris em Qua 27 Jan 2016, 12:32

    Bom dia! Preciso de outra ajuda

    Como posso construir uma função nas seguintes especificações abaixo:

    SE o funcionário for FREE e a CONTA CORRENTE for = TAXI , a aba VISITA deverá ser desabilitada, SALÁRIO desabilitada, OUTROS habilidada e DATA DE VENCIMENTO desabilitada

    SE o funcionário for FREE e a CONTA CORRENTE for = VISITA, a aba VISITA deverá ser habilidada, SALÁRIO desabilitada, OUTROS desabilitada e DATA DE VENCIMENTO desabilitada ... e assim tenho várias condições, onde imagino que só colocaria uma abaixo da outra...

    Caso fosse somente uma condição eu consegui, segue abaixo:

    If Me.TIPO_FUNC.Value = "FREE" Then
    Me.VISITA.Visible = True
    Me.SALÁRIO.Visible = False
    Me.OUTRO.Visible = True
    Me.DATA_DE_VENCIMENTO.Visible = False
    End If

    preciso acoplar a outra condição nesta situação...

    Obrigado!

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 3206
    Registrado : 15/03/2013

    Re: Função IF Composta

    Mensagem  ahteixeira em Qua 27 Jan 2016, 12:43

    Olá Michele Silva, será algo conforme abaixo, teste assim:

    Código:
    If Me.TIPO_FUNC.Value = "FREE" And Me.CONTA_CORRENTE.Value = "TAXI" Then
        Me.VISITA.Visible = False
        Me.SALÁRIO.Visible = False
        Me.OUTRO.Visible = True
        Me.DATA_DE_VENCIMENTO.Visible = False
    ElseIf Me.TIPO_FUNC.Value = "FREE" And Me.CONTA_CORRENTE.Value = "VISITA" Then
        Me.VISITA.Visible = True
        Me.SALÁRIO.Visible = False
        Me.OUTRO.Visible = False
        Me.DATA_DE_VENCIMENTO.Visible = False
    End If


    Abraço

    midris
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 9
    Registrado : 18/11/2013

    Função IF Composta

    Mensagem  midris em Qua 27 Jan 2016, 17:12

    Olá!
    Fiz a tentativa, porém a Aba permanece constante VISITA... coloquei anexo o banco para verificação..

    Perceberá que em conta corrente tenho diversas opções que determinam qual aba vai estar ativa ou não.

    O formulário para verificação é PAGAMENTOS_V1.

    Muito Obrigado pela atenção!

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 3206
    Registrado : 15/03/2013

    Re: Função IF Composta

    Mensagem  ahteixeira em Qua 27 Jan 2016, 17:31

    Olá, faltou anexo.
    Abraço

    midris
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 9
    Registrado : 18/11/2013

    Anexo

    Mensagem  midris em Qua 27 Jan 2016, 17:44

    Desculpe... segue
    Anexos
    FINANCEIRO_VFINAL_V2.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (292 Kb) Baixado 16 vez(es)

    midris
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 9
    Registrado : 18/11/2013

    Ajuda!

    Mensagem  midris em Qui 28 Jan 2016, 15:53

    Alguém conseguiu analisar a minha solicitação?

    Obrigado!

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 3206
    Registrado : 15/03/2013

    Re: Função IF Composta

    Mensagem  ahteixeira em Qui 28 Jan 2016, 17:04

    Olá Michele Silva,
    Quando fiz o código desconhecia o nome dos campos, você deveria ajustar.

    No código coloquei CONTA_CORRENTE , mas como podemos ver abaixo tem espaço.
    [Você precisa estar registrado e conectado para ver esta imagem.]


    O valor desse mesmo campo é numerico, o que visualizamos é o da caixa de listagem, para isso altere o código por este e teste:
    Código:
    If Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "TAXI" Then
        Me.VISITA.Visible = False
        Me.SALÁRIO.Visible = False
        Me.OUTRO.Visible = True
        Me.DATA_DE_VENCIMENTO.Visible = False
    ElseIf Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "VISITA" Then
        Me.VISITA.Visible = True
        Me.SALÁRIO.Visible = False
        Me.OUTRO.Visible = False
        Me.DATA_DE_VENCIMENTO.Visible = False
    End If

    Só consegui responder hoje, pois em casa só tenho Access2007.
    Abraço

    midris
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 9
    Registrado : 18/11/2013

    Função IF Composta

    Mensagem  midris em Qui 28 Jan 2016, 18:58

    Olá!
    Muito obrigado pelo retorno, fiz os testes.. porém ele só atualiza após eu sair e voltar ao registro...

    o código está assim:

    Private Sub Form_Current()

    TIPO.Value = TIPO_FUNC.Value

    If Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "" Then
    Me.VISITA.Visible = False
    Me.SALÁRIO.Visible = False
    Me.OUTRO.Visible = False
    Me.DATA_DE_VENCIMENTO.Visible = False
    ElseIf Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "VISITA" Then
    Me.VISITA.Visible = True
    Me.SALÁRIO.Visible = False
    Me.OUTRO.Visible = False
    Me.DATA_DE_VENCIMENTO.Visible = False
    ElseIf Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "TESTE ADMISSIONAL" Then
    Me.VISITA.Visible = False
    Me.SALÁRIO.Visible = False
    Me.OUTRO.Visible = True
    Me.DATA_DE_VENCIMENTO.Visible = False
    ElseIf Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "PASSAGEM" Then
    Me.VISITA.Visible = False
    Me.SALÁRIO.Visible = False
    Me.OUTRO.Visible = True
    Me.DATA_DE_VENCIMENTO.Visible = False
    ElseIf Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "TAXI" Then
    Me.VISITA.Visible = False
    Me.SALÁRIO.Visible = False
    Me.OUTRO.Visible = True
    Me.DATA_DE_VENCIMENTO.Visible = False

    End If



    End Sub

    'Atualiza o campo Tipo na Tabela Pagamentos

    Private Sub Combinação173_AfterUpdate()
    If Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "" Then
    Me.VISITA.Visible = False
    Me.SALÁRIO.Visible = False
    Me.OUTRO.Visible = False
    Me.DATA_DE_VENCIMENTO.Visible = False
    ElseIf Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "VISITA" Then
    Me.VISITA.Visible = True
    Me.SALÁRIO.Visible = False
    Me.OUTRO.Visible = False
    Me.DATA_DE_VENCIMENTO.Visible = False
    ElseIf Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "TESTE ADMISSIONAL" Then
    Me.VISITA.Visible = False
    Me.SALÁRIO.Visible = False
    Me.OUTRO.Visible = True
    Me.DATA_DE_VENCIMENTO.Visible = False
    ElseIf Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "PASSAGEM" Then
    Me.VISITA.Visible = False
    Me.SALÁRIO.Visible = False
    Me.OUTRO.Visible = True
    Me.DATA_DE_VENCIMENTO.Visible = False
    ElseIf Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "TAXI" Then
    Me.VISITA.Visible = False
    Me.SALÁRIO.Visible = False
    Me.OUTRO.Visible = True
    Me.DATA_DE_VENCIMENTO.Visible = False
    End If


    End Sub

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 3206
    Registrado : 15/03/2013

    Re: Função IF Composta

    Mensagem  ahteixeira em Qui 28 Jan 2016, 22:27

    Olá, antes de avançar, vamos analisar o seu código

    If Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "" Then
    Me.VISITA.Visible = False
    Me.SALÁRIO.Visible = False
    Me.OUTRO.Visible = False
    Me.DATA_DE_VENCIMENTO.Visible = False
    ElseIf Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "VISITA" Then
    Me.VISITA.Visible = True
    Me.SALÁRIO.Visible = False
    Me.OUTRO.Visible = False
    Me.DATA_DE_VENCIMENTO.Visible = False
    ElseIf Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "TESTE ADMISSIONAL" Then
    Me.VISITA.Visible = False
    Me.SALÁRIO.Visible = False
    Me.OUTRO.Visible = True
    Me.DATA_DE_VENCIMENTO.Visible = False
    ElseIf Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "PASSAGEM" Then
    Me.VISITA.Visible = False
    Me.SALÁRIO.Visible = False
    Me.OUTRO.Visible = True
    Me.DATA_DE_VENCIMENTO.Visible = False
    ElseIf Me.TIPO_FUNC.Value = "FREE" And Me.[CONTA CORRENTE].Column(1) = "TAXI" Then
    Me.VISITA.Visible = False
    Me.SALÁRIO.Visible = False
    Me.OUTRO.Visible = True
    Me.DATA_DE_VENCIMENTO.Visible = False


    Repare por cores, os campos estão repetidos a fazer a mesma coisa.

    Assim ficaria melhor fazendo exactamente o mesmo, veja:
    Código:
    'verifica se é o tipo FREE
    If Me.TIPO_FUNC.Value = "FREE" Then
        'comuns a todos
        Me.SALÁRIO.Visible = False
        Me.DATA_DE_VENCIMENTO.Visible = False
        
        If Me.[CONTA CORRENTE].Column(1) = "" Then
            Me.VISITA.Visible = False
            Me.OUTRO.Visible = False
        ElseIf Me.[CONTA CORRENTE].Column(1) = "VISITA" Then
            Me.VISITA.Visible = True
            Me.OUTRO.Visible = False
        ElseIf Me.[CONTA CORRENTE].Column(1) = "TESTE ADMISSIONAL" Then
            Me.VISITA.Visible = False
            Me.OUTRO.Visible = True
        ElseIf Me.[CONTA CORRENTE].Column(1) = "PASSAGEM" Then
            Me.VISITA.Visible = False
            Me.OUTRO.Visible = True
        ElseIf Me.[CONTA CORRENTE].Column(1) = "TAXI" Then
            Me.VISITA.Visible = False
            Me.OUTRO.Visible = True
        Else
            'pode ainda colocar aqui as outras instruções
            'caso não seja de nenhum tipo acima ("",VISITA,TESTE...TAXI)
        End If
    End If

    Quanto à mudança, verifique melhor se as condições estão correctas.
    Caso tenha dificuldade teste apenas com um campo.

    Mais uma coisinha, não me leve a mal, mas tente começar a fazer Indentação no código.
    Tal como eu fiz, vai ver que fica mais fácil a leitura.
    Abraço

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 3206
    Registrado : 15/03/2013

    Re: Função IF Composta

    Mensagem  ahteixeira em Qui 28 Jan 2016, 22:58

    Olá de novo,
    A questão de actualizar, pode ser resolvida nos campos envolvidos no evento AfterUpdate.
    Tal como já tem na caixa de combinação com o nome Combinação173 (FAVORECIDO)

    Para não repetir o mesmo código várias vezes criei uma função ActSeparadores (actualizar separadores)
    Assim nos campos envolvidos em que é necessário actualizar os separadores, é só chamar a função no evento AfterUpdate.
    Usando o código para o efeito: Call ActSeparadores

    Reponha no seu projecto pelo código abaixo e teste:

    Código:
    Option Compare Database

    Private Sub Form_Load()
        Me.TIPO_FUNC.SetFocus
    End Sub

    Private Sub Form_Current()
        Call ActSeparadores
    End Sub

    'Atualiza o campo Tipo na Tabela Pagamentos
    Private Sub Combinação173_AfterUpdate()
        Call ActSeparadores
    End Sub


    Private Sub TIPO_FUNC_AfterUpdate()
        Call ActSeparadores
    End Sub

    Private Sub CONTA_CORRENTE_AfterUpdate()
        Call ActSeparadores
        Me.CENTRO_DE_CUSTO.Requery
    End Sub

    Private Sub CONTA_RAZÃO_AfterUpdate()
        Me.ORGANIZAÇÃO.Requery
        Me.ORGANIZAÇÃO.SetFocus
        Me.ORGANIZAÇÃO.Dropdown
    End Sub

    Function ActSeparadores()
        TIPO.Value = TIPO_FUNC.Value
        
        'verifica se é o tipo FREE
        If Me.TIPO_FUNC.Value = "FREE" Then
            'comuns a todos
            Me.SALÁRIO.Visible = False
            Me.DATA_DE_VENCIMENTO.Visible = False
            
            If Me.[CONTA CORRENTE].Column(1) = "" Then
                Me.VISITA.Visible = False
                Me.OUTRO.Visible = False
            ElseIf Me.[CONTA CORRENTE].Column(1) = "VISITA" Then
                Me.VISITA.Visible = True
                Me.OUTRO.Visible = False
            ElseIf Me.[CONTA CORRENTE].Column(1) = "TESTE ADMISSIONAL" Then
                Me.VISITA.Visible = False
                Me.OUTRO.Visible = True
            ElseIf Me.[CONTA CORRENTE].Column(1) = "PASSAGEM" Then
                Me.VISITA.Visible = False
                Me.OUTRO.Visible = True
            ElseIf Me.[CONTA CORRENTE].Column(1) = "TAXI" Then
                Me.VISITA.Visible = False
                Me.OUTRO.Visible = True
            Else
                'pode ainda colocar aqui as outras instruções
                'caso não seja de nenhum tipo acima ("",VISITA,TESTE...TAXI)
            End If
        End If

    End Function

    Abraço

    midris
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 9
    Registrado : 18/11/2013

    Funcão IF Composto

    Mensagem  midris em Seg 01 Fev 2016, 08:50

    Muito obrigado mesmo!! Deu certo o código!

    Caso eu queria que quando eu carrregue formulário não apareça nenhuma aba da guia aberta, eu coloco o IF no form_load??

    Private Sub Form_Load()
    Me.TIPO_FUNC.SetFocus
    End Sub

    Exemplo: Se CONTA CORRENTES estiver vazio, DESABILITE VISITA, SALÁRIO E OUTRO.


    Obrigado!

    Queria agradecer todo apoio que está dando, e parabéns ao site por ter pessoas realmente que estão dispostas a passar seu conhecimento!
    Grata!!
    Michele Idris

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 3206
    Registrado : 15/03/2013

    Re: Função IF Composta

    Mensagem  ahteixeira em Seg 01 Fev 2016, 16:47

    Olá, antes de tudo obrigado pelo retorno.
    Isto é que é ser MaximoAccess.  Wink

    Quanto à questão coloque por defeito Visivel=Não nos separadores:
    VISITA,SALÁRIO e OUTRO,
    [Você precisa estar registrado e conectado para ver esta imagem.]

    Como já tem no actual a chamar a função, deve funcionar
    Código:
    Private Sub Form_Current()
        Call ActSeparadores
    End Sub

    Abraço

      Data/hora atual: Seg 05 Dez 2016, 16:33