VBA 中日期格式的区别

Posted

技术标签:

【中文标题】VBA 中日期格式的区别【英文标题】:Differences between date formatting in VBA 【发布时间】:2022-01-06 12:27:19 【问题描述】:

我想实现 A1 中看到的结果。为什么第 3 行输出的结果与第 1 行和第 2 行不同,即使格式相同 - yyyy-mm-dd hh:mm:ss?

这和地区设置有关系吗?

1   Range("A1").Value2 = Now
2   Range("A1").NumberFormat = "yyyy-mm-dd hh:mm:ss"
3   Range("B1").Value2 = Format(Now, "yyyy-mm-dd hh:mm:ss")

【问题讨论】:

我不知道为什么(我猜 excel 正在努力为您提供智能)但是如果您有日期数据,请将其保留为日期并通过NumberFormat修改演示文稿 【参考方案1】:

那是因为:

A1:您设置了一个 Date 值并应用特定格式进行显示。

B1:您将日期值格式化为 Text,将其设置为值,但单元格未应用特定格式,因此 Excel 将文本日期视为日期值并将其转换为一个真正的日期值,以您的默认(德语?)日期格式显示。

要强制将文本日期读取为文本,您可以在其前面加上引号:

Range("A1").Value2 = Now
Range("A1").NumberFormat = "yyyy-mm-dd hh:mm:ss"
Range("B1").Value2 = Format(Now, "yyyy-mm-dd hh:mm:ss")
Range("C1").Value2 = Format(Now, "\'yyyy-mm-dd hh:mm:ss")

输出(丹麦本地化):

注意,C1 是文本(左对齐)。

【讨论】:

我明白了。这回答了这个问题。谢谢@Gustav【参考方案2】:

为什么不使用 Range 设置单元格格式,之前或之后?

例子:

Range("A1:Z1").NumberFormat = "yyyy-mm-dd hh:mm:ss"
Range("A1").Value2 = Now
Range("B1").Value2 = Now

【讨论】:

以上是关于VBA 中日期格式的区别的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA 日期格式

VBA验证文本框中是不是存在文本,然后检查日期是不是格式正确

如何使用 VBA 在 Excel 注释中查找和替换日期格式

VBA 强制转日期格式

excel日期格式与vba中的不同

MS Access:使用 VBA 进行 SQL 插入的日期格式