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函数可以防止错误。