gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:30:02 25 4
gpt4 key购买 nike

首先,需要注意的是,我在英国,所以标准日期格式是 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

但是如果我使用它修剪:

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

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

<小时/>

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

最佳答案

来自评论中的讨论:

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

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

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

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

关于vba - 修剪功能导致日期格式更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44304709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com