如何使用VBA在Excel文件上执行所有操作后恢复原始文件?

任何人都可以告诉我如何撤消对工作簿的所有更改? 我有文件excel1.xlsx,我已经使用vba excel.xlsxsorting和许多操作。 但是最后我想让excel1.xlsx与之前的一样。 如何使用vba撤消所有更改?

activeworkbook.saved = True 

我发现它保留了所有的内容在开始,但它不起作用。所以有任何命令,我可以得到我的原始文件执行操作之后。 嗯,是

  wb1.Sheets(1).Activate ActiveWorkbook.Close savechanges:=False 

它的工作,但我不希望我的工作簿被closures,它应该仍然打开。 我如何做到这一点? 提前致谢。

为了撤消子例程,可以select不保存文件并closures它,或者必须编写一个特殊的子例程来保存文件的状态,然后恢复状态(自定义撤消)。 这是子例程的一个难题,就是它们不能通过正常的撤销撤销。 大多数人,包括我,都会build议你做一个备份。

当你制定你自己的撤销例程的时候,最大的问题是你需要什么来保存状态? 保存所有关于该文件的信息会非常繁重,所以很高兴知道要保存的内容。

更新 :如果您只有1张数据,这是备份表单的一种肮脏的方法。 这更多的是一种创build备份的方式的概念certificate,而不是最终完善的代码。 它只是创build电子表格的备份副本,当您重新启动时,您只需删除原始表格,然后将备份重命名为以前调用的内容。 :p

如何testing:将一些数据和值放在原始表单中,然后运行Test()子例程!

 Public backupSheet As Worksheet Public originalSheet As Worksheet Public originalSheetName As String Sub CreateBackup() Set originalSheet = Application.ActiveSheet originalSheetName = originalSheet.Name originalSheet.Copy After:=Sheets(Application.Worksheets.Count) Set backupSheet = Application.ActiveSheet backupSheet.Name = "backup" originalSheet.Activate End Sub Sub RestoreBackup() Application.DisplayAlerts = False originalSheet.Delete backupSheet.Name = originalSheetName Application.DisplayAlerts = True End Sub Sub ZerosFromHell() Range("A1:Z100").Select Cells.Value = 0 End Sub Sub Test() Call CreateBackup Call ZerosFromHell MsgBox "look at all those darn 0s!" Call RestoreBackup End Sub 

简短的回答:你不能。 抱歉。

使用VBA对工作表进行的更改不能通过单击button或使用单个标准VBA语句撤消。

正确的做法似乎是:在工作表副本上执行VBA驱动的工作,如果不想保留更改,则删除/不保存此副本(如果需要,则重新打开原始副本这样做)。 但从你的问题来看,这听起来像你不想这样做。

然后,您唯一的select就是编写自己的VBA程序,回溯您所做的所有更改。 根据你所做的操作,扭转它们可能是一个非常复杂的事情,而不是保存和重新开放。 但是,如果你坚持,一定要把自己击倒!

  1. 在运行macros之前保存原始工作簿的副本。 在子例程的开始处使用.SaveAs方法。
  2. 在原始工作簿中运行VBAmacros例程。
  3. 现在有第二个macros“撤消VBA更改”,从步骤(1)打开工作簿副本,closures步骤(2)中运行macros的工作簿并再次调用.SaveAs方法覆盖步骤(2)中的现有工作簿。

注意:为了使这个UndoMacro工作,你需要把它放在一个Addin或一个单独的工作簿(一个插件是更干净)。 这将允许您运行.SaveAs方法并覆盖步骤(2)中的原始工作簿,该工作簿此时将被closures以防止发生VBA运行时错误消息。