Usuário com melhor resposta
If CDate(.Cells(linha, colunaTime)) = CDate(ComboBoxTime.Value) Then Sempre retorna como falso

Pergunta
-
Fiz o seguinte if:
Porém o mesmo sempre retorna como falso, mesmo quando não deveria
If CDate(.Cells(linha, colunaTime)) = CDate(ComboBoxTime.Value) Then TextBoxDP.Value = .Cells(linha, colunaDP).Value TextBoxDR.Value = .Cells(linha, colunaDR).Value TextBoxMdP.Value = .Cells(linha, colunaMdP).Value TextBoxMdR.Value = .Cells(linha, colunaMdR).Value TextBoxAP.Value = .Cells(linha, colunaAP).Value TextBoxAR.Value = .Cells(linha, colunaAR).Value TextBoxMP.Value = .Cells(linha, colunaMP).Value TextBoxMR.Value = .Cells(linha, colunaMR).Value TextBoxCP.Value = .Cells(linha, colunaCP).Value TextBoxCR.Value = .Cells(linha, colunaCR).Value TextBoxAtividadesRealizadas.Text = .Cells(linha, colunaAtividadesRealizadas).Text TextBoxProximasAtividades.Value = .Cells(linha, colunaProximasAtividades).Value TextBoxProblemasRiscosEncontrados.Value = .Cells(linha, colunaProblemasRiscosEncontrados).Value End If
Respostas
-
Olá Thiago...
Desculpe não respnder antes... não consegui passar aqui no fórum...
Relamente estou ficando sem sugestões para te dar.... você verificou a sugestão do Filipe abaixo?
Fabio Rosa.
Para solucionar tive que usar o DatePart
If DatePart("h", CDate(.Cells(linha, colunaTime).Value)) = DatePart("h", CDate(ComboBoxTime.Value)) Then TextBoxDP.Value = .Cells(linha, colunaDP).Value TextBoxDR.Value = .Cells(linha, colunaDR).Value TextBoxMdP.Value = .Cells(linha, colunaMdP).Value TextBoxMdR.Value = .Cells(linha, colunaMdR).Value TextBoxAP.Value = .Cells(linha, colunaAP).Value TextBoxAR.Value = .Cells(linha, colunaAR).Value TextBoxMP.Value = .Cells(linha, colunaMP).Value TextBoxMR.Value = .Cells(linha, colunaMR).Value TextBoxCP.Value = .Cells(linha, colunaCP).Value TextBoxCR.Value = .Cells(linha, colunaCR).Value TextBoxAtividadesRealizadas.Text = .Cells(linha, colunaAtividadesRealizadas).Text TextBoxProximasAtividades.Value = .Cells(linha, colunaProximasAtividades).Value TextBoxProblemasRiscosEncontrados.Value = .Cells(linha, colunaProblemasRiscosEncontrados).Value End If
- Marcado como Resposta Thiago Krebs segunda-feira, 20 de março de 2017 13:51
-
Já experimentou subtrair um do outro? Qual é o valor?
Para resolver tive que adicionar o DatePart, não sei dizer o porque não funcionava antes. Não cheguei a subtrair um o do outro.
http://www.ambienteoffice.com.br || Grupo de WhatsApp: https://chat.whatsapp.com/K1uey5Q4yJdKnsgWkVQAZG
If DatePart("h", CDate(.Cells(linha, colunaTime).Value)) = DatePart("h", CDate(ComboBoxTime.Value)) Then TextBoxDP.Value = .Cells(linha, colunaDP).Value TextBoxDR.Value = .Cells(linha, colunaDR).Value TextBoxMdP.Value = .Cells(linha, colunaMdP).Value TextBoxMdR.Value = .Cells(linha, colunaMdR).Value TextBoxAP.Value = .Cells(linha, colunaAP).Value TextBoxAR.Value = .Cells(linha, colunaAR).Value TextBoxMP.Value = .Cells(linha, colunaMP).Value TextBoxMR.Value = .Cells(linha, colunaMR).Value TextBoxCP.Value = .Cells(linha, colunaCP).Value TextBoxCR.Value = .Cells(linha, colunaCR).Value TextBoxAtividadesRealizadas.Text = .Cells(linha, colunaAtividadesRealizadas).Text TextBoxProximasAtividades.Value = .Cells(linha, colunaProximasAtividades).Value TextBoxProblemasRiscosEncontrados.Value = .Cells(linha, colunaProblemasRiscosEncontrados).Value End If
- Marcado como Resposta Thiago Krebs quarta-feira, 14 de junho de 2017 18:44
Todas as Respostas
-
-
Olá!
Já adicionou uma mensagem com o valor de cada parte antes de comparar para ver o que está trazendo?
Fabio Rosa.
Fiz
MsgBox "Célula " & CDate(.Cells(linha, colunaTime).Value) & " and ComboBoxTime " & CDate(ComboBoxTime.Value) If CDate(.Cells(linha, colunaTime)) = CDate(ComboBoxTime.Value) Then TextBoxDP.Value = .Cells(linha, colunaDP).Value TextBoxDR.Value = .Cells(linha, colunaDR).Value TextBoxMdP.Value = .Cells(linha, colunaMdP).Value TextBoxMdR.Value = .Cells(linha, colunaMdR).Value TextBoxAP.Value = .Cells(linha, colunaAP).Value TextBoxAR.Value = .Cells(linha, colunaAR).Value TextBoxMP.Value = .Cells(linha, colunaMP).Value TextBoxMR.Value = .Cells(linha, colunaMR).Value TextBoxCP.Value = .Cells(linha, colunaCP).Value TextBoxCR.Value = .Cells(linha, colunaCR).Value TextBoxAtividadesRealizadas.Text = .Cells(linha, colunaAtividadesRealizadas).Text TextBoxProximasAtividades.Value = .Cells(linha, colunaProximasAtividades).Value TextBoxProblemasRiscosEncontrados.Value = .Cells(linha, colunaProblemasRiscosEncontrados).Valu End If
-
-
Veja que na sua mensagem, você colocou o Value da célula... coisa que você não tem no If:
CDate(.Cells(linha, colunaTime).Value)
Não pode ser isso?
Att,
Fabio Rosa.
Infelizmente não é só isso, uma coisa que acabei de perceber é que com poucas linhas funciona, porém com mais linhas não.
Eu tenho uma planilha teste com 2 linhas e funciona perfeitamente, mas na real com 472 linhas não.
- Editado Thiago Krebs sexta-feira, 17 de março de 2017 18:09
-
Veja que na sua mensagem, você colocou o Value da célula... coisa que você não tem no If:
CDate(.Cells(linha, colunaTime).Value)
Não pode ser isso?
Att,
Fabio Rosa.
Esse aqui seria um "completo"
Private Sub ComboBoxTime_Change() Dim linha As Integer, colunaTime As Integer, colunaAtualização As Integer, colunaProjeto As Integer Dim colunaDP As Integer, colunaDR As Integer, colunaMdP As Integer, colunaMdR As Integer, colunaAP As Integer Dim colunaAR As Integer, colunaMP As Integer, colunaMR As Integer, colunaCP As Integer, colunaCR As Integer Dim colunaAtividadesRealizadas As Integer, colunaProximasAtividades As Integer, colunaProblemasRiscosEncontrados As Integer linha = 3 colunaTime = 5 colunaAtualização = 4 colunaProjeto = 6 colunaDP = 13 colunaDR = 14 colunaMdP = 15 colunaMdR = 16 colunaAP = 17 colunaAR = 18 colunaMP = 19 colunaMR = 20 colunaCP = 21 colunaCR = 22 colunaAtividadesRealizadas = 25 colunaProximasAtividades = 27 colunaProblemasRiscosEncontrados = 28 On Error GoTo Quit With Sheets("Base") Do While Not IsEmpty(.Cells(linha, colunaTime)) If .Cells(linha, colunaProjeto).Value = ComboBoxProjeto.Value Then If CDate(.Cells(linha, colunaAtualização).Value) = CDate(ComboBoxAtualização.Value) Then MsgBox "Célula " & CDate(.Cells(linha, colunaTime).Value) & " and ComboBoxTime " & CDate(ComboBoxTime.Value) If CDate(.Cells(linha, colunaTime).Value) = CDate(ComboBoxTime.Value) Then TextBoxDP.Value = .Cells(linha, colunaDP).Value TextBoxDR.Value = .Cells(linha, colunaDR).Value TextBoxMdP.Value = .Cells(linha, colunaMdP).Value TextBoxMdR.Value = .Cells(linha, colunaMdR).Value TextBoxAP.Value = .Cells(linha, colunaAP).Value TextBoxAR.Value = .Cells(linha, colunaAR).Value TextBoxMP.Value = .Cells(linha, colunaMP).Value TextBoxMR.Value = .Cells(linha, colunaMR).Value TextBoxCP.Value = .Cells(linha, colunaCP).Value TextBoxCR.Value = .Cells(linha, colunaCR).Value TextBoxAtividadesRealizadas.Text = .Cells(linha, colunaAtividadesRealizadas).Text TextBoxProximasAtividades.Value = .Cells(linha, colunaProximasAtividades).Value TextBoxProblemasRiscosEncontrados.Value = .Cells(linha, colunaProblemasRiscosEncontrados).Valu End If End If End If linha = linha + 1 Loop End With Quit: End Sub
-
Veja que na sua mensagem, você colocou o Value da célula... coisa que você não tem no If:
CDate(.Cells(linha, colunaTime).Value)
Não pode ser isso?
Att,
Fabio Rosa.
https://drive.google.com/file/d/0BzOp_5qQzuBlT0JBTUxLUjVHV25OVUQ2MWhqNFVsNXVJTzRZ/view?usp=drivesdk
-
Olá... Até baixei sua planilha... mas não consegui executar os forms dela... não entendi o funcionamento... mas você falou que em planilhas pequenas funciona? Depurando o código, o que acontece naquele IF? Olhando assim não poderia considerar Falso se na mensagem que você colocou apresentam mesmos valores... Iria sugerir para você comparar os textos mesmo... sem transformar para data para comparação apenas uma sugestão meio "boba", mas devido ao comportamento... as vezes é preciso tentar tudo... (brainstorming)...
Fabio Rosa.
-
Olá... Até baixei sua planilha... mas não consegui executar os forms dela... não entendi o funcionamento... mas você falou que em planilhas pequenas funciona? Depurando o código, o que acontece naquele IF? Olhando assim não poderia considerar Falso se na mensagem que você colocou apresentam mesmos valores... Iria sugerir para você comparar os textos mesmo... sem transformar para data para comparação apenas uma sugestão meio "boba", mas devido ao comportamento... as vezes é preciso tentar tudo... (brainstorming)...
Fabio Rosa.
Então para ativar os forms você tem de entrar pelo alt + F11, eu não coloquei um botão ou algo do tipo para ativar ele. O form que estou fazendo é o Formulário que está dentro da pasta formulário.
Eu achei que em planilhas com poucas linhas funcionasse, mas eu estava errado, como você pode ver na planilha que enviei exitem somente duas linhas, mas mesmo assim não funciona.
Explicando um pouco melhor o funcionamento do formulário. Eu tenho 4 combox dependentes , quando altero a última (ComboBoxTime) a macro deveria puxar as datas da planilha e preencher os campos Definir Planeja, Definir Real do formulário (UserForm).
Depurando o código naquela exata parte, a macro pula direto para o End If.
-
Boa noite Thiago.
Uma dica: horas são tratadas no Excel como fração de dia, ou seja, "06:00" corresponde internamente a "0,25". Ocorre que o resultado da fração pode ser um número "bastante quebrado", ou até mesmo impossível de ser representado precisamente pelo Excel (veja um artigo interessante sobre isso: https://support.microsoft.com/pt-br/help/78113/floating-point-arithmetic-may-give-inaccurate-results-in-excel).
Esse problema existe tanto para planilha como para o VBA (experimente somar "0,1" muitas vezes (10000, por exemplo) no VBA e veja o resultado).
Para contornar isso, basta você truncar o resultado antes de executar comparações ou utilizar um "ProcV", por exemplo. Eu sempre trunco na 9ª casa decimal e nunca observei problemas.
Abraço.
Filipe Magno
-
-
Olá Thiago...
Desculpe não respnder antes... não consegui passar aqui no fórum...
Relamente estou ficando sem sugestões para te dar.... você verificou a sugestão do Filipe abaixo?
Fabio Rosa.
Para solucionar tive que usar o DatePart
If DatePart("h", CDate(.Cells(linha, colunaTime).Value)) = DatePart("h", CDate(ComboBoxTime.Value)) Then TextBoxDP.Value = .Cells(linha, colunaDP).Value TextBoxDR.Value = .Cells(linha, colunaDR).Value TextBoxMdP.Value = .Cells(linha, colunaMdP).Value TextBoxMdR.Value = .Cells(linha, colunaMdR).Value TextBoxAP.Value = .Cells(linha, colunaAP).Value TextBoxAR.Value = .Cells(linha, colunaAR).Value TextBoxMP.Value = .Cells(linha, colunaMP).Value TextBoxMR.Value = .Cells(linha, colunaMR).Value TextBoxCP.Value = .Cells(linha, colunaCP).Value TextBoxCR.Value = .Cells(linha, colunaCR).Value TextBoxAtividadesRealizadas.Text = .Cells(linha, colunaAtividadesRealizadas).Text TextBoxProximasAtividades.Value = .Cells(linha, colunaProximasAtividades).Value TextBoxProblemasRiscosEncontrados.Value = .Cells(linha, colunaProblemasRiscosEncontrados).Value End If
- Marcado como Resposta Thiago Krebs segunda-feira, 20 de março de 2017 13:51
-
-
Já experimentou subtrair um do outro? Qual é o valor?
Para resolver tive que adicionar o DatePart, não sei dizer o porque não funcionava antes. Não cheguei a subtrair um o do outro.
http://www.ambienteoffice.com.br || Grupo de WhatsApp: https://chat.whatsapp.com/K1uey5Q4yJdKnsgWkVQAZG
If DatePart("h", CDate(.Cells(linha, colunaTime).Value)) = DatePart("h", CDate(ComboBoxTime.Value)) Then TextBoxDP.Value = .Cells(linha, colunaDP).Value TextBoxDR.Value = .Cells(linha, colunaDR).Value TextBoxMdP.Value = .Cells(linha, colunaMdP).Value TextBoxMdR.Value = .Cells(linha, colunaMdR).Value TextBoxAP.Value = .Cells(linha, colunaAP).Value TextBoxAR.Value = .Cells(linha, colunaAR).Value TextBoxMP.Value = .Cells(linha, colunaMP).Value TextBoxMR.Value = .Cells(linha, colunaMR).Value TextBoxCP.Value = .Cells(linha, colunaCP).Value TextBoxCR.Value = .Cells(linha, colunaCR).Value TextBoxAtividadesRealizadas.Text = .Cells(linha, colunaAtividadesRealizadas).Text TextBoxProximasAtividades.Value = .Cells(linha, colunaProximasAtividades).Value TextBoxProblemasRiscosEncontrados.Value = .Cells(linha, colunaProblemasRiscosEncontrados).Value End If
- Marcado como Resposta Thiago Krebs quarta-feira, 14 de junho de 2017 18:44