【问题标题】:Copying Files from Subfolders Using VBA使用 VBA 从子文件夹复制文件
【发布时间】:2018-12-17 00:00:04
【问题描述】:

我正在尝试创建一个 vba 宏,它将复制包含多个子文件夹的源文件夹中的所有 excel 文件。这些文件需要复制到一个目标文件夹(不包括子文件夹)。

到目前为止,我已设法将包括子文件夹在内的整个文件夹复制到目标文件夹。如何编辑我的代码,使其仅复制 .xls 文件并粘贴它们而无需子文件夹。

Sub PerformCopy()
==================== call ================================
MkDir "DestinationPath"

CopyFiles "Source Path With All Subfolders" & "\", "DestinationPath" & "\"

==================== Copy sub ===========================
End Sub


Public Sub CopyFiles(ByVal strPath As String, ByVal strTarget As String)
Dim FSO As Object
Dim FileInFromFolder As Object
Dim FolderInFromFolder As Object
Dim Fdate As Long
Dim intSubFolderStartPos As Long
Dim strFolderName As String

Set FSO = CreateObject("scripting.filesystemobject")
'First loop through files
    For Each FileInFromFolder In FSO.GetFolder(strPath).Files
        Fdate = Int(FileInFromFolder.DateLastModified)
        'If Fdate >= Date - 1 Then
            FileInFromFolder.Copy strTarget
        'end if
    Next

    'Next loop throug folders
    For Each FolderInFromFolder In FSO.GetFolder(strPath).SubFolders
        'intSubFolderStartPos = InStr(1, FolderInFromFolder.Path, strPath)
        'If intSubFolderStartPos = 1 Then

        strFolderName = Right(FolderInFromFolder.PATH, Len(FolderInFromFolder.PATH) - Len(strPath))
        MkDir strTarget & "\" & strFolderName

        CopyFiles FolderInFromFolder.PATH & "\", strTarget & "\" & strFolderName & "\"

    Next 'Folder

End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    如下所示,它使用文件夹循环中的初始循环来遍历每个文件并复制到目标文件夹:

    Sub PerformCopy()
    '==================== call ================================
    'MkDir "DestinationPath"
    
    CopyFiles "Source Path With All Subfolders" & "\", "DestinationPath" & "\"
    
    '==================== Copy sub ===========================
    End Sub
    
    
    Public Sub CopyFiles(ByVal strPath As String, ByVal strTarget As String)
    Dim FSO As Object
    Dim FileInFromFolder As Object
    Dim FolderInFromFolder As Object
    Dim Fdate As Long
    Dim intSubFolderStartPos As Long
    Dim strFolderName As String
    
    Set FSO = CreateObject("scripting.filesystemobject")
    'First loop through files
        For Each FileInFromFolder In FSO.GetFolder(strPath).Files
            Fdate = Int(FileInFromFolder.DateLastModified)
                FileInFromFolder.Copy strTarget
        Next
    
        'Next loop throug folders
        For Each FolderInFromFolder In FSO.GetFolder(strPath).SubFolders
                For Each FileInFromFolder In FSO.GetFolder(FolderInFromFolder).Files
                        FileInFromFolder.Copy strTarget
                Next
        Next
    
    End Sub
    

    【讨论】:

    • 感谢您的回复 Xabier。它似乎适用于几个文件,然后我得到运行时错误 70:权限被拒绝。知道是什么原因造成的吗?
    • @msmand,是否其中一些文件已经打开、只读,甚至受保护?不确定是什么导致了问题,但您可能会通过单步执行代码并查看哪个文件实际上给您错误来找到原因......也可能是一些隐藏文件导致它,可能值得一试在复制文件之前检查文件的扩展名,以确保它是 Excel 文件而不是系统文件。
    • 感谢您的回复。事实证明这是导致错误的网络问题。我已经用本地文件夹和文件测试了你的代码,它工作正常。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2016-05-17
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2016-06-14
    • 2022-08-04
    相关资源
    最近更新 更多