VBA中DateValue和CDate之间的区别

时间:2014-07-24 21:54:39

标签: vba excel-vba excel

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

3 个答案:

答案 0 :(得分:24)

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))

答案 1 :(得分:4)

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

答案 2 :(得分:3)

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

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

两者都返回相同的结果。

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