VBA:自动将 excel sheet 保存为 V-1、V-2 和 V-3,具体取决于文件夹中是否已有同名文件

VBA: Automatically saving the excel sheet as V-1, V-2 and V-3 depending on if there is a file with that name already in the folder

我在 VBA 工作。我想用我的 sheet 中的值保存 excel 文档。但是,可以存在重复的相同文件名。如果重复相同的文件名,我希望 VBA 将其保存为不同的版本号。例如,如果文件名为 CAT DOG,并且有第二个文件保存为 CAT DOG,我希望 VBA 自动将其保存为 V-2。如果已经有 V-2,则保存为 V-3,依此类推。这是我到目前为止的代码。它通常保存得很好,但我在添加版本号时遇到了问题。到目前为止,我附上了代码的图像

''''

path = ""
filename1 = ws.Range("D5").Text & 
ws.Range("O3").Text`e`ws.Range("D6").Text
If filename1(path & filename1 & ".xlsm") = False Then
ActiveWorkbook.SaveAs Filename:=(path & filename1 & ".xlsm"), 
FileFormat:=xlOpenXMLWorkbookMacroEnabled
Exit Sub
End If


Do While Saved = False
 If filename1(path & filename1 & x & ".xlsm") = False Then
  ActiveWorkbook.SaveAs Filename:=(path & filename1 & x & ".xlsm"), 
 FileFormat:=xlOpenXMLWorkbookMacroEnabled
  Saved = True
 Else
   x = x + 1
 End If
Loop
 MsgBox "New file version saved (version " & x & ")"

不覆盖保存的文件(版本控制)

  • 调整常量部分的值。

  • 使用当前设置,它将创建具有以下名称的文件:

    CAT DOG.xlsm
    CAT DOG (V-2).xlsm
    CAT DOG (V-3).xlsm
    etc.
    

    在驱动器 C 上的 Test 文件夹中。

代码

Option Explicit

Sub DoNotOverWrite()
    
    Const dFolderPath As String = "C:\Test\"
    Const dBaseName As String = "CAT DOG"
    Const dLeft As String = " (V-"
    Const dFirstNumber As Long = 2
    Const dRight As String = ")"
    Const dExtension As String = ".xlsm"
    
    Dim dFilePath As String: dFilePath = dFolderPath & dBaseName & dExtension
    Dim dFileName As String: dFileName = Dir(dFilePath)
    Dim n As Long: n = dFirstNumber - 1
     
    Do Until Len(dFileName) = 0
        n = n + 1
        dFilePath = dFolderPath & dBaseName & dLeft & n & dRight & dExtension
        dFileName = Dir(dFilePath)
    Loop
    
    ' If the workbook is the one containing this code, use 'ThisWorkbook'.
    ActiveWorkbook.SaveAs dFilePath, xlOpenXMLWorkbookMacroEnabled
    
    If n < dFirstNumber Then
        MsgBox "File saved.", vbInformation
    Else
        MsgBox "New file version saved (version " & n & ")", vbInformation
    End If

End Sub