открыть 3 файла из папки по дате - PullRequest
0 голосов
/ 31 марта 2019

Я хочу открыть 3 файла из папки по дате в Corel Draw. Я нашел один макрос и изменил, но открыл только один файл

Sub openLastModified()
    Dim folderPath As String, tableName As String, latestTblName As String
    Dim modifiedDate As Date

    folderPath = "C:\test\"

    tableName = Dir(folderPath & "*.cdr")

    Do While tableName <> vbNullString
        modifiedDate = FileDateTime(folderPath & tableName)
        If latestModified < modifiedDate Then
            latestModified = modifiedDate
            latestTblName = tableName
        End If
        tableName = Dir()
    Loop

    OpenDocument folderPath & latestTblName
End Sub

1 Ответ

0 голосов
/ 31 марта 2019

Похоже, вы хотите открыть три самых последних измененных файла в вашем каталоге C: / test /.

Самый простой способ сделать это - загрузить имена файлов иих соответствующие даты модификации в массивы, сортируйте их по дате модификации и загружайте три из нижней части вашего массива.Есть и другие ответы о переполнении стека , которые помогут вам эффективно сортировать массивы.

К сожалению, в VBA нет простых встроенных функций сортировки.Чуть менее чистый метод - загрузить имена файлов и соответствующие даты их изменения в лист, а затем воспользоваться функциями сортировки Excel , снова считывая нижнюю часть вашего отсортированного диапазона.

Теперь, если вы интересуетесь только тремя самыми последними изменениями и когда-либо будете интересоваться только этими тремя , вот быстрое и грязное изменение существующего кода:

Sub openLastModified()
    Dim folderPath As String, tableName As String, latestTblName(2) As String
    Dim modifiedDate As Date
    Dim latestModified(2) As Date

    folderPath = "C:\test\"

    tableName = Dir(folderPath & "*.cdr")

    Do While tableName <> vbNullString
        Dim i As Long

        modifiedDate = FileDateTime(folderPath & tableName)

        For i = 0 To 2
            ' Check if this file's modification date is later than that of each
            ' in the latestTblName array, starting with the most recent.
            If latestModified(i) < modifiedDate Then
                Dim j As Long

                ' Move remaining values down in the array.
                For j = 1 To i Step -1
                    latestModified(j + 1) = latestModified(j)
                    latestTblName(j + 1) = latestTblName(j)
                Next j

                ' Place the file name & modification date in the arrays.
                latestModified(i) = modifiedDate
                latestTblName(i) = tableName
                Exit For
            End If
        Next i

        tableName = Dir()
    Loop

    For i = 0 To 2
        OpenDocument folderPath & latestTblName(i)
    Next i
End Sub
...