我创建了这个子目的,意图采用默认美国日期约定,将其改为英国格式" yyyy-mm-dd"然后转换为字符串。我想在转换为字符串之前更改格式,因为它更容易为我的目的而工作。但是,虽然单元格格式已更改,但字符串似乎以原始美式格式保留。我怎样才能解决这个问题?是什么原因造成这种情况?
Sub Changedate()
Sheet1.Cells(1, 3).Select
Selection.NumberFormat = "yyyy-mm-dd;@"
Sheet1.Cells(1, 4).Select
Selection.NumberFormat = "yyyy-mm-dd;@"
Dim firstDate As String
Dim secondDate As String
firstDate = Str(Sheet1.Cells(1, 3).Value)
secondDate = Str(Sheet1.Cells(1, 4).Value)
MsgBox firstDate
Sheet1.Cells(1, 3).Select
Selection.NumberFormat = "m/d/yyyy"
Sheet1.Cells(1, 4).Select
Selection.NumberFormat = "m/d/yyyy"
End Sub
答案 0 :(得分:1)
你应该使用:
firstDate = format(Sheet1.Cells(1, 3).Value, "yyyy-mm-dd")
Excel日期只是一个数字,更改的NumberFormat只会影响它的显示方式。
Str()可能使用您的系统默认日期格式,您必须使用Format()来强制它。
答案 1 :(得分:1)
您还可以尝试使用.text
属性而不是.value
。 .value
获取单元格内容而不进行格式化。所以你可能会看到使用.value
错误地格式化字符串。 .text
使用格式获取单元格内容(观察运行时,如果在循环中运行,则可能需要很长时间。).text
是最慢的方法获取单元格内容,但只有几行或运行它不会有太大的区别