excel - CDate 能识别澳大利亚日期格式吗?

标签 excel date vba

我有一个在 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

其中CreateHistoryColListColumn类的对象。 3 个 MsgBox 调用显示以下内容:

6/9/2012 06/09/2012 9/06/2012

因此,Format() 调用可以正确格式化日期,但对 ListColumn.Name 的调用可以将格式更改为“mm/dd/yyyy”。

最佳答案

来自帮助文件:

CDate recognizes date formats according to the locale setting of your system. The correct order of day, month, and year may not be determined if it is provided in a format other than one of the recognized date settings.

我讨厌依赖语言环境,因为大多数时候它似乎与我的意图相反,而且它使代码的可移植性较差。

我通常尽可能明确地处理日期:

  1. 将字符串拆分为各个部分(年、月、日,以及小时、分钟、秒(如果相关))
  2. 将各个部分粘贴到 DateSerial 函数中。这将返回一个 Date 类型。 (如果适用,您可以添加 TimeSerial 的输出。)
  3. 如果出于显示目的需要,请使用 Format 函数适本地格式化此Date,该函数返回一个字符串。

Here's a worked example.

关于excel - CDate 能识别澳大利亚日期格式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12272962/

相关文章:

excel - 自动化帮助,excel 或 SPSS,需要为每五个值计算中值

excel - 将几个参数传递给 sub

excel - 如何在 VBA 中使用 FileSystemObject 替换文本文件行中的字符串?

excel - 我可以在不改变样式的情况下清除单元格内容吗?

python - Openpyxl - 如何在 xlsx 中查找包含数据的行数

excel - excel中如何求两列相加的最大值?

java - 在 jtable 中设置空日期

javascript - 在浏览器中获取支持的语言环境

mysql 将日期从 mm-dd-yyyy 转换为 YYYY-MM-DD 格式

.net - 如何在 AutoCAD 中选择给定点上的元素?