前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA: 获取文件夹内各文件的最新修改时间

VBA: 获取文件夹内各文件的最新修改时间

作者头像
Exploring
发布2024-04-02 17:02:52
7210
发布2024-04-02 17:02:52
举报
文章被收录于专栏:数据处理与编程实践

文章背景: 在工作中,需要定期对原始数据进行备份。有时,需要查看文件夹内各个文件的最新修改时间,从而确保最新的测试数据得到了备份。因此,需要遍历各文件得到最新修改时间,这里提供两个自定义函数。

1 文件和子文件夹

给定一个文件夹,获取该文件夹内所有子文件夹,文件的修改时间,从而得到一个最新的文件(文件夹)修改时间。

VBA函数代码如下:

代码语言:javascript
复制
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
2 文件、子文件夹和子文件夹内所有文件

给定一个文件夹,获取该文件夹内所有文件、子文件夹和子文件夹内所有文件的修改时间,从而得到一个最新的文件(文件夹)修改时间。

VBA函数代码如下:

代码语言:javascript
复制
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对象来访问。该对象提供了三个与文件时间相关的属性:DateCreatedDateLastModifiedDateLastAccessed

  1. DateCreated:这个属性返回文件的创建日期和时间。它表示文件首次创建或写入磁盘的时间。
  2. DateLastModified:这个属性返回文件的最后修改日期和时间。它表示文件最后一次被修改或更改的时间。
  3. DateLastAccessed:这个属性返回文件的最后访问日期和时间。它表示文件最后一次被读取或写入的时间。

参考资料:

[1] 讯飞星火大语言模型

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据处理与编程实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 文件和子文件夹
  • 2 文件、子文件夹和子文件夹内所有文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档