【问题标题】:Timestamp day and month swapped after inserting插入后交换时间戳日期和月份
【发布时间】:2020-01-15 01:28:56
【问题描述】:

我有一个代码可以打开一个模板文件,然后将今天的日期放在一个单元格中。但是当这一天是 12 或更低时,它会交换日期和月份。我的猜测是 VBA 使用美国日期。我如何交换这个 ot Europe 日期?

在代码中,我将日期格式化为:dd/MM/yyyy

这是我的完整代码:

    With Workbooks("Projectsjabloon.xlsm").Sheets("Planning")
    .Range("D1").Value = Format(Now(), "dd/MM/yyyy")
    .Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
    False, AllowInsertingRows:=True, AllowSorting:=True, 
    AllowFiltering:=True
    .SaveAs (ProjectFile), FileFormat:=52
    End With

【问题讨论】:

  • 您的计算机的国际日期设置是什么?

标签: excel vba


【解决方案1】:

我建议在您的代码中替换这一行:

.Range("D1").Value = Format(Now(), "dd/MM/yyyy")

与:

.Range("D1").FormulaLocal = Date
  • 如果您只需要日期(而不是时间部分),最好调用Date 而不是Now
  • 我的理解是Range.FormulaLocal 将为您处理任何与语言环境相关的问题(根据您的应用程序设置)。
  • 为我工作(因为我得到了dd/mm/yyyy 输出)。

【讨论】:

  • 这对我很有用。感谢所有回复。
【解决方案2】:

正确,VBA“说”美式,因此日期将使用美式格式进行解释。

只是为了向线程添加一个解决方案,您可以使用.Range("D1").Value = Format(Now() - 1, "yyyy-mm-dd") 而不是.Range("D1").Value = Format(Now(), "dd/MM/yyyy")。请注意,我需要使用Now() - 1 来复制昨天的日期!

yyyy-mm-dd 是最通用和公认的日期格式(因为它遵循 ISO 标准),因此 VBA 将能够正确解释和转换日期。

上一个结果:

新结果:

【讨论】:

    【解决方案3】:

    添加以下代码以将单元格格式化为所需的日期格式:

    .Range("D1").NumberFormat = "dd/MM/yyyy"
    

    您还可以使用以下代码将其更改为使用本地格式代码,就像在 Excel 本身中那样

    .Range("D1").NumberFormatLocal = "TT/MM/JJJJ"
    

    (在这种情况下是德语格式,T = Tag/Day,M = Monat/Month,J = Jahr/Year)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-17
      • 2015-11-22
      • 1970-01-01
      • 2020-03-15
      • 2018-01-24
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      相关资源
      最近更新 更多