首先,重要的是要注意我在英国的标准日期格式是dd / mm / yyyy
在A1中,我有一个日期:02/05/2017(年/月/日)
我可以在即时窗口中确认:
?CLng(Range("A1").Value)
42857
现在,如果我执行以下操作:
Range("A1").Value = Range("A1").Value
你可能猜到,没有任何反应 - 日期仍然是2017年5月2日,数值仍然是42857
但如果我用它修剪:
Range("A1").Value = Trim(Range("A1").Value)
日期更改为05/02/2017。这不仅仅是格式化 - 数值也已更改为42771。
Trim()
方法是什么导致日期以美国格式读取,然后转换回具有新日期值的英国格式?这是一个错误吗?
答案 0 :(得分:3)
来自评论中的讨论:
默认或"令牌" VBA中的格式(不是Excel本身,正如Macro Man正确指出的那样)是美国英语 - 无论区域设置或单元格格式如何。
在日期上执行VBA文本功能时,这些功能的输出采用文本格式。所以Trim(Range("A1").Value)
的结果是一个字符串。此字符串恰好类似于正确的美国日期,因此当您将其插入单元格时,Excel会将其识别为美国日期。
因此发生了两次隐式转换。第一种情况发生在您阅读单元格内容并将其传递给trim()
:date->文本转换时;第二种情况发生在您将其写回Excel单元格时:text->日期转换。第二次转换没有关于格式的信息,因此它假定为美国英语。
(您应该可以使用任何文本函数获得相同的结果,而不仅仅是trim()
。)