指定フォルダ内にある、一番最後に更新されたファイルを取得
必要に迫られて、指定フォルダ内にある「一番最後に更新されたファイル」を取得することになった。さて、どうしたものか。
我が家の環境で、とりあえず実験。まず最初に、試しに適当なフォルダを選んで、FileSystemObjectでファイルパス等を取得してみた。
Sub test() ' Microsoft Scripting Runtime 参照済み Dim FSO As FileSystemObject Set FSO = New FileSystemObject Dim FolderPath As String FolderPath = "C:\Temp" Dim File As File Dim FilesCollection As Files Set FilesCollection = FSO.GetFolder(FolderPath).Files ' フォルダ内の各ファイルについて、情報を配列に格納。 ' 1:通し番号 ' 2:ファイル作成日 ' 3:ファイル更新日 ' 4:ファイル名 Dim seq() As Variant ReDim seq(1 To FilesCollection.Count, 1 To 4) Dim i As Long: i = 1 For Each File In FilesCollection seq(i, 1) = i seq(i, 2) = File.DateCreated seq(i, 3) = File.DateLastModified seq(i, 4) = File.Name i = i + 1 Next ' 取得した配列をシートに貼り付け。 Cells(2, 1).Resize(i - 1, 4) = seq End Sub
結果、こんなものが取れた。
何だ、この謎の集団は。あ、思い出した。あれか。
infoment.hatenablog.com
表示された順序を見ると、名前順に取ってきている、ように見える。並びに反して前後していることから、作成日または更新日順ではないらしい。
この辺りは引き続き調べるとして、結局今回は愚直に一つずつ比較し、最後に更新したファイルを特定することにした。
Function GetLatestModifiedFilePath(FolderPath As String) As String Dim FSO As FileSystemObject Set FSO = New FileSystemObject Dim LatestFilePath As String Dim LatestModified As Date Dim File As File Dim FilesCollection As Files Set FilesCollection = FSO.GetFolder(FolderPath).Files ' 指定フォルダ内のファイル一つ一つについて、 ' 更新日付を比較する。 For Each File In FilesCollection If LatestModified < File.DateLastModified Then LatestModified = File.DateLastModified LatestFilePath = File.Path End If Next ' 一番最後に更新されたファイルパスを取得。 GetLatestModifiedFilePath = LatestFilePath End Function
Sub test() MsgBox GetLatestModifiedFilePath("C:\Temp") End Sub
テスト結果は、一応良好なように見える。
明日、職場で確認してみるとしよう。
参考まで。