Usuário com melhor resposta
"If And Then" não funciona

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
Respostas
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
-
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:Falsoao selecionar Cells(lngRowsCount, "B") = TxtNome e pressionar shift+f9 retona:
Expressão: Cells(lngRowsCount, "B") = TxtNome
Valor:Verdadeiro
Na primeira TxtCadastroAo passar o mouse em Cells retorna:
Cells(IngRowsCount,"A")=7129
obs:sem aspasAo passar o mouse em lngRowsCount retorna:
lngRowsCount=4Ao 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=4Ao passar o mouse em TxtNome retorna:
TxtNome="luis"Obrigado.
- Editado JLNunes terça-feira, 29 de outubro de 2013 22:52
-
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
-