无论出于何种原因,每次我尝试在VBA中使用Day(Now)函数时,它始终显示“ 1/9/1900”。日期功能可以正确显示,所以我不确定这里的问题是什么。
Sub Test()
Dim datDay As Date
datDay = Day(Now)
MsgBox datDay
End Sub
答案 0 :(得分:4)
Day
是一个介于1到31之间的整数,具体取决于DateTime.Now
函数返回的日期的“天”部分。
日期的存储方式,它们基本上是Double
值,其中整数部分是天数,小数部分是一天中的时间。
Debug.Print Format(CDate(0), "yyyy-mm-dd")
输出:1899-12-30
我们是6月10日,所以10
的日期值对应于1900年1月9日。
您要将Day
,Month
和Year
函数返回的值存储到Long
整数变量中;不是Date
。
Dim datDay As Long
datDay = DateTime.Day(DateTime.Date) ' datDay is 10 because DateTime.Date is 2019-06-10.
注意:虽然不合格的Day
,Date
,Month
和Year
(及其他)函数可以很好地工作,但用在(VBA.DateTime
中声明的模块,以避免可能引起混淆的歧义,例如Date
既是DateTime
模块的属性的名称,又是,它也是数据类型(Dim foo As Date
),两者的含义非常不同。
答案 1 :(得分:0)
尝试:
Option Explicit
Sub Test()
Dim datDay As Date
datDay = Date
MsgBox "Whole date: " & datDay & vbNewLine & _
"Month: " & Month(Date) & " (" & Format(Date, "mmmm") & ")" & vbNewLine & _
"Day: " & Day(Date) & " (" & Format(Date, "dddd") & ")"
End Sub
结果:
答案 2 :(得分:0)
替换
datDay = Day(Now)
使用
datDay = Day(Now())
不确定这是否可以解决问题,但是直接在单元格中输入=Day(Now())
时可以正常工作。
您的问题是datDay
被键入为日期。 =Day(Now())
仅返回10,因为今天是6月10日。作为完整的日期值,它是1/10/1900,因为Excel将第0天索引为1/0/1900。