我有一个简单的代码,VBA无法返回正确的日期:
Sub Test_Date ()
Debug.Print Format(Month(Now()), "mmm")
Debug.Print Month(Now())
Debug.Print Now()
End Sub
返回:
Dez
1
29.01.2018 11:17:55
1)这是一个众所周知的Excel问题还是我犯了错误?
答案 0 :(得分:9)
这是一个已知问题。它实际上不是问题。
在onDataChange()
你正在路过
Debug.Print Format(Month(Now()), "mmm")
。
VBA的第一天是Debug.Print Format(1,"mmm")
。它的月份是31.12.1899
。运行这一小段代码来查看它:
December
如果您想要当前日期的月份 - Sub TestMe()
Debug.Print Format(1, "dd-mmm-yyyy")
End Sub
通常,在使用Excel,VBA和MSSQL Server中的日期时要小心。日期将转换为数字。例如,每个日期都转换为数字,但起始编号可能有点不同。
Format(Now, "mmm")
转换为1
; 01.January.1900
转换为1
; 31.December.1899
转换为1
(02.January.1900
); SELECT CONVERT(DATETIME,1)
属性,则ActiveWorkbook.Date1904=True
会转换为1
; 造成这种情况的原因是莲花1-2-3的创造者所犯的错误,他们认为29.02.1900是一个有效的日期。因此,Excel希望与Lotus 1-2-3兼容,并且他们继续使用此错误。在VBA中,他们决定不实施错误,因此VBA和Excel中的日期略有不同,但这仅适用于1900年3月1日期间 - MSDN date explanation。
因此,取决于4"环境中的哪一个"您正在工作,今天的日期(2018年1月29日)可以转换为以下之一:
02.January.1904
)如果您在Excel,VBA和MSSQL Server中使用35天并将其转换为日期,结果将如下所示:
SELECT CONVERT(INT, CONVERT(DATETIME,GETDATE()))
)这篇文章(由SO的所有者撰写)给出了一些额外的启示: My First BillG Review