有人可以帮我一个宏吗?我是一个完整的新手。
我希望宏保存我的excel文件,但首先检查是否已存在同名文件。如果是,则宏以保存文件后的版本。例如,如果Testworkbook.xls已经存在,那么宏将新文件保存为Testworkbook_v1.xls等等。下面是我尝试的代码,但它给出了错误。
Sub SaveAs()
'
' SaveAs Macro
ChDir "C:\Documents and Settings\Sae\Desktop"
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\Sae\Testworkbook" & v + 1 & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
End Sub
非常感谢任何帮助。
非常感谢 SAE
答案 0 :(得分:2)
只要您保存工作簿,此代码就可以使用。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim filePath As String, wbName As String, version As Integer
filePath = "C:\Documents and Settings\Sae\Desktop" //Change as appropriate
wbName = "Testworkbook - v"
If Dir(filePath & Application.PathSeparator & ThisWorkbook.Name) = "" Then // Workbook does not exist
ThisWorkbook.SaveAs fileName:=filePath & Application.PathSeparator & wbName & 1
Else
version = CInt(VBA.Right$(VBA.Left$(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4), VBA.Len(VBA.Left$(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4)) - Len(wbName))) + 1
ThisWorkbook.SaveAs fileName:=filePath & Application.PathSeparator & wbName & version
End If
End Sub
请注意,这假定.xls
是文件扩展名
答案 1 :(得分:0)
Dir()将帮助您确定文件是否已存在。
Workbook.SaveAs()会帮助您保存文件。
您需要将字符串与&
运算符连接在一起(以添加V1
)。
修改
感谢您发布所拥有的内容。我想出了
Sub SaveNumberedFile()
Static count As Integer
Dim filestr As String
filestr = "C:\Users\Me\Documents\Code\TestWkbk"
ThisWorkbook.Activate 'Activate whichever workbook you need
If count = 0 Then
ActiveWorkbook.SaveAs (filestr & ".xls")
ElseIf count > 0 And Dir(filestr & "v" & count - 1 & ".xls") = "" Then
ActiveWorkbook.SaveAs (filestr & "v" & count & ".xls")
End If
count = count + 1
End Sub
我使用静态变量来跟踪数字。这将在调用宏之间保留count
的值。关闭工作簿后,它不会跟踪count
。在这种情况下,您可以使用Dir()
命令检查最后一个文件号是什么,并将静态变量初始化为该值。
我没有将所有的装饰添加到SaveAs
命令,但你似乎知道你需要哪些。
尝试一下,可能需要一些调整。