Вывести список файлов из папки в списке со списком последних файлов - PullRequest
3 голосов
/ 23 апреля 2020

У меня есть список, в котором отображаются файлы XLSM из папки Archive и файлы PDF из папки PDF в папке основного файла XLSM, Main.

C:\Main\Archive\, C:\Main\PDF\, XLSM, ищущий эти элементы, находится в папке root C:\Main\

Я хотел бы отобразить самые последние измененные файлы в порядке убывания .

Таким образом, если файл был создан сегодня, он будет отображаться сверху, а затем файл, созданный вчера и т. Д.

Код, который у меня есть, является просто стандартным AddItem для ListBox1

MyFile = Dir(MyFolder & "\*.xlsm")
Do While MyFile <> ""
    ListBox1.AddItem MyFile
    MyFile = Dir
Loop

Эти файлы также имеют имена, начинающиеся с FSO или PPG, за которыми следует «номер заявки», например 1031, название компании, тип задания и простая дата.

FSO 10333 Co Name Job Type 042220.xlsm
PPG 10332 Co Name Job Type 042120.xlsm

Так имена отображаются в списке. PDF-файлы с тем же именем.

Спасибо за ваше время!

Ответы [ 2 ]

3 голосов
/ 23 апреля 2020

А как насчет следующего:

  • Использование FileSystemObject для доступа к таким свойствам файла, как: GetExtensionName, DateCreated и Name.
  • Использование Dictionary объект для создания библиотеки и хранения значений в памяти.
  • Использование объекта ArrayList для создания списка для хранения значений времени создания, которые мы затем можем Sort по возрастанию и Reverse для создания по убыванию списка .
  • Затем мы можем выполнить итерацию ArrayList, чтобы вернуть значения из нашего Dictionary и добавить их к ListBox по порядку.

Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
Dim arrList As Object: Set arrList = CreateObject("System.Collections.ArrayList")
Dim FSO: Set FSO = CreateObject("scripting.FileSystemObject")
Dim oFolder, oFile

Set oFolder = FSO.getfolder(MyFolder)
For Each oFile In oFolder.Files
    If FSO.GetExtensionName(oFile) = "xlsm" Then
        dict(oFile.DateCreated) = oFile.Name
        arrList.Add oFile.DateCreated
    End If
Next

arrList.Sort
arrList.Reverse

For i = 0 To arrList.Count - 1
    ListBox1.AddItem dict(arrList(i))
Next
1 голос
/ 23 апреля 2020

В поддержку моего комментария, что-то вроде этого поможет вам получить дату из имени файла. Затем вы можете использовать Excel для сортировки по этому.

Sub testing()

Debug.Print get_date("FSO 10333 Co Name Job Type 042220.xlsm")

End Sub

Function get_date(strInput As String) As Date

Dim lngLength As Long
Dim lngLastSpace As Long
Dim strEndSection As String

lngLength = Len(strInput)
lngLastSpace = InStrRev(strInput, " ")
strEndSection = Mid(strInput, lngLastSpace)
strEndSection = Trim(Split(strEndSection, ".")(0))   '   The date bit

get_date = DateSerial(Mid(strEndSection, 5, 2), _
                            Mid(strEndSection, 1, 2), _
                            Mid(strEndSection, 3, 2))

End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...