Excel 在列表框中列出文件夹中的文件,最新文件首先显示

Excel 在列表框中列出文件夹中的文件,最新文件首先显示,excel,vba,Excel,Vba,我有一个列表框,用于显示文件夹Archive中的XLSM文件和主XLSM文件main文件夹中名为PDF的PDF文件 C:\Main\Archive\,C:\Main\PDF\,查找这些项目的XLSM位于根文件夹C:\Main\ 我想按降序显示最近修改的文件 因此,如果今天创建了一个文件,它将显示在顶部,然后是昨天创建的文件,依此类推 我的代码只是ListBox1的标准附加项 MyFile = Dir(MyFolder & "\*.xlsm") Do While MyFile <&g

我有一个列表框,用于显示文件夹
Archive
中的XLSM文件和主XLSM文件
main
文件夹中名为
PDF
的PDF文件

C:\Main\Archive\
C:\Main\PDF\
,查找这些项目的XLSM位于根文件夹
C:\Main\

我想按降序显示最近修改的文件

因此,如果今天创建了一个文件,它将显示在顶部,然后是昨天创建的文件,依此类推

我的代码只是ListBox1的标准附加项

MyFile = Dir(MyFolder & "\*.xlsm")
Do While MyFile <> ""
    ListBox1.AddItem MyFile
    MyFile = Dir
Loop
这就是名称在列表框中的显示方式。PDF是相同的名称


谢谢你抽出时间

为了支持我的评论,像这样的东西可以帮助您从文件名中获取日期。然后可以使用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

那么以下内容呢:

  • 使用
    FileSystemObject
    访问文件属性,如:
    GetExtensionName
    DateCreated
    Name
  • 使用
    字典
    对象创建库并将值存储在内存中
  • 使用
    ArrayList
    对象创建一个列表来存储创建时间日期值,然后我们可以
    对其进行升序排序
    反向排序
    来创建降序列表
  • 然后,我们可以迭代
    ArrayList
    ,从
    字典中返回值
    ,并按顺序将它们添加到
    列表框中
    


它还可以从最高的“票证号”开始显示,从那里开始递减。最好将文件夹信息放在一张表中,拆分文件名,在此基础上排序,然后将排序后的VAL放回
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
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