文章背景: 在工作中,需要定期对原始数据进行备份。有时,需要查看文件夹内各个文件的最新修改时间,从而确保最新的测试数据得到了备份。因此,需要遍历各文件得到最新修改时间,这里提供两个自定义函数。
给定一个文件夹,获取该文件夹内所有子文件夹,文件的修改时间,从而得到一个最新的文件(文件夹)修改时间。
VBA函数代码如下:
Option Explicit
Function GetLatestModifiedDate(folderPath As String) As Variant
'基于子文件夹和文件,得到最新的修改日期
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim latestDate As Date
latestDate = DateSerial(1900, 1, 1)
If Not IsFolderPathExist(folderPath) Then
GetLatestModifiedDate = "文件夹不存在!"
Exit Function
End If
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(folderPath)
For Each objFile In objFolder.Files
If objFile.DateLastModified > latestDate Then
latestDate = objFile.DateLastModified
End If
Next objFile
For Each objFile In objFolder.SubFolders
If objFile.DateLastModified > latestDate Then
latestDate = objFile.DateLastModified
End If
Next objFile
GetLatestModifiedDate = latestDate
End Function
Function IsFolderPathExist(folderPath As String) As Boolean
'判断文件夹是否存在
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FolderExists(folderPath) Then
IsFolderPathExist = True
Else
IsFolderPathExist = False
End If
End Function
给定一个文件夹,获取该文件夹内所有文件、子文件夹和子文件夹内所有文件的修改时间,从而得到一个最新的文件(文件夹)修改时间。
VBA函数代码如下:
Option Explicit
Function GetLatestModifiedDate2(folderPath As String) As Variant
'基于文件、子文件夹和子文件夹内所有文件,得到最新的修改日期
Dim latestDate As Date
Dim fso As Object, fld As Object
' 初始化最新日期为1900/1/1
latestDate = DateSerial(1900, 1, 1)
If Not IsFolderPathExist(folderPath) Then
GetLatestModifiedDate2 = "文件夹不存在!"
Exit Function
End If
Set fso = CreateObject("Scripting.FileSystemObject")
Set fld = fso.GetFolder(folderPath)
' 调用递归函数获取最新日期
Call LookUpAllFiles(fld, latestDate)
' 输出最新日期
GetLatestModifiedDate2 = latestDate
End Function
Sub LookUpAllFiles(fld As Variant, ByRef latestDate As Date)
'递归,获取文件的最新修改日期
Dim objFile, outFld '定义文件和文件夹
Dim fileName As String, currentDate As Date
For Each objFile In fld.Files
If objFile.DateLastModified > latestDate Then
latestDate = objFile.DateLastModified
End If
Next objFile
For Each outFld In fld.SubFolders '遍历子文件夹
If outFld.DateLastModified > latestDate Then
latestDate = outFld.DateLastModified
End If
LookUpAllFiles outFld, latestDate '调用函数自身
Next
End Sub
其中,自定义函数IsFolderPathExist
在第一部分已给出,此处不在赘述。
延伸阅读:
(1)文件的时间属性
在VBA中,文件的时间属性可以通过FileSystemObject
对象来访问。该对象提供了三个与文件时间相关的属性:DateCreated
、DateLastModified
和DateLastAccessed
。
DateCreated
:这个属性返回文件的创建日期和时间。它表示文件首次创建或写入磁盘的时间。DateLastModified
:这个属性返回文件的最后修改日期和时间。它表示文件最后一次被修改或更改的时间。DateLastAccessed
:这个属性返回文件的最后访问日期和时间。它表示文件最后一次被读取或写入的时间。参考资料:
[1] 讯飞星火大语言模型