如何选择名称中包含最新日期的文件?

时间:2013-02-10 10:32:24

标签: ms-access access-vba

我正在将CSV文件导入MS Access中的表。 但是,文件夹中有许多文件具有相同的扩展名,名称包含“mm_dd_yyyy”格式的日期。

示例:假设我有两个CSV文件:

  • my_music_02_10_2013_01_58_07_PM.csv
  • my_music_02_11_2013_03_04_07_PM.csv

两个文件都位于同一文件夹 myfolder 中。我想导入名称中包含最新日期的文件。

以下是我的代码的简短摘录:

strPath = "F:\myfolder\"
strFile = Dir(strPath & "my_music" & "*.csv")

如何确定哪些“my_music * .csv”最新?

1 个答案:

答案 0 :(得分:1)

在我看来,关键是从每个文件名中提取日期/时间,以便您可以比较这些文件名以找出哪些是最新的。

这是一个测试下面功能的立即窗口会话。如果找不到表示有效日期的字符串,则该函数返回null。

? DateFromFilename("my_music_02_10_2013_01_58_07_PM.csv")
2/10/2013 1:58:07 PM 
? DateFromFilename("my_music_no_date_here.csv")
Null

Public Function DateFromFilename(ByVal pFileName As String) As Variant
    Dim strBaseName As String
    Dim strDate As String
    Dim strPieces() As String
    Dim varReturn As Variant

    varReturn = Null
    strBaseName = Split(pFileName, ".")(0)
    'Debug.Print "strBaseName: " & strBaseName
    strPieces = Split(strBaseName, "_")
    If UBound(strPieces) = 8 Then
        strDate = strPieces(4) & "-" & strPieces(2) & _
            "-" & strPieces(3) & " " & strPieces(5) & ":" & _
            strPieces(6) & ":" & strPieces(7) & " " & strPieces(8)
    End If
    'Debug.Print "strDate: " & strDate
    If IsDate(strDate) Then
        varReturn = CDate(strDate)
    End If
    DateFromFilename = varReturn
End Function