Public Sub test()
Dim d As Date
d = "10/1/2015"
t = "10/2/2015"
MsgBox Asc(d) & "," & Asc(t) & "," & d < t
End Sub显示结果为什么只有False?不应该是“50,49,True”吗?
Dim d As Date
d = "10/1/2015"
t = "10/2/2015"
MsgBox Asc(d) & "," & Asc(t) & "," & d < t
End Sub显示结果为什么只有False?不应该是“50,49,True”吗?
不同类型的数据你扔给他,然后要他天经地义的按照你想要的结果给你?你咋不给他想要的呢?
一切不确定都是你造成的。试试MsgBox Asc(CStr(d)) & "," & Asc(CStr(t)) & "," & CStr(d < t)
按你写的表达式: Asc(d) & "," & Asc(t) & "," & d < t
这其中的“运算符”只有 & 和 < 。由于 & 的优先级高于 < ,因此先进行前面的“字符串连接”,最后进行“比较”。
由于你的 变量t 是“未定义”的,那么就只能算它是 Variant类型的变量;
t 在赋值之后,其“子类型”是String(虽然看起来是“日期”,但它首先是“字符串”!)。
因此,最后执行的是“两个字符串的大小比较”,运算结果当然只有 True 或 False两种结果!针对你这段“具体代码”,前面 & 的结果是: "50,49,2015/10/1"
(注:变量d 转换成“字符串”,结果可能会受“系统设置”影响,也许多数情况下是 yyyy/m/d格式)
最后进行的“比较”是: "50,49,2015/10/1" < "10/2/2015"
这个结果当然是 False !!!你想要你“预想的结果”,那么,必须要用括号改变其运算顺序才行!
要这样写: Asc(d) & "," & Asc(t) & "," & (d < t)
这样就会是“你想要的结果”了。