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

当系统设置为欧洲日期格式时,Excel会将我的日期搞乱,excel,vba,Excel,Vba,以下是我正在做的: 1.在控制面板中,我设置系统日期格式如下:dd/MM/yyyy 2.我创建以下简单宏: Sub hello() ActiveSheet.Cells(1, 1) = "10/01/2014" End Sub 我运行它,并在单元格中获得以下日期(1,1):2014年10月1日 当日期小于12时,它会将日期转换为美式格式(MM/dd/yyyy),当日期大于12时,它无法将其转换并将日期正确地写入单元格中,而是作为文本。 我在尝试从VSTO写入日期时首先发现了这一点,但后来

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

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

    VBA认为所有日期文字都是美国格式的,除非文字不可能是有效的美国格式的日期。如果使用
    “2014年1月10日”
    (或
    #2014年1月10日#
    #
    是日期文字标记),VBA将返回到dd/MMM/yyyyy,因为它不能是其他任何东西

    如果需要VBA来理解本地日期格式,请使用:

    Sub hello()
        ActiveSheet.Cells(1, 1) = DateValue("10/01/2014")
    End Sub
    
    …自(如VBA帮助文件中所述):

    DateValue
    根据 为系统指定的短日期格式。日期值也 识别包含月份名称的明确日期,无论是长日期还是短日期 或缩写形式


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

    旁白:叹气
    YYYY-MM-DD
    是一种标准表示法,48年来避免了MM/DD或DD/MM混淆,谢谢!你让我走对了路!谢谢,这解决了VBA!然而,我的问题不在VBA中,而是在VSTO中,我使用range.set_Values(array)方法将日期写入一系列单元格。有没有一种方法可以在C#代码中使用类似于DateValue()的东西?请查看DateTime构造函数和
    Parse
    ParseExact