打开多个子文件夹并将其中的所有excel文件复制到另一个文件夹-VBA

打开多个子文件夹并将其中的所有excel文件复制到另一个文件夹-VBA,vba,excel,Vba,Excel,我正在尝试使用VBA编写代码,该代码应执行以下操作: 我有一个文件夹Para,包含5个文件夹:塔塔,太特,图图,托托,提提 我想打开Para,然后打开Tata并复制其中的所有excel文件夹,然后打开Tete并复制所有excel文件夹等。。直到最后一个提提。 我想把它们都放在一个文件夹里,复印件! 有没有代码可以做到这一点 我只有一个文件夹上的代码(但desn不工作): Sub sbCopyingAFile() 'Declare Variables Dim FSO Dim

我正在尝试使用VBA编写代码,该代码应执行以下操作:

我有一个文件夹Para,包含5个文件夹:塔塔,太特,图图,托托,提提 我想打开Para,然后打开Tata并复制其中的所有excel文件夹,然后打开Tete并复制所有excel文件夹等。。直到最后一个提提。 我想把它们都放在一个文件夹里,复印件! 有没有代码可以做到这一点

我只有一个文件夹上的代码(但desn不工作):

Sub sbCopyingAFile()
    'Declare Variables
    Dim FSO
    Dim sFile As String
    Dim sSFolder As String
    Dim sDFolder As String
    Dim myfile

    'This is Your File Name which you want to Copy
    sFile = "*.xls*"
    'Change to match the source folder path
    sSFolder = "Z:\Base_de_données\PARA\Toto\"
    ''Target Path with Ending Extention
    myfile = Dir(sSFolder & sFile)
    'Change to match the destination folder path
    sDFolder = "Z:\Base_de_données\Para_Copy"

    Do While myfile <> ""

        'Create Object
        Set FSO = CreateObject("Scripting.FileSystemObject")

        'Checking If File Is Located in the Source Folder
        If Not FSO.FileExists(myfile) Then
            MsgBox "Specified File Not Found", vbInformation, "Not Found"

        'Copying If the Same File is Not Located in the Destination Folder
        ElseIf Not FSO.FileExists(sDFolder & sFile) Then
            FSO.CopyFile (myfile), sDFolder, True
            MsgBox "Specified File Copied Successfully", vbInformation, "Done!"

        Else
            MsgBox "Specified File Already Exists In The Destination Folder", _
                vbExclamation, "File Already Exists"

        End If

        myfile = Dir()

    Loop

End Sub
子sbCopyingAFile()
'声明变量
模糊FSO
将文件设置为字符串
将文件夹设置为字符串
将文件夹设置为字符串
Dim myfile
'这是您要复制的文件名
sFile=“*.xls*”
'更改以匹配源文件夹路径
sSFolder=“Z:\Base\u de\u données\PARA\Toto\”
''带结束扩展的目标路径
myfile=Dir(sSFolder&sFile)
'更改以匹配目标文件夹路径
sDFolder=“Z:\Base\u de\u données\Para\u Copy”
当我的文件“”时执行此操作
'创建对象
设置FSO=CreateObject(“Scripting.FileSystemObject”)
'检查文件是否位于源文件夹中
如果不存在FSO.FileExists(myfile),则
MsgBox“未找到指定文件”,vbInformation“未找到”
'如果同一文件不在目标文件夹中,则复制
如果不是FSO.FileExists(sDFolder&sFile),则
FSO.CopyFile(myfile),sDFolder,True
MsgBox“已成功复制指定文件”,vbInformation,“完成!”
其他的
MsgBox“目标文件夹中已存在指定文件”_
VBE感叹号,“文件已存在”
如果结束
myfile=Dir()
环
端接头
谢谢你的帮助!
干杯

您想复制其他文件,而不是从文件中复制数据,对吗。如果我是你,我会列出所有文件夹和子文件夹中的所有文件

Sub GetFolder_Data_Collection()

