【发布时间】:2018-05-16 11:09:57
【问题描述】:
我编写了两行简单的 VBA 代码来读取和写入日期到单元格,但意外地在运行后月份和日期交换了。步骤是:
在单元格 A1 中输入日期“2017 年 1 月 11 日”。日期现在显示为“01/11/2017”。
-
运行以下代码行:
Dim s As String s = Cells(1, 1).value Cells(2, 1).value = s 单元格 B1 现在显示“11/01/2017”,月份和日期已交换。
我在 Windows 中的 Region 中的短日期格式设置是“dd/MM/yyyy”,因此字符串 s 存储值“01/11/2017”。但是,在写入单元格时,Excel 将字符串 s 隐式转换为假定为“mm/dd/yyyy”的日期,而不遵循 Region 中的日期格式设置。我尝试使用不同的短日期格式设置,但这并没有改变 Excel 转换字符串的方式。
所以我的问题是:什么可以解释日期和月份的交换?什么控制 Excel 如何读取日期字符串并写入单元格?
【问题讨论】:
-
将
Dim s As String更改为Dim s As Date -
或将
Cells(2, 1).value = s更改为Cells(2, 1).Value = DateValue(s) -
谢谢,我同意这是一种解决方法,因为在第一种方法中,没有与字符串的转换,因此没有歧义,在第二种方法中,DateValue 检查短日期格式转换前的设置。但我仍然想知道为什么 Excel 在将字符串直接写入单元格时会如此表现,因为这样做时可能并不总是记得采用您的方法,我想避免这种情况。
-
这不是解决方法...我已经在输入答案。给我几分钟:)
标签: excel vba date formatting