使用VBA读写后,Excel日期已更改(月和日已交换)
我写了两行简单的VBA代码来读取单元格并将日期写入单元格,但在运行之后,月和日意外地交换了。这些步骤是:使用VBA读写后,Excel日期已更改(月和日已交换),excel,vba,date,formatting,Excel,Vba,Date,Formatting,我写了两行简单的VBA代码来读取单元格并将日期写入单元格,但在运行之后,月和日意外地交换了。这些步骤是: 在单元格A1中输入日期“2017年11月1日”。日期现在显示为“2017年11月1日” 运行以下代码行: Dim s As String s = Cells(1, 1).value Cells(2, 1).value = s 单元格B1现在显示“11/01/2017”,并交换了月份和日期 我在Windows区域中的短日期格式设置为“dd/MM/yyyy”,因此字符串s存储值“01/11/
Dim s As String
s = Cells(1, 1).value
Cells(2, 1).value = s
Dim s As String
s = Cells(1, 1).Value
s=单元格(1,1)。value
将单元格的值
存储在字符串中。不是在牢房里看到的
比如说
如果您的单元格具有2017年11月1日
,但格式设置为显示2017年11月1日
,则s
将存储2017年11月1日
。这不是约会。它是一个字符串
。如果你不相信我,那就试试这个
Dim s As String
s = Cells(1, 1).Value
Debug.Print s + 1 '<~~ You will get a Type Mismatch error
屏幕截图
将Dim s作为字符串更改为Dim s作为日期
或将单元格(2,1)更改为单元格(2,1)。value=s
更改为单元格(2,1)。value=DateValue(s)
谢谢,我同意这是一种变通方法,因为在第一种方法中,没有字符串的转换,因此没有歧义,在第二种方法中,DateValue在执行转换之前检查短日期格式设置。但我仍然想知道为什么Excel在将字符串直接写入单元格时会出现这种行为,因为这样做时可能不记得采用您的方法,我希望避免这种情况。这不是一种解决方法。。。我已经在打答案了。给我几分钟:)谢谢,我知道你的方法很有效,我也可以考虑使用CDate
检查区域中的短日期设置,将字符串转换为日期。但我感兴趣的是基于Excel的隐式转换。您提到“以一种感觉最好的格式(基于区域设置)”-您能否澄清区域设置Excel中的哪个字段?
Dim s As Date
s = Cells(1, 1).Value
Debug.Print s + 1 '<~~ You will get a proper date
Sub SampleA()
Dim s As Date
s = Cells(1, 1).Value
Cells(2, 1).Value = s
End Sub
Sub SampleB()
Dim s As String
s = Cells(1, 1).Value
Cells(2, 1).Value = DateValue(s)
End Sub
Sub SampleC() '<~~ As Suggested in the other answer
Dim s As String
s = Cells(1, 1).Value
Cells(2, 1).NumberFormat = "dd/MM/yyyy"
Cells(2, 1).Value = s
End Sub