有没有办法获取 VBA 中
Date
函数的基础整数?我指的是 Excel 存储的整数,用于以天数来描述内存中的日期(当包含时间时,我猜它可以是浮点数)。不过我只对整数部分感兴趣。还有其他功能吗?
例如,对于今天(),我希望能够取回 40877..
日期在 VB(A) 中不是 Integer,而是 Double。
您可以通过将日期值传递给
CDbl()
来获取日期值。
CDbl(Now()) ' 40877.8052662037
来自文档:
1900 年日期系统
在1900日期系统中,支持的第一天是1月1日, 1900。当输入日期时,日期会转换为序列号,表示经过的天数,从 1 开始 1900 年 1 月 1 日。例如,如果您输入 1998 年 7 月 5 日,Excel 将日期转换为序列号 35981。
因此,在 1900 年系统中,
40877.805...
代表 1900 年 1 月 1 日(2011 年 11 月 29 日)之后的 40,876 天,约占一天的 80.5%(约 19:19h)。 Excel 中有一个基于 1904 的系统的设置,使用此设置时数字将关闭(这是每个工作簿的设置)。
要获取整数部分,请使用
Int(CDbl(Now())) ' 40877
它将返回一个没有小数位的LongDouble(即
Floor()
在其他语言中的作用)。
使用
CLng()
或 Round()
会导致四舍五入,在中午 12:00 之后调用时将返回“未来的一天”,所以不要这样做。
只需使用
CLng(Date)
。
请注意,您需要使用
Long
而不是 Integer
,因为当前日期的值 > 32767
Public SUB test()
Dim mdate As Date
mdate = now()
MsgBox (Round(CDbl(mdate), 0))
End SUB
您可以使用下面的代码示例来获取日期字符串,例如 mdate 和 Now() (例如 toDay),您还可以计算两个日期之间的差异,例如 Aging
Public Sub test(mdate As String)
Dim toDay As String
mdate = Round(CDbl(CDate(mdate)), 0)
toDay = Round(CDbl(Now()), 0)
Dim Aging as String
Aging = toDay - mdate
MsgBox ("So aging is -" & Aging & vbCr & "from the date - " & _
Format(mdate, "dd-mm-yyyy")) & " to " & Format(toDay, "dd-mm-yyyy"))
End Sub
注意:使用
CDate
将日期字符串转换为有效日期
我在 Office 2007 中使用它:)
这回答了最初的问题:如果时间部分在中午之后,如何获取不会翻转到第二天的日期部分。
将 JustDate 调暗为日期
JustDate = WorksheetFunction.RoundDown(Date_and_Time_Value, 0)