【发布时间】:2023-03-20 09:46:01
【问题描述】:
我在 VBA 中编写了一个长程序来操作数据集。其中一部分涉及使用和格式化日期,我无法让它正常工作。
下载的初始数据的日期格式为“yyyy-mm-ddThh:mm:ssZ” - 例如2014-12-11T04:59:00Z.
然后我将它们转换为英国格式的“dd/mm/yyyy”日期。遍历所有相关单元格,我使用以下方法:
initial_date = Range("A1").Value
Dim publish_date As Date
publish_date = DateValue(Mid(initial_date,9,2) & "/" & Mid(initial_date,6,2) & "/" & Mid(initial_date,1,4))
Range("A1").Value = publish_date
这似乎工作正常。单元格自动将格式更改为“日期”,当我计算这些日期与另一列中日期之间的差异时,它工作正常。
然后我再次选择这些日期并添加到一个数组中:
feed(1, 8) = Range("A1")
然后将这个值转移到另一个数组中:
new_array(7, 1) = feed(1, 8)
最后,我将新数组中的值插入到另一个单元格中。到目前为止使用英国日期格式,我现在希望这个值以“mm/dd/yyyy”的形式显示。
Range("E1") = new_array(7, 1)
Range("E1").NumberFormat = "mm/dd/yyyy"
这就是问题所在。
如上运行代码,日期全部显示为“dd/mm/yyyy”格式。 Excel 将单元格的格式更改为“自定义”。找出这些日期和其他日期之间的差异是可行的,因此数据似乎存储正确,但没有按我想要的方式显示。
如果我将代码更改为
Range("E1") = new_array(7, 1)
Range("E1").NumberFormat = "dd/mm/yyyy"
日期仍然无法正确显示。可以任意写入的日期(即天等于或小于 12)正确显示,但实际上是错误的日期。即 2014-12-11T04:59:00Z 显示为 12/11/2014 这是我想要的,但 Excel 认为日期是 11 月 12 日而不是 12 月 11 日。诸如 29/09/2014 之类的日期不能以英国格式显示,但不能被 Excel 正确识别,它认为长日期应该是“29/09/2014”而不是“2014 年 9 月 29 日”。
当我完全删除格式化行时,结果是一样的。
对于冗长的解释,我很抱歉,但对于 Excel 和 VBA 如何处理、存储和格式化日期,我显然有些不理解。如果有人能告诉我出了什么问题,我将不胜感激!
(注意,在上面的所有代码 sn-ps 中,我引用例如 Range("A1") 这是简写。事实上,循环和选择值涉及更多代码,但我知道这是有效的,所以我不担心。上面的摘录只是演示了每个循环中第一个值会发生什么。)
【问题讨论】: