我有一个文件列表,分为两列 A
和 B
。
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
最佳答案
试试这个。
- 这不使用
Microsoft Scripting Runtime Library
。 - 它使用一个常用函数来检查文件和文件夹是否存在
- 它适合诸如
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
关于VBA复制文件它不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38742708/