构建撤消到Excel VBA宏

时间:2008-12-04 00:21:05

标签: excel vba excel-vba undo

Excel宏似乎在运行它们后似乎不允许使用“撤消”。有没有办法在Excel中将undo功能烘焙到VBA宏中?

3 个答案:

答案 0 :(得分:22)

Excel VBA具有Application.OnUndo功能来处理此问题:

Public Sub DoSomething

    ... do stuff here

    Application.OnUndo "Undo something", "UnDoSomething"
End Sub

Public Sub UnDoSomething

    ... reverse the action here

End Sub

答案 1 :(得分:6)

我的想法非常简单,因为宏中的第一行将副本保存在备份目录中,然后关闭该工作簿并重新打开原始文件。如果您不喜欢宏运行的结果,请拉出保存的工作簿。保持简单呃?

答案 2 :(得分:3)

我总是在运行我的宏之前立即保存(至少在测试期间)然后,如果一切都变成梨形,我可以退出而不保存并重新打开它。

将它烘焙到实际的宏中,你必须基本上记录列表中更改的所有内容(单元格内容,公式,格式等)的旧状态,然后有一个撤消宏,以反向播放该列表顺序。

例如,如果您的宏将单元格C22内容从“3”更改为“7”并将格式从“常规”更改为“数字,2位小数”,则列表将为:

C22 value  3
C22 format general

以相反的顺序播放(使用另一个宏)将恢复更改。

您可以拥有一个额外的工作表来保存宏撤消信息,例如:

Step   Cell   Type    Value
----   ----   -----   -------
   1   C22    value         3
       C22    format  general
   2...

不幸的是,它不会很好地与'真实'撤消整合,但我认为没有办法解决这个问题。