【问题标题】:Difference between DateValue and CDate in VBAVBA中DateValue和CDate的区别
【发布时间】:2015-12-22 03:51:05
【问题描述】:

我是 VBA 的新手,我正在开发一个模块来从电子表格中读取数据并根据电子表格中的日期计算值。我将变量作为字符串读入,然后当前使用 CDate 将值更改为日期。但是我刚刚遇到了 DateValue,我想知道这两个函数之间的区别是什么,哪一个更好用。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    DateValue 将只返回日期。 CDate 将保留日期和时间:

    ? DateValue("2014-07-24 15:43:06")
    24/07/2014
    
    ? CDate("2014-07-24 15:43:06")
    24/07/2014 15:43:06 
    

    同样,您可以使用TimeValue 仅返回时间部分:

    ? TimeValue("2014-07-24 15:43:06")
    15:43:06 
    
    ? TimeValue("2014-07-24 15:43:06") > TimeSerial(12, 0, 0)
    True
    

    另外,正如 guitarthrower 所说,DateValue(和TimeValue)将只接受String 参数,而CDate 也可以处理数字。要为数字类型模拟这些函数,请使用 CDate(Int(num))CDate(num - Int(num))

    【讨论】:

      【解决方案2】:

      CDate 会将数字或文本转换为日期。

      CDate(41035) 'Converts to a date of 5/6/2012
      CDate("1/15/2014") 'Converts to a date of 1/15/2014
      

      DateValue 会将文本格式的日期(仅)转换为日期。

      DateValue("1/15/2014") 'Converts to a date of 1/15/2014
      DateValue(41035) 'Throws a mismatch error
      

      【讨论】:

        【解决方案3】:

        CDate 和 DateValue 在 vba 中使用时都将值转换为日期(dd/mm/yyyy 格式):
        1)
        LstrDate = "July 24, 2014"
        LDate = CDate(LstrDate)

        2)
        LDate = DateValue("July 24, 2014")

        两者都返回相同的结果。

        但是,如果在应用程序级别(电子表格)中使用 DateValue,则返回日期的序列号

        【讨论】:

        • 不知道电子表格功能,区别。很高兴知道。
        猜你喜欢
        • 1970-01-01
        • 2011-03-22
        • 1970-01-01
        • 2010-11-02
        • 2017-04-07
        • 2016-05-27
        • 1970-01-01
        • 1970-01-01
        • 2011-03-05
        相关资源
        最近更新 更多