使用vba将文件从一个文件夹复制到另一个文件夹

时间:2014-10-07 17:40:20

标签: excel vba file directory

我知道有关此主题的类似帖子。但是,我的代码与我在这里看到的所有代码都不同(在谈论这个主题时)。

我收到的错误是说无法找到该文件。但那是不可能的,因为我在fso.CopyFile中作为SOURCE使用的同一文件夹中搜索文件。

所以我必须修复此错误,如果可能的话,我想将文件复制到另一个文件夹并更改名称。例如,如果我有文件" Excel.xls",我想复制名称" Excel_old.xls",可能使用下面的代码或者是太难了它不值得吗?

这是代码:

Sub CopyFiles()
'Macro to copy all files modified yesterday

Dim n As String, msg As String, d As Date
Dim fso As Object

Set fso = CreateObject("Scripting.FileSystemObject")
Set fils = fso.GetFolder("C:\Users\Desktop\Files\").Files

'Verify all files in the folder, check the modification date and then copy 
'to another folder (named Old)
For Each fil In fils
    n = fil.Name
    d = fil.DateLastModified
    If d >= Date - 1 Then
        file = n
        'The following line is where the error occurs
        fso.CopyFile "C:\Users\Desktop\Files\file", "C:\Users\Desktop\Files\Old\file"

    End If
Next fil

End Sub

2 个答案:

答案 0 :(得分:1)

这是因为fso.CopyFile "C:\Users\Desktop\Files\file", "C:\Users\Desktop\Files\Old\file"不是文件...它只是一个虚拟文件的字符串。

如果该行是

fso.CopyFile fil.Path, "C:\Users\Desktop\Files\Old\" & fil.name ......可能有用。

已更新以添加:

我只是尝试使用以下内容(在下面使用计算机用户名)并成功将所有内容移动到新文件夹中:

Sub test()
    Dim fso As FileSystemObject
    Dim fsoFiles As Files
    Dim fil As File

    Set fso = New FileSystemObject
    Set fils = fso.GetFolder("C:\Users\<MY USERNAME>\Desktop\").Files

    For Each fil In fils
        n = fil.Name
        d = fil.DateLastModified
        fso.CopyFile fil.Path, fil.ParentFolder & "\test\" & fil.Name

    Next fil
End Sub

这里唯一的区别是我使用fil.ParentFolder来获取我的桌面,然后将其扔到我在桌面上创建的新文件夹中(在运行脚本之前)名为“test”。

答案 1 :(得分:0)

要递归复制所有文件和子文件夹,请使用以下代码:

Public Sub CopyDirectory(ByVal source As String, ByVal destination As String)
    Dim fso, file, folder As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    'Delete existing folder
    If fso.FolderExists(destination) Then fso.DeleteFolder destination, True
    fso.CreateFolder destination
    For Each file in fso.GetFolder(source).files
        fso.CopyFile file.Path, destination & "\" & file.Name
    Next file
    For Each folder in fso.GetFolder(source).SubFolders
        CopyDirectory folder.Path, destination & "\" & folder.Name
    Next folder
End Sub

用途如下:

CopyFile "C:\Path To Source", "C:\Path to destination"

请注意,路径不应包含尾随目录分隔符(\)。