我在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范围。
怎么可能?这两个值都是从单元格数据中读取的。
答案 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:00
和2:05:00
作为文本粘贴到工作簿的单元格B2
和B3
中,然后执行以下操作:
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
,听起来你基本上都是以同样的方式获得你的价值观。如果我们能够看到您正在做的更多内容,我们可能会帮助您找出原因。当然,没有保证。 :)