英国日期转换为美国日期

时间:2019-02-20 10:16:48

标签: excel vba

我经常遇到一个问题,当在工作表中复制日期时,日期会从英国格式转换为美国格式。我创建了以下代码,我在这里检索D / M / Y并将其放入字符串中,以期将其正确编码为正确的日期。但是,这仍转换为美国日期。

在确保英国格式日期举行方面的任何帮助将不胜感激。

Dim mydate As Date
Dim sDay As String
Dim sMonth As String
Dim sYear As String
Dim sYesterdayDate As String
Dim ws As Variant

mydate = wbRecFile.Sheets(1).Range("c2").value **Date in C2 = 07/02/2019
sDay = Format(mydate, "DD")
sMonth = Format(mydate, "MM")
sYear = Format(mydate, "YYYY")

sYesterdayDate = sDay & "/" & sMonth & "/" & sYear

wbRecFile.Activate

For Each ws In ActiveWorkbook.Worksheets

    With ws
    lastrow = ws.Cells(Rows.Count, "A").End(xlUp).Row
    End With

ws.Range("C1:C" & lastrow).value = sYesterdayDate

Next ws

4 个答案:

答案 0 :(得分:1)

您正以错误的方式处理此问题。 Excel将日期存储为独立于其显示格式的数字值,如果尝试通过将日期存储为字符串来避开日期,则会破坏使用这些日期执行计算的能力。

如果要将范围设置为dd/mm/yyyy,请将其NumberFormat设置为"dd\/mm\/yyyy"(如果省略反斜杠,则会看到连字符而不是斜杠)。但是,最好使用默认的日期格式,该格式根据用户的系统设置显示日期,因为这是与工作簿进行交互的人的首选格式。

答案 1 :(得分:0)

从单元格获取日期值通常对我有用:

Dim mydate As Date
Dim ws As Variant

mydate = DateValue(wbRecFile.Sheets(1).Range("c2").value )

wbRecFile.Activate

For Each ws In ActiveWorkbook.Worksheets

    With ws
        lastrow = ws.Cells(Rows.Count, "A").End(xlUp).Row
    End With

ws.Range("C1:C" & lastrow).value = mydate

Next ws

编辑:将我的更改应用于原始代码。

答案 2 :(得分:0)

我认为最好的方法是将日期转换为文本并将其分割:

Option Explicit

Sub test()

    Dim Day As String, Month As String, Year As String
    Dim USFormat As String, UKFormat As String

    USFormat = "2019/02/20"

    Day = Right(USFormat, 2)
    Month = Mid(USFormat, 6, 2)
    Year = Left(USFormat, 4)

    UKFormat = Day & "/" & Month & "/" & Year

End Sub

答案 3 :(得分:0)

过去我曾经用过类似的东西。最好不要使用任何接近关键字的变量名,而要使用日期。类似@error 1004的方法

npm run startWithAllOptions