Range("A:L").ClearContents
Range("A1").Value = "Name"
Range("B1").Value = "Path"
Range("C1").Value = "Size (KB)"
Range("D1").Value = "DateLastModified"
Range("E1").Value = "Attributes"
Range("F1").Value = "DateCreated"
Range("G1").Value = "DateLastAccessed"
Range("H1").Value = "Drive"
Range("I1").Value = "ParentFolder"
Range("J1").Value = "ShortName"
Range("K1").Value = "ShortPath"
Range("L1").Value = "Type"
Range("A1").Select

Dim strPath As String
'strPath = "I:\Information Security\KRI Monthly Data Collection\"
strPath = GetFolder

Dim OBJ As Object, Folder As Object, File As Object

Set OBJ = CreateObject("Scripting.FileSystemObject")
Set Folder = OBJ.GetFolder(strPath)

Call ListFiles(Folder)

Dim SubFolder As Object

For Each SubFolder In Folder.SubFolders
    Call ListFiles(SubFolder)
    Call GetSubFolders(SubFolder)
Next SubFolder


End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub ListFiles(ByRef Folder As Object)

On Error Resume Next
For Each File In Folder.Files
        ActiveCell.Offset(1, 0).Select
        ActiveCell = File.Name
        ActiveCell.Offset(0, 1).Select
        ActiveCell.Offset(0, 1) = File.Path
            ActiveCell.Offset(0, 0).Hyperlinks.Add Anchor:=ActiveCell.Offset(0, 0), Address:=File.Path, TextToDisplay:=File.Path
        ActiveCell.Offset(0, -1).Select
        ActiveCell.Offset(0, 2) = (File.Size / 1024) 'IN KB
        ActiveCell.Offset(0, 3) = File.DateLastModified
        ActiveCell.Offset(0, 4) = File.Attributes
        ActiveCell.Offset(0, 5) = File.DateCreated
        ActiveCell.Offset(0, 6) = File.DateLastAccessed
        ActiveCell.Offset(0, 7) = File.Drive
        ActiveCell.Offset(0, 8) = File.ParentFolder
        ActiveCell.Offset(0, 9) = File.ShortName
        ActiveCell.Offset(0, 10) = File.ShortPath
        ActiveCell.Offset(0, 11) = File.Type
Next File

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub GetSubFolders(ByRef SubFolder As Object)

Dim FolderItem As Object
On Error Resume Next
For Each FolderItem In SubFolder.SubFolders
    Call ListFiles(FolderItem)
    Call GetSubFolders(FolderItem)
Next FolderItem

End Sub


Function GetFolder() As String
    Dim fldr As FileDialog
    Dim sItem As String
    Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
    With fldr
        .Title = "Select a Folder"
        .AllowMultiSelect = False
        .InitialFileName = Application.DefaultFilePath
        If .Show <> -1 Then GoTo NextCode
        sItem = .SelectedItems(1)
    End With
NextCode:
    GetFolder = sItem
    Set fldr = Nothing
