【问题标题】:Datevalue can't read december month日期值无法读取 12 月
【发布时间】:2014-12-17 00:52:11
【问题描述】:

我在处理不同日期的宏 vba。 我对 Decembre 有一个不全面的错误。例如

DateValue("11-NOV-14")

返回:2014 年 11 月 11 日

DateValue("11-DEC-14")

返回错误类型“13”

我已经尝试将字符串放入 var 并将其传递给 DateValue 但结果相同。

也许我可以解决这个问题,但我想知道为什么我有这个神秘的错误。

感谢您的帮助。

【问题讨论】:

  • 这些值是否真的在您的代码中硬编码并返回错误?还是它们真的是变量,并且您已在问题中将它们作为文本输入?我问的原因是,如果我运行以下代码,它可以正常工作并输出 11/12/2014 Sub test() MsgBox DateValue("11-DEC-14") End Sub
  • 嗨,马克,是的,它是硬编码的
  • 我承认在这里有点抓不住稻草,但由于 DateValue 会受到系统日期设置的影响,您能否确认 Windows 中日期的语言和区域设置?
  • 它在我的专业计算机上,因此设置访问受到限制。但我想这是欧洲格式(法语)。无论如何,我想“DD-MMM-AA”是一种全球格式。

标签: vba excel


【解决方案1】:

您的问题与系统有关。十一月过得很好,因为在法语中,十一月 = 十一月,所以“11-NOV-14”等于英文版。

但是,“Décembre”不同,因为它在第二个字母上有重音。事实上,在法语系统上,这样就可以了:

a = DateValue("11-DéC-14")

虽然不是这样:

a = DateValue("11-DEC-14")

为了避免这个问题并使代码“与语言无关”(不要求用户从控制面板更改日期格式),我认为您应该添加一个将日期从字符串转换为日期值的函数:

Function MyDateValue(ByVal myDate As String) As Date
    myDay = Left(myDate,2)
    myMonth = Right(Left(myDate,6),3)
    Select Case myMonth
        Case "JAN":
            myMonth = 1
        'etc.
    End Select
    myYear = Right(myDate,2)
    MyDateValue = DateSerial(myYear,myMonth,myDay)
End Function

因此,您将能够使用myDateValue 而不是DateValue,并确保它适用于您的输入数据,无论系统语言是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 2018-08-09
    • 2016-01-05
    • 1970-01-01
    • 2021-08-12
    相关资源
    最近更新 更多