【问题标题】:Current date displayed in US rather than expected format as it was previously当前日期以美国显示,而不是以前的预期格式
【发布时间】:2021-02-11 11:00:44
【问题描述】:

此 Excel VBA 代码不再工作。

Private Sub cmdAjouter_Click()
Dim ws As Worksheet
Dim lr As Integer

Set ws = ThisWorkbook.Sheets("Achats"

lr = ws.Range("A" & Rows.Count).End(xlUp).Row + 1
ws.Range("M" & lr).Value = Format(Date, "dd/mm/yyyy")

'[...]

End Sub

今天是 2020 年 2 月 11 日,它应该返回日期为“11/02/2020”(法语格式),但它返回“02/11/2020”(美国格式)。

【问题讨论】:

  • 日期格式将遵循 windows 的区域设置。也许您的机器区域已更改?
  • 单元格本身设置为日期格式(短日期),格式为dd/mm/yyyy,
  • 可能是这样,但Format 函数将使用字符串设置单元格值,然后单元格将尝试将其转换为日期。试试这个来证明我的观点,只需将日期格式更改为与您想要的相反的格式,您就会得到您想要的。 ws.Range("M" & lr).Value = Format(Date, "mm/dd/yyyy")
  • @ArcherBird :我在 Windows 中的区域设置设置为法语,但我的 Excel 是英文的(关于与我使用的其他程序的兼容性问题)。在 Windows 和 Excel 中,日期格式的设置方式相同(dd/mm/aaaa)! :(

标签: excel vba date-formatting


【解决方案1】:

最好将其存储为实际的Date 而不是String,只需使用.NumberFormat 属性对其进行格式化,这样就不会尝试根据您的区域再次转换它设置。

ws.Range("M" & lr).NumberFormat = "dd/mm/yyyy"
ws.Range("M" & lr).Value = Date

如果日期是 2 月 13 日这样的日期,您的方法可能会正常工作,因为这样就不会因为 13 是一个月而感到困惑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    相关资源
    最近更新 更多