End Function
Sub-GetFolder\u Data\u Collection()
范围(“A:L”)。清晰内容
范围(“A1”).Value=“名称”
范围(“B1”).Value=“路径”
范围(“C1”).Value=“大小(KB)”
范围(“D1”).Value=“DateLastModified”
范围(“E1”).Value=“属性”
范围(“F1”).Value=“DateCreated”
范围(“G1”).Value=“DateLastAccessed”
范围(“H1”).Value=“驱动器”
范围(“I1”).Value=“父文件夹”
范围(“J1”).Value=“ShortName”
范围(“K1”).Value=“短路径”
范围(“L1”).Value=“类型”
范围(“A1”)。选择
将strPath设置为字符串
'strPath=“I:\Information Security\KRI每月数据收集\”
strPath=GetFolder
对象为Dim OBJ,对象为文件夹,对象为文件
Set OBJ=CreateObject(“Scripting.FileSystemObject”)
Set Folder=OBJ.GetFolder(strPath)
调用列表文件(文件夹)
将子文件夹变暗为对象
对于Folder.SubFolders中的每个子文件夹
调用列表文件(子文件夹)
调用GetSubFolders(子文件夹)
下一个子文件夹
端接头
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
子列表文件(ByRef文件夹作为对象)
出错时继续下一步
对于文件夹.Files中的每个文件
ActiveCell.Offset(1,0)。选择
ActiveCell=File.Name
ActiveCell.Offset(0,1)。选择
ActiveCell.Offset(0,1)=File.Path
ActiveCell.Offset(0,0).Hyperlinks.Add锚定:=ActiveCell.Offset(0,0),地址:=File.Path,TextToDisplay:=File.Path
ActiveCell.Offset(0,-1)。选择
ActiveCell.Offset(0,2)=(File.Size/1024)以KB为单位
ActiveCell.Offset(0,3)=File.DateLastModified
ActiveCell.Offset(0,4)=File.Attributes
ActiveCell.Offset(0,5)=File.DateCreated
ActiveCell.Offset(0,6)=File.dateLastAccess
ActiveCell.Offset(0,7)=File.Drive
ActiveCell.Offset(0,8)=File.ParentFolder
ActiveCell.Offset(0,9)=File.ShortName
ActiveCell.Offset(0,10)=File.ShortPath
ActiveCell.Offset(0,11)=File.Type
下一个文件
端接头
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
子GetSubFolders(ByRef子文件夹作为对象)
作为对象的Dim FolderItem
出错时继续下一步
对于子文件夹中的每个文件夹项。子文件夹
调用列表文件(FolderItem)
调用GetSubFolders(文件夹项)
下一页
端接头
函数GetFolder()作为字符串
Dim fldr As FILE对话框
以字符串形式显示
设置fldr=Application.FileDialog(msoFileDialogFolderPicker)
与fldr
.Title=“选择一个文件夹”
.AllowMultiSelect=False
.InitialFileName=Application.DefaultFilePath
如果.Show-1,则转到下一个代码
sItem=.SelectedItems(1)
以
下一个代码:
GetFolder=sItem
设置fldr=无
端函数
然后,运行一个小脚本来执行复制/粘贴操作。“FromPath”来自您使用上面的脚本生成的路径,“ToPath”将是您选择的任何路径

Sub Copy_Folder()
'This example copy all files and subfolders from FromPath to ToPath.
'Note: If ToPath already exist it will overwrite existing files in this folder
'if ToPath not exist it will be made for you.
    Dim FSO As Object
    Dim FromPath As String
    Dim ToPath As String

    FromPath = "C:\Users\Ron\Data"  '<< Change
    ToPath = "C:\Users\Ron\Test"    '<< Change

    'If you want to create a backup of your folder every time you run this macro
    'you can create a unique folder with a Date/Time stamp.
    'ToPath = "C:\Users\Ron\" & Format(Now, "yyyy-mm-dd h-mm-ss")

    If Right(FromPath, 1) = "\" Then
        FromPath = Left(FromPath, Len(FromPath) - 1)
    End If

    If Right(ToPath, 1) = "\" Then
        ToPath = Left(ToPath, Len(ToPath) - 1)
    End If

    Set FSO = CreateObject("scripting.filesystemobject")

    If FSO.FolderExists(FromPath) = False Then
        MsgBox FromPath & " doesn't exist"
        Exit Sub
    End If

    FSO.CopyFolder Source:=FromPath, Destination:=ToPath
    MsgBox "You can find the files and subfolders from " & FromPath & " in " & ToPath

End Sub
Sub-Copy_文件夹()
'此示例将所有文件和子文件夹从FromPath复制到ToPath。
'注意:如果ToPath已存在,它将覆盖此文件夹中的现有文件
“如果ToPath不存在,它将为您创建。
作为对象的Dim FSO
将FromPath设置为字符串
作为字符串的Dim-ToPath

FromPath=“C:\Users\Ron\Data””您希望复制其他文件,而不是文件中的数据,对吗。如果我是你,我会列出所有文件夹和子文件夹中的所有文件

Sub GetFolder_Data_Collection()

