2016-08-03 75 views
2

我有一列文件在2列ABVBA复制文件它它不存在

  • A列是源的乙
  • 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 
+0

什么是'iRow'?什么是“目的地”? –

+0

@SiddharthRout我编辑代码 – JeanLo

+0

最后一个问题,您在col A和col B中有什么价值?在此输入。有一个更简单的方法来做到这一点 –

回答

1
If Not fso.FileExists(ClientsFolderDestination) Then 
    fso.CopyFile source, ClientsFolderDestination 
End If 

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

fso.CopyFile source, ClientsFolderDestination, True 

CopyFile Method

2

试试这个。

  1. 这不使用Microsoft Scripting Runtime Library
  2. 它使用一个共同的功能,以检查文件和文件夹
  3. 的存在,它迎合了目标路径类似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 
相关问题