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

标签 vba excel excel-2007

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

 activeworkbook.saved = True

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

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

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

最佳答案

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

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

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

关于vba - 使用VBA对Excel文件执行所有操作后如何取回原始文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6993182/

相关文章:

java - 如何访问 Apache POI 上存储在 Sharepoint(带身份验证)上的 .xlsx 文件?

excel - 使用选项保护 Office 脚本中的工作表

VBA Excel-Access 3251 运行时错误

sql - 使用参数从 excel 存储过程

php - 使用 PHPExcel 按行和列将 Excel 中的单元格合并在一起

vba - Excel VBA 函数根据函数名称生成#REF?

excel - 如何在vba中获得无限范围

excel - 为什么 Excel 2010 VBA 用户窗体文本框字体会根据框架大小而变化?

java - 使用JXLS导入Excel : is it possible to specify sheet by order rather than name?

excel - Excel 工作表中的独立计时器宏