修剪function导致date格式更改

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

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

我可以在即时窗口确认:

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

现在,如果我做到以下几点:

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

你可以猜到,没有任何反应 – date仍然是02/05/2017,数值仍然是42857

但是,如果我用它修剪:

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

date改为05/02/2017。 这不仅仅是格式化 – 数值也变成了42771。


什么是Trim()方法导致date以美国格式读取,然后转换回英国格式与新的date值? 这是一个错误?

从评论中的讨论:

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

当你在一个date做VBA文本函数时,这些函数的输出是文本格式。 所以Trim(Range("A1").Value)是一个string。 这个string恰好与美国的date相似,所以当你把它插入一个单元格时,Excel将它识别为美国的date。

所以有两个隐含的转换发生。 当你读取单元格内容并将其传递给trim() :date-> text转换; 当您将其写回到Excel单元格时,会发生第二个:text-> date转换。 第二次转换没有关于格式的信息,所以它假定美国英语。

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