迄今为止的VBA字符串(以毫秒为单位)

Gre*_*edo 4 excel datetime vba

我有以下形式的字符串"yyyy-mm-dd hh:mm:ss.mmm"(结尾为毫秒)

我想将其转换为一个数字,最好是一个Date保留所有信息的数字

我试过了CDate(),例如。

Dim dateValue As Date
dateValue = CDate("2017-12-23 10:29:15.223")
Run Code Online (Sandbox Code Playgroud)

但是出现类型不匹配错误

mic*_*ael 5

一个Date类型可保存自此以来的天数,December 30 1899精度为一秒。尽管仍然可以通过将日期存储为货币类型来保留毫秒,因为与“日期/双精度”相比,它可以容纳4个额外的数字。

因此,一种替代方法是将日期作为时间戳存储在Currency表示自December 30 1899以下日期起经过的秒数的类型中:

Public Function CDateEx(text As String) As Currency
    Dim parts() As String
    parts = Split(text, ".")
    CDateEx = CCur(CDate(parts(0)) * 86400) + CCur(parts(1) / 1000)
End Function
Run Code Online (Sandbox Code Playgroud)

并将时间戳转换回字符串:

Public Function FormatDateEx(dt As Currency) As String
    FormatDateEx = Format(dt / 86400, "yyyy-mm-dd HH:mm:ss") & "." & ((dt - Fix(dt)) * 1000)
End Function
Run Code Online (Sandbox Code Playgroud)