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