Поиск самого старого и самого нового файла в каталоге

#excel #vba

#excel #vba

Вопрос:

Я создаю макрос Excel, в котором мне нужно указать время первого и последнего изменения файла на листе Excel, например, время первого изменения файла журнала и время последнего изменения.(Предположим, что в каталоге имеется несколько файлов журнала). Мне нужно измененное время для первого файла и последнего файла.

Я не могу сравнить дату, пожалуйста, предложите.

 Sub test()
Dim fso As Object
Dim fol As Object
Dim fil As Object
Dim temp As Date

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fol = fso.GetFolder("Z:LogfilesMonitorLogon")

    For Each fil In fol.Files
        temp = fil.DateLastModified
    Next fil
MsgBox temp
End Sub
  

Комментарии:

1. Вы не сохраняете никакой даты… таким образом, вы не можете сравнивать. Создайте массив типа Date, а затем, я думаю Application.Max(Datearr) , он должен предоставить вам самый новый и Application.Min(Datearr) должен предоставить вам самый старый.

Ответ №1:

Вам просто нужно сохранить самую старую и самую новую дату при циклическом просмотре каталога:

 Option Explicit

Sub test()
    Dim fso As Object
    Dim fol As Object
    Dim fil As Object
    Dim temp As Date

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fol = fso.GetFolder("C:Temp")

    Dim oldest As Date
    Dim oldestFile As String
    Dim newest As Date
    Dim newestFile As String
    For Each fil In fol.Files
        temp = fil.DateLastModified
        If (newest = #12:00:00 AM#) Or (temp > newest) Then
            newest = temp
            newestFile = fil.Path
        End If
        If (oldest = #12:00:00 AM#) Or (temp < oldest) Then
            oldest = temp
            oldestFile = fil.Path
        End If
    Next fil
    MsgBox "Oldest File: " amp; oldestFile amp; " (" amp; oldest amp; ")" amp; vbCrLf amp; _
           "Newest File: " amp; newestFile amp; " (" amp; newest amp; ")"
End Sub
  

Ответ №2:

 Option Explicit

Sub LoopAllFilesInFolder()

    Dim strFolder As String
    Dim Library As Object, File As Object, Folder As Object

    strFolder = "Z:LogfilesMonitorLogon"

    Set Library = CreateObject("Scripting.FileSystemObject")
    Set Folder = Library.GetFolder(strFolder)
    Set File = Folder.Files

    For Each File In File

        MsgBox File.Name amp; " details:" amp; vbNewLine amp; vbNewLine amp; _
                "Date Created: " amp; File.datecreated amp; vbNewLine amp; _
                "Date Last Accessed: " amp; File.datelastaccessed amp; vbNewLine amp; _
                "Date Last Modified: " amp; File.dateLastModified

    Next

    Set Library = Nothing
    Set Folder = Nothing
    Set File = Nothing

End Sub