Visual Basic日期对象从具有索引的字符串解析

时间:2017-07-18 14:41:39

标签: excel vba excel-vba date

我想问一下,在VBA中是否有内置函数,它将根据指定的格式从字符串中解析日期对象。

例如:

dateString = "24-4-12"
VBADateFunc(dateString, "dd-m-yy")

返回一个日期对象,用提供的格式解释dateString字符串。

我会在这方面讨论你的想法。

谢谢

2 个答案:

答案 0 :(得分:2)

你走了:

Public Sub TestMe()

    Dim dtMyDate    As Date

    dtMyDate = Format("24-4-12", "dd-mm-yy")

    Debug.Print dtMyDate
    Debug.Print Format(dtMyDate, "yyyy")
    Debug.Print Format(dtMyDate, "dd-mmm-yy")

    'For Non-Europeans:
    dtMyDate = Format(DateSerial(2012, 4, 24), "dd-mm-yy")
    Debug.Print dtMyDate
    Debug.Print Format(dtMyDate, "yyyy")
    Debug.Print Format(dtMyDate, "dd-mmm-yy")

End Sub

从评论中 - 通常,日期是MS Excel和VBA中的长值。今天的日期可以在即时窗口中看到:

?clng(now)
 42935 

如果你想进一步使用42935值,你可能会这样:

?Format(42934,"dd-mm-yyyy")

注意:对于拥有ActiveWorkbook.Date1904 = False的所有人来说,今天是42934。对于那些使用1904开始日历的人,今天是42935-4*365-1

答案 1 :(得分:2)

我最终编写了自己的函数来扫描日期。抛弃错误处理:

Function ScanDate(s As String, Optional order As String = "DMY", Optional separator As String = "-") As Date

    Dim parts() As String
    parts = Split(s, separator)
    Dim day As Long, month As Long, year As Long
    day = parts(InStr(order, "D") - 1)
    month = parts(InStr(order, "M") - 1)
    year = parts(InStr(order, "Y") - 1)

    ScanDate = DateSerial(year, month, day)

End Function