VBA的IsDate函数无法识别SQL Server日期时间

时间:2015-05-19 21:25:14

标签: sql-server excel vba excel-vba datetime

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

2 个答案:

答案 0 :(得分:3)

似乎VBA不喜欢日期字符串中的小数时间。

您可以执行以下操作之一:

  1. 删除您已经注意到的小数时间。
  2. 或者您可以使用CDate(Evaluate("=DateValue(""2015-01-29 19:23:00.000"")"))
  3. 打包它

    这是一个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

输出

enter image description here