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”吗?

解决方案 »

  1.   

    basic语言类型的自由性,给程序员养成了一堆坏习惯。
    不同类型的数据你扔给他,然后要他天经地义的按照你想要的结果给你?你咋不给他想要的呢?
    一切不确定都是你造成的。试试MsgBox Asc(CStr(d)) & "," & Asc(CStr(t)) & "," & CStr(d < t)
      

  2.   

    楼主需要掌握“运算符优先级”问题。
    按你写的表达式: 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)
      这样就会是“你想要的结果”了。