Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过excel宏避免覆盖并将两个文件保留在文件夹中_Excel_Vba_Copy Paste - Fatal编程技术网

如何通过excel宏避免覆盖并将两个文件保留在文件夹中

如何通过excel宏避免覆盖并将两个文件保留在文件夹中,excel,vba,copy-paste,Excel,Vba,Copy Paste,我创建了一个代码,通过活动工作簿中包含的部分名称复制文件,完成后,单元格将着色 我以前使用“布尔”选项覆盖文件,但现在如果目标文件夹中存在同名的相同文件,我需要将两个文件都保留在目标文件夹中。如何解决此问题 Sub Copy_by_keyword() Dim sSrcFolder As String Dim sTgtFolder As String Dim sFilename As String Dim c As Range Dim rPatterns A

我创建了一个代码,通过活动工作簿中包含的部分名称复制文件,完成后,单元格将着色

我以前使用“布尔”选项覆盖文件,但现在如果目标文件夹中存在同名的相同文件,我需要将两个文件都保留在目标文件夹中。如何解决此问题

Sub Copy_by_keyword()
    Dim sSrcFolder As String
    Dim sTgtFolder As String
    Dim sFilename As String
    Dim c As Range
    Dim rPatterns As Range
    Dim bBad As Boolean

    sSrcFolder = ("C:\Personal\Reports")
    sTgtFolder = ("D:\VBA\Trade\")

    Set rPatterns = ActiveSheet.Range("M10:M100").SpecialCells(xlConstants)
    For Each c In rPatterns
        sFilename = Dir(sSrcFolder & "*" & c.Text & "*")
        If sFilename = "" Then
            c.Interior.ColorIndex = 4
            bBad = False  'I tried to use this as False but nothing happens'
        Else
            While sFilename <> ""
                FileCopy sSrcFolder & sFilename, sTgtFolder & sFilename
                sFilename = Dir()
                c.Interior.ColorIndex = 6
            Wend
        End If
    Next c
    If bBad Then MsgBox "Files not found"

End Sub
Sub-Copy_by_关键字()
将sSrcFolder设置为字符串
将sTgtFolder设置为字符串
将sFilename设置为字符串
调光范围
变暗模式作为范围
Dim bBad作为布尔值
sSrcFolder=(“C:\Personal\Reports”)
sTgtFolder=(“D:\VBA\Trade\”)
设置rPatterns=ActiveSheet.Range(“M10:M100”).SpecialCells(xlConstants)
对于rPatterns中的每个c
sFilename=Dir(sSrcFolder&“*”&c.Text&“*”)
如果sFilename=“”,则
c、 Interior.ColorIndex=4
bBad=False“我试图将其用作False,但什么也没发生”
其他的
而sFilename“”
文件副本sSrcFolder和sFilename、sTgtFolder和sFilename
sFilename=Dir()
c、 Interior.ColorIndex=6
温德
如果结束
下一个c
如果是bBad,则MsgBox“未找到文件”
端接头

如果要保留这两个文件,请检查它是否存在,并在复制之前重命名它。 要检查它是否存在,可以使用以下代码段

Dim fso As New FileSystemObject
Dim filepath As String
filepath = "yourfilepath"

While fso.FileExists(filepath)
'rename it
Wend
要使用
FileSystemObject
,必须在
Windwos脚本主机对象模型上设置一个引用

编辑:回答您的评论: 您可以检查是否存在,然后打开一个消息框:

If MsgBox("Override", vbYesNo) = vbYes Then
End If

实际上,我需要的是在存在相同文件名时将两个文件都保留在目标文件夹中,就像我们手动复制时windows要求将两个文件都保留在目录中。是否可以通过vba宏完成?我非常感谢您的帮助,但不幸的是,有些文件的名称会随着时间和剩余部分的不同而变化在我看来,打开一个消息框并不是最好的解决方案。不是吗?因此,如果您没有选择使用消息框,请使用其他方法。检查文件是否存在,如果存在,请生成另一个名称。