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

时间:2017-06-01 10:11:55

标签: excel vba excel-vba

首先,重要的是要注意我在英国的标准日期格式是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()方法是什么导致日期以美国格式读取,然后转换回具有新日期值的英国格式?这是一个错误吗?

1 个答案:

答案 0 :(得分:3)

来自评论中的讨论:

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

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

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

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