在 Excel 2007 的“另存为”框中,有一个“创建备份”选项,每次保存文件时都会备份该文件。不幸的是,它会将文件备份到与原始文件相同的目录中。
有没有简单的方法可以将此目录更改为另一个驱动器/文件夹?我尝试使用宏来执行此操作,最后得到:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Saves the current file to a backup folder and the default folder
'Note that any backup is overwritten
Application.DisplayAlerts = False
ActiveWorkbook.SaveCopyAs Filename:="T:\TEC_SERV\Backup file folder - DO NOT DELETE\" & _ ActiveWorkbook.Name
ActiveWorkbook.Save
Application.DisplayAlerts = True
End Sub
第一次尝试时,此操作会成功创建文件备份,但如果再次尝试,则会收到:
运行时错误“1004”;
Microsoft Office Excel 无法访问文件“T:\TEC_SERV\Backup 文件夹 - DO NOT DELETE\Test Macro Sheet.xlsm”。可能有几个原因:
文件名或路径不存在
该文件正在被另一个程序使用
您尝试保存的工作簿与... 同名。
我知道路径是正确的,我也知道文件未在其他地方打开。工作簿与我尝试保存的工作簿同名,但它应该被覆盖。
我已经在 Stack Overflow 上发布了有关编码的问题,但想知道是否有更简单的方法来做到这一点。
任何帮助都将不胜感激。乔
答案1
您尝试保存的工作簿与...同名。
我假设它以“作为已打开的工作簿”结尾。我不知道为什么这是一项要求,但 Excel 不会触碰两个具有相同文件名的电子表格。您可能想& Workbook.Name & ".bak"
在您的代码中尝试一下。
不过你应该注意到,你可能用错了方法。你试图做的是“版本控制”,你应该查看影子副本和源代码存储库(即使这个 Excel 电子表格不是源代码,你仍然可以对文件进行版本控制)。这很可能是“正确做法 (TM)”
答案2
好吧,总而言之,似乎没有简单的方法可以做到这一点。Excel 中没有允许将备份保存到其他文件夹的功能。所需的是一个相当简单的 Visual Basic 宏 - 类似于上面概述的宏。我已考虑了 Taspeotis 的想法,因此对他的答案投了赞成票。我没有给出正确的答案,因为它没有回答问题。不过,我很感谢你抽出时间。