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 SubRun Code Online (Sandbox Code Playgroud)
我总是在运行宏之前立即保存(至少在测试期间),然后,如果一切都呈梨形,我可以直接退出而不保存并重新打开它。
将其烘焙到实际的宏中,您必须基本上在列表中记录所有更改的旧状态(单元格内容、公式、格式等),然后使用撤消宏以相反的顺序播放该列表。
例如,如果您的宏将单元格 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)
不幸的是,它不能很好地与“真正的”撤消集成,但我认为没有任何办法可以解决这个问题。