指定フォルダ内にある、一番最後に更新されたファイルを取得

必要に迫られて、指定フォルダ内にある「一番最後に更新されたファイル」を取得することになった。さて、どうしたものか。
f:id:Infoment:20190207222409p:plain

我が家の環境で、とりあえず実験。まず最初に、試しに適当なフォルダを選んで、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

結果、こんなものが取れた。
f:id:Infoment:20190207224013p:plain

何だ、この謎の集団は。あ、思い出した。あれか。
infoment.hatenablog.com

表示された順序を見ると、名前順に取ってきている、ように見える。並びに反して前後していることから、作成日または更新日順ではないらしい。
f:id:Infoment:20190207224531p:plain

この辺りは引き続き調べるとして、結局今回は愚直に一つずつ比較し、最後に更新したファイルを特定することにした。

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

テスト結果は、一応良好なように見える。
f:id:Infoment:20190207225341p:plain
f:id:Infoment:20190207225451p:plain

明日、職場で確認してみるとしよう。

参考まで。