前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA代码:将最新文件从一个文件夹复制到另一个文件夹

VBA代码:将最新文件从一个文件夹复制到另一个文件夹

作者头像
fanjy
发布2024-07-05 13:12:41
220
发布2024-07-05 13:12:41
举报
文章被收录于专栏:完美Excel完美Excel

下面的代码收集自vbaexpress.com,可以将源文件夹中的最新文件复制到另一个文件夹。代码运行后,弹出一个对话框告诉用户选择源文件夹,选好后,单击“确定”,会弹出另一个对话框告诉用户选择目标文件夹,单击“确定”,源文件夹中的最新文件将被复制到目标文件夹中。

VBA代码如下:

代码语言:javascript
复制
Dim FileNames()             As Variant
Dim FSO                     As Object
Dim FileCounter             As Long
Const FinalFileName         As String = "LastFile" '将这个名字修改为你实际的名字

Sub MoveRecentFile()
    Dim FD                      As FileDialog
    Dim IsSourceFolSelected     As Boolean
    Dim IsTargetFolSelected     As Boolean
    Dim SourceFolderPath        As String
    Dim RecentDate              As Date
    Dim RecentFileName          As String
    Dim x                       As Long
    Dim Fil                     As Object
    Dim TargetFolderPath        As String

    Set FD = Application.FileDialog(msoFileDialogFolderPicker)

    Do While IsSourceFolSelected = False Or IsTargetFolSelected = False '检查源文件夹和目标文件夹是否都已选择
        If IsSourceFolSelected = False Then
            FD.Title = "选择源文件夹"
            IsSourceFolSelected = FD.Show
            If Not IsSourceFolSelected = False Then
                SourceFolderPath = FD.SelectedItems(1)
                IsSourceFolSelected = True
            End If
        End If

        If IsTargetFolSelected = False Then
            FD.Title = "选择目标文件夹"
            IsTargetFolSelected = FD.Show
            If Not IsTargetFolSelected = False Then
                TargetFolderPath = FD.SelectedItems(1)
                IsTargetFolSelected = True
            End If
        End If
    Loop

    Set FSO = CreateObject("Scripting.FileSystemObject")
    FileCounter = 1

    Call LoopOverFoldersAndSubFolders(SourceFolderPath, False) '如果想遍历文件夹中的子文件夹, 则将参数修改为True

    RecentDate = FileNames(2, 1)
    
    '检查最近日期
    For x = 1 To UBound(FileNames, 2)
        If FileNames(2, x) > RecentDate Then
            RecentDate = FileNames(2, x)
            RecentFileName = FileNames(1, x)
        End If
    Next x

    Set Fil = FSO.GetFile(RecentFileName)
    Fil.Copy TargetFolderPath & "\" & FinalFileName & "." & FSO.GetExtensionName(Fil.Name)

    Set FSO = Nothing
    Erase FileNames
End Sub

Private Sub LoopOverFoldersAndSubFolders(SourceFolderPath As String, Optional LoopOverSubFolder As Boolean = False)
    Dim SourceFolder            As Object
    Dim SubFol                  As Object
    Dim Fil                     As Object

    Set SourceFolder = FSO.GetFolder(SourceFolderPath)

    For Each Fil In SourceFolder.Files
        ReDim Preserve FileNames(1 To 2, 1 To FileCounter)

        FileNames(1, FileCounter) = Fil.Path
        FileNames(2, FileCounter) = Fil.DateLastModified

        FileCounter = FileCounter + 1
    Next Fil

    If LoopOverSubFolder = True Then
        For Each SubFol In SourceFolder.SubFolders
            Call LoopOverFoldersAndSubFolders(SubFol.Path, True)
        Next SubFol
    End If
End Sub

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

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

本文分享自 完美Excel 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档