将文件复制到现有文件夹时出错
我正在编写一些提示用户添加文件夹名称的代码,然后将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