我有一个我在8月中旬创建的电子表格,其中有一个表格,从那时起每天都有一列。列标题是日期的日期。日期显示我希望如何显示:“dd / mm / yyyy”
但是,我有一个宏需要读取这些日期才能执行其工作。因为我使用的是表格,所以日期似乎是作为文本而不是5位数字保存(当我将标题单元格的格式设置为“常规”时,它保留为“dd / mm / yyyy”格式而不是改为5位数字。这不是问题,直到9月1日,之后CDate(在宏观中)开始将这些日期读作“mm / dd / yyyy”
有没有办法让CDate认可澳大利亚的日期格式而不是美国?或者失败,使表头保持为日期而不是文本?我宁愿避免将表转换回范围,因为宏被设计为使用表属性,ListColumns等。
更新:
我已经缩小了问题范围。它不是日期,而是ListColumn.Name属性。出于某种原因,它正在重新转换我的约会。我正在使用Format()
设置日期格式,如下所示:
CreateHistoryColumn.Name = Format(headerDate, "dd/mm/yyyy")
MsgBox Day(headerDate) & "/" & Month(headerDate) & "/" & Year(headerDate)
MsgBox Format(headerDate, "dd/mm/yyyy")
MsgBox CreateHistoryColumn.Name
其中CreateHistoryCol
是类ListColumn
的对象。 3个MsgBox调用显示以下内容:
2012年6月9日 06/09/2012 2012年9月6日
因此Format()
调用会正确格式化日期,但调用ListColumn.Name
会将格式更改为“mm / dd / yyyy”。
答案 0 :(得分:3)
来自帮助文件:
CDate 根据系统的区域设置识别日期格式。如果以不同于其中一个识别日期设置的格式提供日期,月份和年份的正确顺序,则可能无法确定。
我讨厌依赖于语言环境,因为大多数时候它似乎与我的预期相反,而且它使代码不那么便携。
我通常尽可能明确地处理日期:
DateSerial
功能中。这将返回Date
类型。 (如果适用,您可以添加TimeSerial
的输出。)Date
函数根据需要格式化此Format
,该函数返回一个字符串。 答案 1 :(得分:1)
正如我在更新中所示,ListColumn.Name方法负责不需要的转换。我仍然不知道为什么,但有任何简单的解决办法:
CreateHistoryColumn.Name = CLng(headerDate)
这会强制将标题视为数字,因此可以将其标识为正确的日期。我无法解释这一点。