excel vba宏从文件夹到文件夹复制多个文件

时间:2016-03-01 15:16:12

标签: excel vba excel-vba

我在excel中创建了这个宏,使用户可以将多个文件从一个文件夹复制到另一个文件夹。宏工作,它做它应该做的事情。我只想添加一些额外的功能,但我无法使其正常工作。这些是我想要添加的几件事:

1 - 检查目标文件夹中是否已存在文件,并询问用户是否要覆盖是/否。如果是覆盖,如果没有跳到下一个要复制的文件。

2 - 如果源文件夹中缺少文件,ErrHandler会将缺失文件的名称从A列复制到M列。我这样做的方式有效,但并不是我希望它如何工作。我想要的是,如果缺少单元格A3,A7,A10中的文件名。这些名称应复制到M1,M2,M3等。而不是将它们复制到M3,M7,M10

我还有其他两个问题:

1 - ErrHandler消息框看起来比它应该更多。复制完成后,它仍会再显示2次。

2 - 宏重写文件名的写入方式。例如,如果原始文件名以小写形式写入并且在单元格中,则以大写形式写入。复制文件后,将以大写形式写入。我想保留原来的名字。

    Dim r As Long
    Dim SourcePath As String
    Dim dstPath As String
    Dim myFile As String

    SourcePath = Range("F1")
    dstPath = Range("F3")

    On Error GoTo ErrHandler

    For r = 1 To 3000
        myFile = Range("A" & r)
        FileCopy SourcePath & "\" & myFile, dstPath & "\" & myFile

        If Range("A" & r) = "" Then 
           Exit For
        End If

    Next r

        MsgBox "The file(s) can found in: " & vbNewLine & dstPath, , "COPY COMPLETED"

ErrHandler:
    MsgBox "Copy error: " & SourcePath & "\" & myFile & vbNewLine & vbNewLine & _
    "File could not be found in the source folder", , "MISSING FILE(S)"

Range("A" & r).Copy Range("M" & r)

Resume Next

End Sub

1 个答案:

答案 0 :(得分:0)

对于第一期,您只需在Exit Sub标签前添加ErrHandler: 对于第二个问题,您可以尝试类似(未经测试):

myFile = dir(SourcePath & "\" & Range("A" & r))
FileCopy SourcePath & "\" & myFile, dstPath & "\" & myFile

这样myFile将包含原始的源案例。