修剪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()
。)