none
Condição If RRS feed

  • Pergunta

  • Tenho Duas combos: Uma que se refere (mes) e uma Que se refere (ano) gostaria que se o mes for outubro ou novembro ou dezembro ou janeiro e o ano for (2013) ou (2014) que uma outra textbox ou maskedbox se preenche como em dias ou em atrazo.

    Eis o codigo que não esta dando certo:

    Private Sub Combo1_Change()

    If Combo1.Text = ("Outubro" Or "Novembro" Or "Dezembro" Or "Janeiro") And Combo2.Text = ("2013" Or "2014") Then

    MaskEdBox6.Text = "Em dias"

    Else

    MaskEdBox6.Text = "Em atrazo"

    End If

    End Sub


    Desde já agradeço a todos.

    sexta-feira, 10 de janeiro de 2014 17:49

Todas as Respostas

  • Olá Altair,

    tente fazer  a comparação separada. Ex:

    If Combo1.Text = "Outubro" Or _
    Combo1.Text ="Novembro" Or _
    Combo1.Text ="Dezembro" Or _
    Combo1.Text ="Janeiro"
    And Combo2.Text = "2013" Or _
    Combo2.Text = "2014" Then

    Wennder

    sexta-feira, 10 de janeiro de 2014 18:27
  • Obrigado Wennder! Me ajudou muito! mas ainda tenho um problema dentro deste projeto: Os meses de outubro, novembro, dezembro e janeiro dos outros anos tambem estao como em dias Qual seria o problema? Mas desde ja valeu mesmo amigo! 
    sexta-feira, 10 de janeiro de 2014 18:56
  • Altair, sugiro você adicionar os meses e anos em um lista e verificar se existe na lista. A vantagem da lista é que você pode carregar de um banco ou adicionar dinamicamente de outro lugar.

    Segue o exemplo:

        'Adicionar o mês na lista
        Dim listaMeses As New List(Of String)
        listaMeses.Add("Outubro")
        listaMeses.Add("Novembro")
        'Adiciona o ano na lista
        Dim listaAnos As New List(Of String)
        listaAnos.Add("2013")
        listaAnos.Add("2014")
    
        If listaMeses.Contains(Combo1.Text) AndAlso listaAnos.Contains(Combo2.Text) Then
          MessageBox.Show("Em dia.")
        Else
          MessageBox.Show("Em atraso.")
        End If


    Bruno Ferreira de Souza
    MVP - Microsoft Valuable Professional
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    www.maestrodotnet.com.br
    @BrunoMaestro

    sábado, 11 de janeiro de 2014 04:23
  • Ola,

    Possivelmente alguma comparação errada que você esta fazendo, poste seu código e fale como tem que ser o retorno desse código, a resposta do Bruno está fazendo o que eu te disse de uma forma mais profissional, de uma olhada.

    Wennder

    sábado, 11 de janeiro de 2014 05:24
  • Muito obrigado Bruno e Wender! Vou testar na Segunda feira la no meu trabalho! Muito grato mesmo!
    sábado, 11 de janeiro de 2014 16:07
  • Não entendi bem Bruno Estou montando em casa mesmo este exemplo e não ta aceitando, onde entra es codigo? "Dim listaMese as New List(of string)? em algum modulo? to tentando mas não ta aceitando.
    sábado, 11 de janeiro de 2014 17:06
  • Esse código ficaria no lugar daquele que você postou, mas ai você adapta ele da forma que precisa. Para testar é só colocar o código no evento click e algum botão

    Bruno Ferreira de Souza
    MVP - Microsoft Valuable Professional
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    www.maestrodotnet.com.br
    @BrunoMaestro

    sábado, 11 de janeiro de 2014 17:15
  • Funcionaria no load do form? temos varios socios e gostaria de que ao abrir o form os socios que tivesse pagamento referente aos meses de outubro para ca estivessem como em dias.
    sábado, 11 de janeiro de 2014 17:23
  • Coloca o código dentro de algum método e chame ele de onde achar necessário.

    Bruno Ferreira de Souza
    MVP - Microsoft Valuable Professional
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    www.maestrodotnet.com.br
    @BrunoMaestro

    sábado, 11 de janeiro de 2014 17:29
  • mas esse codigo: Dim listaMeses As New List(Of String) Não esta sendo aceito para que eu prossiga com o codigo, o que ta faltando?

    vou tentar captura a imagem do form para te enviar

    sábado, 11 de janeiro de 2014 17:38
  • Bruno descupe te incomodar, mas é muito urgente pra mim. Aqui estao as imagens do form e codigo:

    Private Sub Form_Load()

    Dim listaMeses As New List(Of String)
        listaMeses.Add ("Outubro")
        listaMeses.Add ("Novembro")
        'Adiciona o ano na lista
        Dim listaAnos As New List(Of String)
        listaAnos.Add ("2013")
        listaAnos.Add ("2014")

        If listaMeses.Contains(Combo1.Text) AndAlso listaAnos.Contains(Combo2.Text) Then
          MessageBox.Show ("Em dia.")
        Else
          MessageBox.Show ("Em atraso.")
        End If

    End Sub

    tentei envia a imagem do form mas nao teve jeito

    sábado, 11 de janeiro de 2014 18:09
  • Se não está reconhecendo, faz import do namespace

    System.Collections.Generic


    Bruno Ferreira de Souza
    MVP - Microsoft Valuable Professional
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    www.maestrodotnet.com.br
    @BrunoMaestro

    sábado, 11 de janeiro de 2014 19:12
  • Estou usando vb6
    sábado, 11 de janeiro de 2014 20:58
  • Esse exemplo que passei é em .net, no vb 6 não irá funcionar.

    Bruno Ferreira de Souza
    MVP - Microsoft Valuable Professional
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    www.maestrodotnet.com.br
    @BrunoMaestro

    sábado, 11 de janeiro de 2014 21:10
  • Poderia me ajudar no vb6?
    sábado, 11 de janeiro de 2014 23:34
  • Este codigo aqui deus certo:

       Private Sub Form_Load()

    If Combo1.Text = "Novembro" Or Combo1.Text = "Dezembro" Or Combo1.Text = "Janeiro" And Combo2.Text = "2013" Or Combo2.Text = "2014" Then


          MsgBox "Socio Em dia."
          Text1.Text = "Em dia"
        Else
          MsgBox "Socio Em atraso."
          Text1.Text = "Em atraso"
        End If

    end sub

    mas só funciona no primeiro registro, por favor gente estou perto de resolver o problema desde ja agradeçoa todos que ja colaboraram !Wennder e Bruno

    domingo, 12 de janeiro de 2014 01:17
  • Olá Altair,

    tente fazer  a comparação separada. Ex:

    If Combo1.Text = "Outubro" Or _
    Combo1.Text ="Novembro" Or _
    Combo1.Text ="Dezembro" Or _
    Combo1.Text ="Janeiro"
    And Combo2.Text = "2013" Or _
    Combo2.Text = "2014" Then

    Wennder

    Altair, o Wennder deu a sugestão que deverá funcionar corretamente, mas faltou uma coisa: os Parênteses.

    Veja, se o IF for construído diretamente (mesmo que você use o underline para quebrar as linhas - para fins de organização) o "AND" ocorre entre "Combo1.Text = "Janeiro"" e "Combo2.Text = "2013"".

    Teria que ser:

    If (Combo1.Text = "Outubro" Or _
        Combo1.Text = "Novembro" Or _
        Combo1.Text = "Dezembro" Or _
        Combo1.Text = "Janeiro") And _
       (Combo2.Text = "2013" Or _
        Combo2.Text = "2014") Then
        MaskEdBox6.Text = "Em dias"
    Else
        MaskEdBox6.Text = "Em atrazo"
    End If

    Agora eu só vou dar uma melhorada neste código (e eu assumo que você está no VB.net (2005-2013) onde pode-se usar "OrElse" ao invés de "Or" apenas e "AndAlso" ao invés de apenas "And". Nesse caso é melhor na performance porque se o "OrElse" ou "AndAlso" encontrar o valor falso ele não perde tempo testando os outros condicionais.

    Ainda, você pode usar o select. Esse vai ficar ainda melhor:

    Select Case Combo1.Text.ToLower()
        Case "outubro", "novembro", "dezembro", "janeiro"
            If combo2.Text = "2013" OrElse combo2.Text = "2014" Then
                MaskEdBox6.Text = "Em Dias"
            Else
                MaskEdBox6.Text = "Em Atrazo"
            End If
        Case Else
            MaskEdBox6.Text = "Em Atrazo"
    End Select

    Vê, assim o Select resolve o teste dos meses (e a função "ToLower()" coloca o texto em minúsculo assim se a combo tiver com liberação para digitação, mesmo que seja digitado com diferente do padrão pelo usuário você terá sempre uma comparação positiva.

    Outra forma de você testar é não olhar o texto, mas a propriedade "SelectedIndex" da combo box, e usar o mesmo raciocínio do Select Case, comparando com o índice da opção desejada na lista (assim fica ainda melhor porque se você alterar este texto - disponibilizando o programa em vários idiomas, por exemplo - você sempre vai ter uma mesma propriedade a comparar.

    Ficaria assim (supondo que na combo tenha de "Janeiro" a "Dezembro" em ordem):

    Select Case Combo1.SelectedIndex
        Case 9, 10, 11, 0 'Porque o índice começa em 0 para Janeiro
            If combo2.Text = "2013" OrElse combo2.Text = "2014" Then
                MaskEdBox6.Text = "Em Dias"
            Else
                MaskEdBox6.Text = "Em Atrazo"
            End If
        Case Else
            MaskEdBox6.Text = "Em Atrazo"
    End Select

    Espero ter ajudado.


    • Editado SammuelMiranda terça-feira, 21 de janeiro de 2014 12:35 Estilo dos códigos
    • Sugerido como Resposta SammuelMiranda terça-feira, 21 de janeiro de 2014 13:04
    terça-feira, 21 de janeiro de 2014 12:32
  • Olá,

    Muito mais elegante o código do Sammuel rs.

    Wennder

    terça-feira, 21 de janeiro de 2014 12:37
  • Obrigado, quando eu preciso de ajuda eu procuro nos fóruns, nada mais justo do que eu tentar ajudar quem pergunta também :)
    terça-feira, 21 de janeiro de 2014 13:08