构build撤销到Excel VBAmacros

运行它们后,Excelmacros似乎不允许使用“撤消”。 有没有办法在Excel中将undofunction复制到VBAmacros中?

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 

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

在运行我的macros之前,我总是保存(至less在testing期间),如果一切都变成梨形,我可以退出而不保存并重新打开它。

把它烧成实际的macros,你必须基本上logging列表中所有变化的单元格(单元格内容,公式,格式等等)的旧状态,然后有一个撤销macros,它以相反的顺序播放该列表。

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

 C22 value 3 C22 format general 

以相反顺序(与另一个macros)回放将恢复更改。

您可以有一个额外的表格来保存macros撤消信息,如:

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

不幸的是,它不能与“真正的”撤销很好地结合,但我不认为有任何方法。