修剪功能导致日期格式更改

2024-01-12

首先,需要注意的是,我在英国,所以标准日期格式是 dd/mm/yyyy

在 A1 中,我有一个日期:02/05/2017 (dd/mm/yyyy)

我可以在立即窗口中确认这一点:

?CLng(Range("A1").Value)
42857

现在,如果我执行以下操作:

Range("A1").Value = Range("A1").Value

你可能会猜到,没有任何反应 - 日期仍然是 02/05/2017,数值仍然是 42857

但如果我用它修剪:

Range("A1").Value = Trim(Range("A1").Value)

日期更改为 05/02/2017。这不仅仅是格式化 - 数值也更改为 42771。


这是关于什么的Trim()导致以美国格式读取日期然后使用新日期值转换回英国格式的方法?这是一个错误吗?


来自评论中的讨论:

VBA 中的默认或“标记”格式(不是 Excel 本身,正如 Macro Man 正确指出的那样)是美国英语 - 无论区域设置或单元格格式如何。

当您对日期执行 VBA 文本函数时,这些函数的输出为文本格式。所以结果是Trim(Range("A1").Value)是一个字符串。该字符串恰好类似于正确的美国日期,因此当您将其插入单元格时,Excel 会将其识别为美国日期。

因此发生了两次隐式转换。第一个发生在您读取单元格内容并将其传递给trim():日期->文本转换;当您将其写回 Excel 单元格时,会发生第二种情况:文本->日期转换。第二次转换没有有关格式的信息,因此它假定为美国英语。

(您应该能够使用任何文本函数获得相同的结果,而不仅仅是trim().)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

修剪功能导致日期格式更改 的相关文章

随机推荐