构建撤消到Excel VBA宏

21 excel vba undo excel-vba

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

e.J*_*mes 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
Run Code Online (Sandbox Code Playgroud)

  • 虽然这有助于撤消第一个子操作,但不幸的是,您仍然会丢失在运行sub之前可能已经可用的撤消操作的"历史记录".如果有人知道如何解决这个问题,那将是一个真正的福音. (4认同)

小智 6

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


pax*_*blo 5

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

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

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

C22 value  3
C22 format general
Run Code Online (Sandbox Code Playgroud)

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

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

Step   Cell   Type    Value
----   ----   -----   -------
   1   C22    value         3
       C22    format  general
   2...
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不能很好地与“真正的”撤消集成,但我认为没有任何办法可以解决这个问题。