我经常遇到一个问题,当在工作表中复制日期时,日期会从英国格式转换为美国格式。我创建了以下代码,我在这里检索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
答案 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