如何以dd / mm / yyyy格式在单元格中获取今天的日期?

时间:2018-11-04 10:46:05

标签: excel vba date excel-2016 regional-settings

我想以(dd/mm/yyyy)格式将今天的日期(2018年11月4日)放入一个单元格中:

    04/11/2018

但是到目前为止,每次尝试都会导致(mm/dd/yyyy格式):

    11/04/2018

原始代码是:

    Dim sToday As String
    sToday = Date
    Cells(nCurrentRow, nCurrentColumn) = sToday

我尝试过的包括:

    Cells(nCurrentRow, nCurrentColumn).Value = sToday

和:

    Cells(nCurrentRow, nCurrentColumn).Select
    Selection.NumberFormat = "dd/mm/yyyy;@"

和:

    sToday = Format(Date, "dd-mm-yyyy")

当我在消息框中输出字符串时,它总是以所需的格式显示:04/11/2018

即使我以正确的格式04/11/2018将日期作为纯字符串发布日期,格式仍然会改变!

Windows 10区域设置符合我的要求(英国日期格式)。

单元格格式也设置为dd/mm/yyyy

3 个答案:

答案 0 :(得分:1)

我认为您的算法正被VBA以美国为中心的日期首选项所困扰。 无论您的Windows短日期区域设置如何,您所需要做的就是将变量插入为Date(而不是字符串)。

当VBA将今天的日期转换为字符串时,将采用美国格式。因此,目标单元格中​​的numberformat不会对字符串产生任何影响,VBA格式功能也不会产生任何影响。两者都作用于数字/日期,而不作用于字符串(使用方式)。

例如,尝试:

With Cells(1, 1)
    .NumberFormat = "dd/mm/yyyy"
    .Value = Date
End With

或者,使用您的变量分配:

   Dim dToday As Date
dToday = Date

With Cells(nCurrentRow, nCurrentColumn)
    .Value = dToday
    .NumberFormat = "dd/mm/yyyy"
End With

答案 1 :(得分:0)

Sub test()
Dim sToday As String
sToday = Date
sToday = Format(sToday, "dd mm yyyy")

MsgBox sToday
Cells(1, 1).Value = sToday
End Sub

我尝试了这一点,并且得到了希望的结果。 解决方法是将日期保存为字符串并格式化该字符串。

答案 2 :(得分:0)

  

如何以dd / mm / yyyy格式在单元格中获取今天的日期?

由于您的配置为英国格式:

Ctrl + ;