当系统设置为欧洲日期格式时,Excel会将我的日期搞砸

时间:2014-03-18 00:30:44

标签: excel excel-vba vba

这是我正在做的事情: 1.在控制面板中,我按如下方式设置系统日期格式:dd / MM / yyyy 2.我创建了以下简单的宏:

Sub hello()
    ActiveSheet.Cells(1, 1) = "10/01/2014"
End Sub
  1. 我运行它,并在单元格(1,1)中获取以下日期:2014年1月10日
  2. 每当日期小于12时,它将日期转换为美国格式(MM / dd / yyyy),当日期大于12时,它无法转换它并正确地将日期写入单元格,但作为文本。 我在尝试从VSTO写日期时首先发现了这一点,但随后将其缩小到任何从代码甚至宏编写日期到单元格的地方。 这是一个Excel错误还是我做错了什么?我使用的是Excel 2013,但我相信这个问题也存在于所有其他版本中......

1 个答案:

答案 0 :(得分:1)

VBA认为所有日期文字都采用美国格式,除非文字不可能是有效的美国格式日期。如果您使用"10/Jan/2014"(或#10/Jan/2014#; #是日期文字标记),VBA将回退到dd / MMM / yyyy,因为它不能是其他任何东西。

如果您需要VBA了解您的本地日期格式,请使用:

Sub hello()
    ActiveSheet.Cells(1, 1) = DateValue("10/01/2014")
End Sub

... since(如VBA帮助文件中所述):

  

DateValue根据以下内容识别月,日和年的订单   您为系统指定的短日期格式。 DateValue也   识别包含月份名称的明确日期,或者长   或缩写形式。

因此,只要您的PC设置了正确的区域设置,DateValue()就应该了解您的首选日期格式。