gpt4 book ai didi

VBA 未使用 Now() 返回正确的日期

转载 作者:行者123 更新时间:2023-12-02 23:38:58 26 4
gpt4 key购买 nike

我有一个简单的代码,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 众所周知的问题还是我犯了一个错误?

最佳答案

这是一个已知问题。这实际上不是问题。

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
<小时/>

如果您想要当前日期的月份 - Format(Now, "mmm")

<小时/>

一般来说,在 Excel、VBA 和 MSSQL Server 中处理日期时要小心一些。日期将转换为数字。例如,每个日期都转换为数字,但起始数字可能有点不同。

  • 在 Excel 中,1转换为01.January.1900 ;
  • 在 VBA 中,1转换为31.December.1899 ;
  • 在 MSSQL Server 中,1转换为02.January.1900 ( SELECT CONVERT(DATETIME,1) );
  • 在 Excel 中,如果您激活 ActiveWorkbook.Date1904=True属性(property),1转换为02.January.1904 ;

这是由 Lotus 1-2-3 的创建者犯下的一个错误,他们认为 29.02.1900 是一个有效的日期。因此,Excel 希望与 Lotus 1-2-3 兼容,并且他们继续犯了这个错误。在 VBA 中,他们决定不执行该错误,因此 VBA 和 Excel 中的日期有点不同,但这仅适用于 1. March 1900 - MSDN date explanation 之前的期间。 .

因此,根据您所工作的上述 4 个“环境”中的哪一个,今天的日期(2018 年 1 月 29 日)可以转换为以下日期之一:

  • 41667(日期为 1904 的 Excel)
  • 43128(MSSQL Server SELECT CONVERT(INT, CONVERT(DATETIME,GETDATE())))
  • 43129(Excel)
  • 43129(VBA)

如果在 Excel、VBA 和 MSSQL Server 中将 35 天转换为日期,结果将如下:

  • 1900 年 2 月 3 日(VBA)
  • 1900 年 2 月 4 日(Excel)
  • 1900 年 2 月 5 日(MSSQL Server - SELECT CONVERT(DATETIME,35))
  • 1904 年 2 月 5 日(Excel,日期为 1904)
<小时/>

这篇文章(由 SO 所有者撰写)提供了一些额外的启示: My First BillG Review

关于VBA 未使用 Now() 返回正确的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48498998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com