使用 VBA 对 excel 文件执行所有操作后,如何取回原始文件?

nik*_*iko 4 excel vba excel-2007

谁能告诉我如何撤消对工作簿的所有更改?我有文件 excel1.xlsx,我使用 vba 对 excel.xlsx 进行了排序和许多操作。但最后我希望 excel1.xlsx 与开始时相同。如何使用 vba 撤消所有更改?

 activeworkbook.saved = True
Run Code Online (Sandbox Code Playgroud)

我发现它保留了开始时的所有内容,但它不起作用。所以有什么命令可以在对它执行操作后取回我的原始文件。嗯,是

              wb1.Sheets(1).Activate
              ActiveWorkbook.Close savechanges:=False
Run Code Online (Sandbox Code Playgroud)

它有效,但我不希望我的工作簿被关闭它应该仍然打开。我该怎么做?提前致谢。

aev*_*nko 5

为了撤销一个子程序,你可以选择不保存文件直接关闭它,或者你必须编写一个特殊的子程序来保存文件的状态,然后恢复状态(自定义撤销)。这是子例程的痛苦之一是它们无法通过正常撤消撤消。大多数人,包括我在内,会建议你使用备份。

在制定您的客户撤消例程时,最大的问题是您需要为什么保存状态?保存有关文件的所有信息会非常繁重,因此最好知道要保存的内容。

更新:如果您只有一张数据,这是一种备份工作表的肮脏方式。这更像是一种创建备份的方法的概念证明,而不是最终确定的完美代码。它只是创建当前工作表的备份副本,当您恢复时,您只需删除原始工作表并将备份重命名为以前的名称。:p

如何测试: 在原始工作表中放入一些数据和值,然后运行 ​​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
Run Code Online (Sandbox Code Playgroud)