Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用vba将文件从一个文件夹复制到另一个文件夹_Excel_Vba_File_Directory - Fatal编程技术网

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

Excel 使用vba将文件从一个文件夹复制到另一个文件夹,excel,vba,file,directory,Excel,Vba,File,Directory,我知道,关于这个话题也有一些类似的帖子。然而,我有一个代码,它不同于我在这里看到的所有代码(当谈论这个主题时) 我收到的错误是找不到该文件。但这是不可能的,因为我正在fso.CopyFile中用作源文件的同一文件夹中搜索该文件 因此,我必须修复此错误,如果可能的话,我希望将文件复制到另一个文件夹并更改名称。例如,如果我有“Excel.xls”文件,我想用“Excel\u old.xls”这个名称进行复制,是可以使用下面的代码进行复制,还是太难而不值得复制 代码如下: Sub CopyFiles(

我知道,关于这个话题也有一些类似的帖子。然而,我有一个代码,它不同于我在这里看到的所有代码(当谈论这个主题时)

我收到的错误是找不到该文件。但这是不可能的,因为我正在fso.CopyFile中用作源文件的同一文件夹中搜索该文件

因此,我必须修复此错误,如果可能的话,我希望将文件复制到另一个文件夹并更改名称。例如,如果我有“Excel.xls”文件,我想用“Excel\u 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

这是因为
fso.CopyFile“C:\Users\Desktop\Files\file”,“C:\Users\Desktop\Files\Old\file”
不是一个文件。。。从外观上看,它只是一个虚拟文件的字符串

如果不是这样的话

fso.CopyFile文件路径,“C:\Users\Desktop\Files\Old\”&fil.name
。。。那可能行得通

更新为添加:

我刚刚尝试使用(以下为subbing计算机用户名)执行以下操作,并成功地将所有内容移动到新文件夹中:

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
子测试()
将fso设置为文件系统对象
将F文件设置为文件
将文件作为文件
Set fso=新文件系统对象
设置fils=fso.GetFolder(“C:\Users\\Desktop\”).Files
对于每一个fil In fils
n=文件名
d=fil.DateLastModified
fso.CopyFile文件fil.Path、fil.ParentFolder&“\test\”和fil.Name
下一场
端接头

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

用于移动文件夹中的所有文件:

Sub MoveFiles()

Dim MyFile As String

MyFile = Dir("C:\AAAA\*.*")

Do Until MyFile = ""

Name "C:\AAAA\" & MyFile As "C:\AAA\" & MyFile

MyFile = Dir

Loop

End Sub

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

Public子目录(ByVal源作为字符串,ByVal目标作为字符串)
Dim fso、文件、文件夹作为对象
设置fso=CreateObject(“Scripting.FileSystemObject”)
'删除现有文件夹
如果fso.FolderExists(destination),则fso.DeleteFolder destination为True
fso.CreateFolder目标
对于fso.GetFolder(source.files)中的每个文件
fso.CopyFile file.Path、目标和“\”file.Name
下一个文件
对于fso.GetFolder(源)子文件夹中的每个文件夹
CopyDirectory文件夹。路径、目标和“\”文件夹。名称
下一个文件夹
端接头
使用方法如下:

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

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

没错。但是在
fso.CopyFile
之后有一个输入错误,根据OP的code.yes,它应该是
file
fil.name
。。应该是
fil.path
而不是
fil.name
。我道歉。我想我对fso有点生疏了。使用了
fso.CopyFile fil.Path,“C:\Users\Desktop\Files\file”,“C:\Users\Desktop\Files\Old\file”
,得到了相同的错误,类型不匹配。我还尝试了
fso.CopyFile fil.Path,“C:\Users\Desktop\Files\file”,“C:\Users\Desktop\Files\Old\”
,但仍然得到错误13,应该是:“C:\Users\Desktop\Files\”&文件,“C:\Users\Desktop\Files\Old\”&文件尝试过了,还是同样的错误,我正在搜索,但我真的很纠结。在复制之前,您如何设置它,以便检查目标文件夹中是否存在该文件(最新版本?)?