Excel VBA等于时间不匹配

时间:2014-03-18 12:08:33

标签: excel vba datetime excel-vba

我在Excel中有这个VBA代码:

If (TimeValue(C_CurrentDate) = L_CurrentStartTime) Then
   do-someting
End If

但它从来没有"某事"。

示例数据是C_CurrentDate - > 17/03/2014 2:05:00和L_CurrentStartTime - >二点05分00秒

比较的两边应该是2:05:00,但仍然不匹配。 我甚至将它们都转换为msgbox中的两倍,它们都呈现8,68055555555556E-02

它们与Doble值的差异在于E-17范围。

怎么可能?这两个值都是从单元格数据中读取的。

2 个答案:

答案 0 :(得分:2)

只丢弃合并的DateTime的日期部分:

Sub TestOfTime()
    Dim C_CurrentDate As String, L_CurrentStartTime As String
    Dim d1 As Date, d2 As Date

    C_CurrentDate = "17/03/2014 2:05:00"
    L_CurrentStartTime = "2:05:00"

    d1 = TimeValue(Split(C_CurrentDate, " ")(1))
    d2 = TimeValue(L_CurrentStartTime)
    If d1 = d2 Then
        MsgBox "Same Time"
    End If
End Sub

答案 1 :(得分:0)

很奇怪你必须将日期拆分以使其正常工作。解决方案是一种解决方案,因此@ Gary的学生提供了可以让您前进的答案。但如果为什么会折磨你(就像我一样),你就必须分享更多的过程。例如,我将您的两个示例17/03/2014 2:05:002:05:00作为文本粘贴到工作簿的单元格B2B3中,然后执行以下操作:

Sub Macro1()

Dim C_CurrentDate As Date
C_CurrentDate = CDate(Range("B2").Value)
Dim L_CurrentStartTime As Date
L_CurrentStartTime = CDate(Range("B3").Value)

Debug.Print C_CurrentDate
Debug.Print CDate(Range("B2").Value)
Debug.Print TimeValue(Range("B2").Value)

Debug.Print L_CurrentStartTime
Debug.Print CDate(Range("B3").Value)

If TimeValue(Range("B2").Value) = CDate(Range("B3").Value) Then
    Debug.Print "True"
End If

If TimeValue(C_CurrentDate) = L_CurrentStartTime Then
    Debug.Print "True"
End If


End Sub

我的If个语句都解析为True,听起来你基本上都是以同样的方式获得你的价值观。如果我们能够看到您正在做的更多内容,我们可能会帮助您找出原因。当然,没有保证。 :)