Excel 在保存后使用copy创建文件备份会陷入无休止的循环
我编写了一个代码,在用户保存工作簿时运行,该代码保存另一个副本,然后再次保存原始文件,以避免用户编辑“备份”工作簿 一旦它再次保存原始文件,“after_save”触发器将被触发,并保持无限保存 我在这里检查了StackOverFlow的解决方案,但没有找到Excel 在保存后使用copy创建文件备份会陷入无休止的循环,excel,vba,backup,Excel,Vba,Backup,我编写了一个代码,在用户保存工作簿时运行,该代码保存另一个副本,然后再次保存原始文件,以避免用户编辑“备份”工作簿 一旦它再次保存原始文件,“after_save”触发器将被触发,并保持无限保存 我在这里检查了StackOverFlow的解决方案,但没有找到 Private Sub Workbook_AfterSave(ByVal Success As Boolean) Call SaveToLocations End Sub Sub SaveToLocations() Dim WoE
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Call SaveToLocations
End Sub
Sub SaveToLocations()
Dim WoExt, Ext, BkPath, nDateTime As String
Static OrigName As String
'defining variables
nDateTime = Format(Now, "YYMMDD")
OrigName = "C:\Users\xxx.xxx\Desktop\vbatest\test orig.xlsm"
Ext = ".xls"
WoExt = "test orig"
BkPath = "C:\Users\xxx.xxx\Desktop\vbatest\Backup\"
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs (BkPath + WoExt + " - Backup - " + nDateTime + Ext)
ActiveWorkbook.SaveAs OrigName
Application.DisplayAlerts = True
End Sub
要创建存档,您需要在打开工作簿时保存它,而不是在用户关闭工作簿时保存它。下面的代码处理此问题:
Private Sub Auto_Open()
Dim WoExt, Ext, BkPath, nDateTime As String
On Error GoTo ErrorHandler:
'defining variables
nDateTime = Format(Now, "YYMMDD")
Ext = ".xls"
WoExt = ThisWorkbook.Name
BkPath = "C:\Users\xxx.xxx\Desktop\vbatest\Backup\"
Application.DisplayAlerts = False
ActiveWorkbook.SaveCopyAs (BkPath + WoExt + " - Backup - " + nDateTime + Ext)
Application.DisplayAlerts = True
Exit Sub
ErrorHandler:
MsgBox "Backup has not been saved."
End Sub
这只会保存备份,并在最后将编辑保存给用户。要创建存档,您需要在打开工作簿时保存,而不是在用户关闭工作簿时保存。下面的代码处理此问题:
Private Sub Auto_Open()
Dim WoExt, Ext, BkPath, nDateTime As String
On Error GoTo ErrorHandler:
'defining variables
nDateTime = Format(Now, "YYMMDD")
Ext = ".xls"
WoExt = ThisWorkbook.Name
BkPath = "C:\Users\xxx.xxx\Desktop\vbatest\Backup\"
Application.DisplayAlerts = False
ActiveWorkbook.SaveCopyAs (BkPath + WoExt + " - Backup - " + nDateTime + Ext)
Application.DisplayAlerts = True
Exit Sub
ErrorHandler:
MsgBox "Backup has not been saved."
End Sub
这只会保存备份,并在最后将编辑留给用户保存。使用
SaveCopyAs
避免重新保存,并尝试使用If Workbook.Saved=True
以避免进入保存循环首先,如果要保留存档,则应在用户打开工作簿时运行,而不是在应用更改且用户尝试保存工作簿时运行。您所谓的“原件”将只是已编辑工作簿的另一份副本。作为应用程序逻辑的一部分,您应该将变量Public SaveCopy管理为Boolean
,该变量将指示是保存还是注释编辑:这是一个非常好的观点@Masoud,它起到了作用,您应该将其作为答案发布,以便我可以将其标记为已回答。使用SaveCopyAs
避免重新保存,并尝试使用If Workbook.Saved=True
以避免进入保存循环首先,如果要保留存档,则应在用户打开工作簿时运行,而不是在应用更改且用户尝试保存工作簿时运行。您所谓的“原件”将只是已编辑工作簿的另一份副本。作为应用程序逻辑的一部分,您应该将变量Public SaveCopy管理为Boolean
,该变量将指示是保存还是注释编辑:这是一个非常好的观点@Masoud,它起到了作用,您应该将其作为答案发布,以便我可以将其标记为已回答。我会将扩展名保留在名称中(last.xls将是扩展名),以便记录文件的实际扩展名。我会将扩展名保留在名称中(last.xls将是扩展名)为了保持记录,文件的实际扩展名是什么。