首先,需要注意的是,我在英国,所以标准日期格式是 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(使用前将#替换为@)