显示1900年1月的日期(现在)?

时间:2019-06-10 16:16:15

标签: excel vba

无论出于何种原因,每次我尝试在VBA中使用Day(Now)函数时,它始终显示“ 1/9/1900”。日期功能可以正确显示,所以我不确定这里的问题是什么。

Sub Test()

Dim datDay As Date

datDay = Day(Now)
MsgBox datDay

End Sub

Here's an image of the error.

3 个答案:

答案 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日。

您要将DayMonthYear函数返回的值存储到Long整数变量中;不是Date

Dim datDay As Long
datDay = DateTime.Day(DateTime.Date) ' datDay is 10 because DateTime.Date is 2019-06-10.

注意:虽然不合格的DayDateMonthYear(及其他)函数可以很好地工作,但用在(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

结果:

enter image description here

答案 2 :(得分:0)

替换

    datDay = Day(Now)

使用

    datDay = Day(Now())

不确定这是否可以解决问题,但是直接在单元格中输入=Day(Now())时可以正常工作。

您的问题是datDay被键入为日期。 =Day(Now())仅返回10,因为今天是6月10日。作为完整的日期值,它是1/10/1900,因为Excel将第0天索引为1/0/1900。