Range("A:L").ClearContents
Range("A1").Value = "Name"
Range("B1").Value = "Path"
Range("C1").Value = "Size (KB)"
Range("D1").Value = "DateLastModified"
Range("E1").Value = "Attributes"
Range("F1").Value = "DateCreated"
Range("G1").Value = "DateLastAccessed"
Range("H1").Value = "Drive"
Range("I1").Value = "ParentFolder"
Range("J1").Value = "ShortName"
Range("K1").Value = "ShortPath"
Range("L1").Value = "Type"
Range("A1").Select

Dim strPath As String
'strPath = "I:\Information Security\KRI Monthly Data Collection\"
strPath = GetFolder

Dim OBJ As Object, Folder As Object, File As Object

Set OBJ = CreateObject("Scripting.FileSystemObject")
Set Folder = OBJ.GetFolder(strPath)

Call ListFiles(Folder)

Dim SubFolder As Object

For Each SubFolder In Folder.SubFolders
    Call ListFiles(SubFolder)
    Call GetSubFolders(SubFolder)
Next SubFolder


End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub ListFiles(ByRef Folder As Object)

On Error Resume Next
For Each File In Folder.Files
        ActiveCell.Offset(1, 0).Select
        ActiveCell = File.Name
        ActiveCell.Offset(0, 1).Select
        ActiveCell.Offset(0, 1) = File.Path
            ActiveCell.Offset(0, 0).Hyperlinks.Add Anchor:=ActiveCell.Offset(0, 0), Address:=File.Path, TextToDisplay:=File.Path
        ActiveCell.Offset(0, -1).Select
        ActiveCell.Offset(0, 2) = (File.Size / 1024) 'IN KB
        ActiveCell.Offset(0, 3) = File.DateLastModified
        ActiveCell.Offset(0, 4) = File.Attributes
        ActiveCell.Offset(0, 5) = File.DateCreated
        ActiveCell.Offset(0, 6) = File.DateLastAccessed
        ActiveCell.Offset(0, 7) = File.Drive
        ActiveCell.Offset(0, 8) = File.ParentFolder
        ActiveCell.Offset(0, 9) = File.ShortName
        ActiveCell.Offset(0, 10) = File.ShortPath
        ActiveCell.Offset(0, 11) = File.Type
Next File

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub GetSubFolders(ByRef SubFolder As Object)

Dim FolderItem As Object
On Error Resume Next
For Each FolderItem In SubFolder.SubFolders
    Call ListFiles(FolderItem)
    Call GetSubFolders(FolderItem)
Next FolderItem

End Sub


Function GetFolder() As String
    Dim fldr As FileDialog
    Dim sItem As String
    Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
    With fldr
        .Title = "Select a Folder"
        .AllowMultiSelect = False
        .InitialFileName = Application.DefaultFilePath
        If .Show <> -1 Then GoTo NextCode
        sItem = .SelectedItems(1)
    End With
NextCode:
    GetFolder = sItem
    Set fldr = Nothing
End Function
Sub-GetFolder\u Data\u Collection()
范围(“A:L”)。清晰内容
范围(“A1”).Value=“名称”
范围(“B1”).Value=“路径”
范围(“C1”).Value=“大小(KB)”
范围(“D1”).Value=“DateLastModified”
范围(“E1”).Value=“属性”
范围(“F1”).Value=“DateCreated”
范围(“G1”).Value=“DateLastAccessed”
范围(“H1”).Value=“驱动器”
范围(“I1”).Value=“父文件夹”
范围(“J1”).Value=“ShortName”
范围(“K1”).Value=“短路径”
范围(“L1”).Value=“类型”
范围(“A1”)。选择
将strPath设置为字符串
'strPath=“I:\Information Security\KRI每月数据收集\”
strPath=GetFolder
对象为Dim OBJ,对象为文件夹,对象为文件
Set OBJ=CreateObject(“Scripting.FileSystemObject”)
Set Folder=OBJ.GetFolder(strPath)
调用列表文件(文件夹)
暗淡的