2016-03-01 420 views
0

我已经在excel中创建了该宏,使用户可以将多个文件从一个文件夹复制到另一个文件夹。宏的工作原理,它做它应该做的事。我只是想添加一些额外的功能,我不能使它工作。这些是我想要添加的几件事:excel vba宏将多个文件从文件夹复制到文件夹

1检查目标文件夹中是否存在文件,并询问用户是否要覆盖yes/no。如果是覆盖,则不跳至下一个要复制的文件。

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

的,我也有其他的2个问题:

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 

回答

0

对于第一个问题,你只需要ErrHandler:标签前添加Exit Sub
对于第二个问题,你可以尝试像(未经测试):

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

这样MYFILE将包含原始来源情况。

相关问题