将文件复制到现有文件夹时出错

我正在编写一些提示用户添加文件夹名称的代码,然后将CD驱动器(D :)上的所有文件复制到C:\Example\ & FolderName如果它尚不存在)。

代码工作,直到我试图将文件复制到已经存在的文件夹,然后我得到一个Run-time error 70: Permission Denied 。 任何帮助将不胜感激。

 Public Sub CopyFiles() Dim FSO As Object Dim FromPath As String Dim ToPath As String Dim FileExt As String Dim FNames As String Dim FolderName As String FolderName = InputBox(Prompt:="Your folder name", Title:="Folder Name", default:="Folder Name here") If Dir("C:\Example\" & FolderName & "\", vbDirectory) = "" Then MkDir "C:\Example\" & FolderName Else End If FromPath = "D:\" ToPath = "C:\Example\" & FolderName & "\" FileExt = "*.flac*" If Right(FromPath, 1) <> "\" Then FromPath = FromPath & "\" End If FNames = Dir(FromPath & FileExt) If Len(FNames) = 0 Then MsgBox "No files in " & FromPath Exit Sub End If Set FSO = CreateObject("scripting.filesystemobject") FSO.CopyFile Source:=FromPath & FileExt, Destination:=ToPath End Sub 

问题不在于该文件夹存在。 问题是你正在试图复制文件并覆盖它们

覆盖通常不是问题,但如果目标文件夹中的文件具有Read Only属性,则会失败。 你可以在这篇MSDN文章中阅读更多关于它的内容

发生了什么事情是当你第一次从CD驱动器复制文件,复制的文件保留只读属性。 您可以通过右键单击文件并检查其属性来检查。

要解决此问题,您需要重置文件属性或删除该文件夹中的文件。

要删除,您可以简单地使用

 On Error Resume Next Kill "C:\MyFolder\*.*" On Error GoTo 0 

要更改属性,您必须遍历文件并检查它们的属性是否只读。 你可以通过

 If fso.GetFile(Dest_File).Attributes And 1 Then 

并重置它,你必须使用

 fso.GetFile(Dest_File).Attributes = fso.GetFile(Dest_File).Attributes - 1 

一旦你这样做,你将能够跨文件复制。

正如Siddharth所述,由于代码正在尝试覆盖现有文件,因此发生错误。 所以,如果你不想覆盖文件,你可以简单地添加一个If Error Resume Next。 我正在使用的解决scheme代码如下:

 Public Sub CopyFiles() Dim FSO As Object Dim FromPath As String Dim ToPath As String Dim FileExt As String Dim FNames As String Dim FolderName As String FolderName = InputBox(Prompt:="Your folder name", Title:="Folder Name", default:="Folder Name here") If Dir("C:\Example\" & FolderName & "\", vbDirectory) = "" Then MkDir "C:\Example\" & FolderName Else End If FromPath = "D:\" ToPath = "C:\Example\" & FolderName & "\" FileExt = "*.flac*" If Right(FromPath, 1) <> "\" Then FromPath = FromPath & "\" End If FNames = Dir(FromPath & FileExt) If Len(FNames) = 0 Then MsgBox "No files in " & FromPath Exit Sub End If Set FSO = CreateObject("scripting.filesystemobject") On Error Resume Next FSO.CopyFile Source:=FromPath & FileExt, Destination:=ToPath On Error GoTo 0 End Sub