VBA复制文件它不存在

标签 vba excel

我有一个文件列表,分为两列 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. 它使用一个常用函数来检查文件和文件夹是否存在
  3. 它适合诸如 C:\Sample.xlsx
  4. 之类的目标路径

代码

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/

相关文章:

excel - 以波浪号分隔导出

vba - 将行附加到 .csv 文件会以某种方式丢失前两列数据

vba - 如何删除隐藏的引号

vba - 如何使用vba将文本框添加到powerpoint演示文稿中

excel - vba excel 仅复制 protected 工作表的按键 ctrl+c 上的可见单元格

excel - 使用 selenium 检查域

excel - 使用替换功能将一个字符替换为两个

vba - 从给定的日期/时间减去指定的小时数以获得新的日期/时间

excel - 使用动态范围将一张纸复制到多张纸的宏

Excel:如果字符串条件匹配,则计算不同的数值