2013-02-10 60 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