none
"If And Then" não funciona RRS feed

  • Pergunta

  • boa noite

    tentei adaptar o codigo abaixo para a planilha, mais nao funciona, mesmo as 2 condicoes sendo verdadeiras.

    Dim lngRowsCount As Long
        For lngRowsCount = Cells(Rows.Count, "C").End(xlUp).Row To 2 Step -1
          If ((Cells(lngRowsCount, "A") = TxtCadastro.Value) And (Cells(lngRowsCount, "B") = TxtNome.Value)) Then
            If Cells(lngRowsCount, "C") = "Admitido" Then
                Cells(lngRowsCount, "C") = "Admitido>"
            End If
           End If
        Next lngRowsCount

    detalhe: usando o "or" o codigo aceiita

    obrigado

    terça-feira, 29 de outubro de 2013 02:47

Respostas

  • boa noite

    fiz antes uma tentativa usando "If ((Cells(lngRowsCount, "A") = TxtCadastro.Value * 1)"  e tambem funcionou.

    Obrigado pela atenção dispensada.

    • Marcado como Resposta JLNunes quarta-feira, 30 de outubro de 2013 22:39
    quarta-feira, 30 de outubro de 2013 22:39

Todas as Respostas

  • Não faz sentido dar certo numa situação e errada em outra. Sugiro que depure seu código.

    Sugiro que você depure o código pressionando a tecla F8, para analisar a execução do código linha a linha.

    Quando a expressão do teste condicional (If) estiver iluminada, selecione o trecho

    Cells(lngRowsCount, "A") = TxtCadastro.Value

    Pressione a tecla Shift+F9. Essa combinação de teclas avalia uma expressão selecionada no VBE em tempo de execução.

    Pelo que diz, essa expressão deverá te fornecer Verdadeiro, certo? Se fornecer Falso, analise o conteúdo do Cells(lngRowsCount, "A") e depois de TxtCadastro.Value e veja se há algo esquisito.

    Se tudo estiver correto, em seguida avalie o trecho abaixo e pressione Shift+F9:

    Cells(lngRowsCount, "B") = TxtNome.Value

    Proceda da mesma forma como explicado no caso anterior, e faça isso também analisando a expressão Cells(lngRowsCount, "C") = "Admitido"

    ---

    Esse seu teste condicional pode ser simplificado para:

      If Cells(lngRowsCount, "A") = TxtCadastro _
      And Cells(lngRowsCount, "B") = TxtNome _
      And Cells(lngRowsCount, "C") = "Admitido" Then
        Cells(lngRowsCount, "C") = "Admitido>"
      End If


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    terça-feira, 29 de outubro de 2013 09:04
    Moderador
  • boa tarde
    segue passo a passo o que acontece com o codigo usando F8 depurador


    ao selecionar Cells(lngRowsCount, "A") = TxtCadastro e pressionar shift+f9 retona:
    Expressão: Cells(lngRowsCount, "A") = TxtCadastro
    Valor:Falso

    ao selecionar Cells(lngRowsCount, "B") = TxtNome e pressionar shift+f9 retona:
    Expressão: Cells(lngRowsCount, "B") = TxtNome
    Valor:Verdadeiro


    Na primeira TxtCadastro

    Ao passar o mouse em Cells retorna:
    Cells(IngRowsCount,"A")=7129 
    obs:sem aspas

    Ao passar o mouse em lngRowsCount retorna:
    lngRowsCount=4

    Ao passar o mouse em TxtCadastro retorna:
    TxtCadastro="7129"

    Na segunda TxtNome

    Ao passar o mouse em Cells retorna:
    Cells(IngRowsCount,"B")="luis"

    Ao passar o mouse em lngRowsCount retorna:
    lngRowsCount=4

    Ao passar o mouse em TxtNome retorna:
    TxtNome="luis"

    Obrigado.


    • Editado JLNunes terça-feira, 29 de outubro de 2013 22:52
    terça-feira, 29 de outubro de 2013 20:36
  • Excelente. Depuração de erros é assim mesmo, no início gastamos um pouco de tempo, mas logo depois com a prática se torna rápido e natural.

    A conclusão que tiramos é que seu teste condicional está falhando na primeira comparação, certo? O VBA está avaliando que 7129 expressado como número (quando avalia a expressão de Cells) é diferente do texto presente na caixa de texto (TextBox). Vamos forçar então os dois dados terem o mesmo valor e tentar executar seu código novamente.

    Troque a expressão avaliada

    Cells(lngRowsCount, "A") = TxtCadastro.Value

    por

    CStr(Cells(lngRowsCount, "A")) = CStr(TxtCadastro.Value)

    A função CStr converte uma expressão em String. Dessa forma, agora estamos comparando String com String.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Sugerido como Resposta Durval Ramos quarta-feira, 30 de outubro de 2013 04:17
    quarta-feira, 30 de outubro de 2013 00:21
    Moderador
  • boa noite

    fiz antes uma tentativa usando "If ((Cells(lngRowsCount, "A") = TxtCadastro.Value * 1)"  e tambem funcionou.

    Obrigado pela atenção dispensada.

    • Marcado como Resposta JLNunes quarta-feira, 30 de outubro de 2013 22:39
    quarta-feira, 30 de outubro de 2013 22:39