BeforeSave 中的 SaveAs (Excel, VBA)
SaveAs inside BeforeSave (Excel, VBA)
我想编程 Excel 以在保存文件之前创建文件备份。
但每次我尝试使用它时,Excel 都会崩溃。
请解释一下为什么即使我插入 Application.EnableEvents = False
以防止无限循环也会发生这种情况?
我使用的代码如下:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.EnableEvents = False
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & "BackUp_" & Date & "_" & ActiveWorkbook.Name, FileFormat:=52
Application.EnableEvents = True
End Sub
提前感谢您的帮助!
编辑:我找到了原因。 SaveAs
将关闭原工作簿而不保存,并自动打开新工作簿。因此excel无法执行原点保存脚本
相反,使用 SaveCopyAs
可以在后台构建副本,因此原始文件在您的 window 中仍然存在。
试试这个:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ActiveWorkbook.SaveCopyAs Filename:=ActiveWorkbook.Path & "\" & "BackUp_" & Format(Date, "YYYYMMDD") & "_" & ActiveWorkbook.Name
End Sub
注意:直接调用Date
可以像2017/11/22
里面包含/
,这是一个无效字符,使用Format
函数可以防止错误。
我想编程 Excel 以在保存文件之前创建文件备份。
但每次我尝试使用它时,Excel 都会崩溃。
请解释一下为什么即使我插入 Application.EnableEvents = False
以防止无限循环也会发生这种情况?
我使用的代码如下:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.EnableEvents = False
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & "BackUp_" & Date & "_" & ActiveWorkbook.Name, FileFormat:=52
Application.EnableEvents = True
End Sub
提前感谢您的帮助!
编辑:我找到了原因。 SaveAs
将关闭原工作簿而不保存,并自动打开新工作簿。因此excel无法执行原点保存脚本
相反,使用 SaveCopyAs
可以在后台构建副本,因此原始文件在您的 window 中仍然存在。
试试这个:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ActiveWorkbook.SaveCopyAs Filename:=ActiveWorkbook.Path & "\" & "BackUp_" & Format(Date, "YYYYMMDD") & "_" & ActiveWorkbook.Name
End Sub
注意:直接调用Date
可以像2017/11/22
里面包含/
,这是一个无效字符,使用Format
函数可以防止错误。