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



首先,重要的是要注意我在英国,因此标准日期格式为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

但是,如果我使用Trim:

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

日期更改为05/02/2017。这不仅仅是格式化 - 数值也已更改为42771。


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

在评论中的讨论中:

VBA中的默认或"令牌"格式(不是宏观人物正确指出(是美国英语 - 无论区域设置或单元格式如何。

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

因此发生了两个隐式转换。首先,当您读取单元格内容并将其传递给 trim():date->文本转换时,就会发生。当您将其写回Excel单元格时,第二次发生:text->日期转换。第二个转换没有有关格式的信息,因此它假设我们英语。

(您应该能够使用任何文本功能,而不仅仅是trim()。(

我发现,如果您在日期之前添加"'",则日期未更改。

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

最新更新