none
If CDate(.Cells(linha, colunaTime)) = CDate(ComboBoxTime.Value) Then Sempre retorna como falso RRS feed

  • 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
    sexta-feira, 17 de março de 2017 14:21

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
    segunda-feira, 20 de março de 2017 13:51
  • Já experimentou subtrair um do outro? Qual é o valor?

    http://www.ambienteoffice.com.br || Grupo de WhatsApp: https://chat.whatsapp.com/K1uey5Q4yJdKnsgWkVQAZG

    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.
    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
    terça-feira, 21 de março de 2017 12:46

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.

    sexta-feira, 17 de março de 2017 16:38
  • 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

    sexta-feira, 17 de março de 2017 17:18
  • 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.

    sexta-feira, 17 de março de 2017 17:40
  • 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
    sexta-feira, 17 de março de 2017 18:08
  • 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

    sexta-feira, 17 de março de 2017 18:13
  • 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.

    Segue planilha teste : 

    https://drive.google.com/file/d/0BzOp_5qQzuBlT0JBTUxLUjVHV25OVUQ2MWhqNFVsNXVJTzRZ/view?usp=drivesdk

    sexta-feira, 17 de março de 2017 18:26
  • 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.

    sexta-feira, 17 de março de 2017 18:51
  • 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.

    sexta-feira, 17 de março de 2017 19:06
  • 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

    sábado, 18 de março de 2017 22:00
  • 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.

    segunda-feira, 20 de março de 2017 12:43
  • 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
    segunda-feira, 20 de março de 2017 13:51
  • Já experimentou subtrair um do outro? Qual é o valor?

    http://www.ambienteoffice.com.br || Grupo de WhatsApp: https://chat.whatsapp.com/K1uey5Q4yJdKnsgWkVQAZG

    segunda-feira, 20 de março de 2017 20:11
    Moderador
  • Já experimentou subtrair um do outro? Qual é o valor?

    http://www.ambienteoffice.com.br || Grupo de WhatsApp: https://chat.whatsapp.com/K1uey5Q4yJdKnsgWkVQAZG

    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.
    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
    terça-feira, 21 de março de 2017 12:46