SQL Server datetime
值在CSV文件中表示为2015-01-29 19:23:00.000
(例如)。
不幸的是,VBA的IsDate
函数在Excel宏中进行评估时没有将其识别为有效日期(我因为小数秒而猜测)。 DateValue
也无法转换价值。
是否有VBA调整才能完成这项工作,还是我需要去掉小数秒?
**编辑**
为了使问题更加复杂,ActiveCell.Value
将文本值(例如2015-05-20 15:31:30.000
)转换为小数(例如42144.4166666667
)。因此,Evaluate
技巧不会起作用。
为了更好地说明情况,请参阅以下代码:
'
' format a CSV file for better readability
'
Sub FormatCSV
' move top-left corner
Range("A2").Select
' while the current cell's value is not empty
Do While Not IsEmpty(ActiveCell)
' 2015-05-20 15:31:30.000 => 42144.4166666667
Debug.Print ActiveCell.Value
' if the cell contains a date
If IsDate(ActiveCell) Then
' format entire column as date/time
ActiveCell.EntireColumn.NumberFormat = "mm/dd/yy hh:mm"
End If
' resize
ActiveCell.EntireColumn.AutoFit
' move a column to the right
ActiveCell.Offset(0, 1).Select
Loop
' move top-left corner
Range("A2").Select
End Sub
答案 0 :(得分:3)
似乎VBA不喜欢日期字符串中的小数时间。
您可以执行以下操作之一:
CDate(Evaluate("=DateValue(""2015-01-29 19:23:00.000"")"))
这是一个SBA VBA Sub:
Sub Macro1()
Dim d As String
Dim v As Variant
d = "2015-01-29 19:23:00.000"
v = CDate(Evaluate("=DateValue(""" + d + """)"))
Debug.Print IsDate(v)
Debug.Print v
End Sub
打印出来:
真
2015年1月29日
答案 1 :(得分:3)
与polymorphic
帖子相同,但有一些差异
@chancea
输出