VBA复制文件它不存在

我有2列AB中的文件列表。

  • A列是B的来源
  • B列是目的地

下面的代码将文件从源文件复制到目标文件。 但是,如果目的地存在,它会给我错误。 有什么条件,如果它发现它存在它不会做任何?

代码有什么问题?

  Sub FC_Copy() Dim ClientsFolderDestination Dim fso As New FileSystemObject Dim rep_destination Dim source lastrow = ThisWorkbook.Worksheets("XClients").Cells(Application.Rows.Count, 1).End(xlUp).Row For i = 5 To lastrow source = ThisWorkbook.Worksheets("XClients").Cells(i, 1).Value ClientsFolderDestination= ThisWorkbook.Worksheets("XClients").Cells(i, 2).Value If fso.FileExists(source) Then rep_destination = Left(ClientsFolderDestination, Len(ClientsFolderDestination) - Len(fso.GetFileName(ClientsFolderDestination)) - 1) If Not fso.FolderExists(rep_destination) Then sub_rep = Split(rep_destination, "\") myrep = sub_rep(0) If Not fso.FolderExists(myrep) Then MkDir myrep End If For irep = 1 To UBound(sub_rep) myrep = myrep & "\" & sub_rep(irep) If Not fso.FolderExists(myrep) Then MkDir myrep End If Next End If fso.CopyFile source, ClientsFolderDestination End If Next i end sub 

尝试这个。

  1. 这不使用Microsoft Scripting Runtime Library
  2. 它使用一个常见的function来检查文件和文件夹的存在
  3. 它迎合目标path,如C:\Sample.xlsx

 Sub FC_Copy() Dim ws As Worksheet Dim source As String, Destination As String, sTemp As String Dim lRow As Long, i As Long, j As Long Dim MyAr As Variant Set ws = ThisWorkbook.Sheets("XClients") With ws '~~> Find Last Row lRow = .Range("A" & .Rows.Count).End(xlUp).Row For i = 5 To lRow source = .Range("A" & i).Value Destination = .Range("B" & i).Value MyAr = Split(Destination, "\") '~~> This check is required for destination paths like C:\Sample.xlsx If UBound(MyAr) > 1 Then sTemp = MyAr(0) For j = 1 To UBound(MyAr) sTemp = sTemp & "\" & MyAr(j) If Not FileFolderExists(sTemp) = True Then MkDir sTemp Next j End If If Not FileFolderExists(Destination) Then FileCopy source, Destination Next i End With End Sub Public Function FileFolderExists(strFullPath As String) As Boolean On Error GoTo Whoa If Not Dir(strFullPath, vbDirectory) = vbNullString Then FileFolderExists = True On Error GoTo 0 Whoa: End Function 
 If Not fso.FileExists(ClientsFolderDestination) Then fso.CopyFile source, ClientsFolderDestination End If 

或者如果你想覆盖目标文件

 fso.CopyFile source, ClientsFolderDestination, True 

CopyFile方法