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
我在 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