Excel插件与无缝撤消:可能吗?

我正在考虑实现一个使用COM( 而不是 VBA)的Excel加载项,它将处理工作表中的数据。

我将需要这个加载项与Undo堆栈无缝集成。 进一步来说:

  1. 这个加载项对数据的任何修改都需要用户撤销(通过标准的撤消操作)
  2. 需要保留插件操作发生之前撤消堆栈中的项目

到目前为止,我的(尽pipe敷衍)研究,Excel是否可以允许这一点还不清楚。 如果没有,这是一个showstopper,加载项将没有价值。

我的问题:这可能吗? 这更像是一个“是或否”的问题,而不是一个“如何”的问题,因为我需要知道我是否正在进行大雁追逐。 然而,任何关于如何做的指针都是一个好处。

似乎毕竟是不可能的。

Application.OnUndo方法清除当前的撤消堆栈,并将其置于顶部。
似乎没有任何其他与自定义撤消有关。

有可能的。

Application.OnUndo为当前正在执行的子程序注册一个撤消子程序:

 sub ImMakingChanges() cells(1,1).interior.color = vbyellow application.onundo "Undo the stupid color", "RemoveMyStupidChanges" end sub sub RemoveMyStupidChanges() cells(1,1).interior.colorindex = xlnone end sub 

显然,在野外拯救以前的状态通常是一场噩梦。 但是,你走了。

此外,您的撤消子将需要公众可见,以便Excel可以find并调用它。

显然,这是不可能的,即使在Office 2013中也没有计划支持它,根据MSFT员工对此主题的回应。

似乎毕竟是可能的

这可以做到,但你必须写一个相当复杂的撤消处理程序。 这是一个很好地告诉你的链接
如何: http : //www.jkp-ads.com/Articles/UndoWithVBA01.asp

幸运的是链接有完整的源代码,它看起来ironclad所以你应该没有问题。
我会很高兴听到如何/如果这为你工作。

PS:这里是荷兰语的相同链接: http : //www.jkp-ads.com/Articles/UndoWithVBA01NL.asp