2013-02-10 87 views
2

我正在将一个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

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

这是一个即时窗口会话,测试下面包含的功能。如果函数找不到表示有效日期的字符串,则该函数返回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 
+0

您好HandsUp,感谢您的代码:这里是我的文件的确切名称,日期的变化,根据到时他们正在处理: my_music_02_10_2013_01_58_07_PM.csv – Asynchronous 2013-02-10 20:00:15

+0

所以在这种情况下,它不会如果两个文件具有相同的时间,只要它们没有相同的名称和相同的时间,那么这很重要吗? – Asynchronous 2013-02-10 22:53:52

+0

日期是* dd_mm_yyyy *或* mm_dd_yyyy *格式文件名的一部分吗? – HansUp 2013-02-11 03:50:16

相关问题