【问题标题】:Excel add-in with seamless Undo: possible?具有无缝撤消功能的 Excel 插件:可能吗?
【发布时间】:2011-09-20 13:22:02
【问题描述】:

我正在考虑使用 COM( VBA)实现一个 Excel 插件,该插件将处理工作表中的数据。

我将需要此插件与 Undo 堆栈无缝集成。 更具体地说:

  1. 此插件对数据所做的任何更改都需要用户撤消(通过标准撤消操作)
  2. 需要保留在加载项操作发生之前撤消堆栈上的项目

到目前为止,在我的(尽管是敷衍的)研究中,尚不清楚 Excel 是否允许这样做。如果没有,这将是一个阻碍,加载项将没有任何价值。

我的问题:有可能吗?这更像是一个“是或否”的问题,而不是一个“如何”的问题,因为我需要知道我是否正在开始追逐野鹅。但是,任何关于如何完成的指示都是一个奖励。

【问题讨论】:

  • 您是否为此使用了组件,我使用了add-in express,它对我来说效果很好。
  • 是的,考虑使用加载项快递。但是,他们的演示应用程序不支持撤消,它会清除撤消堆栈。我正在尝试找出是否有解决方法。
  • 你可以问他们,他们的帮助台反应很快。根据我的经验,他们通常会在 24 小时内回复。

标签: delphi excel com add-in undo


【解决方案1】:

看来这毕竟是不可能的。

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

有可能。

Application.OnUndo为当前正在执行的sub注册一个undo sub:

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 可以找到并调用它。

【讨论】:

  • Application.OnUndo 是否保留当前堆栈并添加到其中?
【解决方案2】:

看来还是有可能的

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

幸运的是,该链接有完整的源代码,而且看起来很牢固,所以你应该没有问题。
我很高兴知道这对您是否有效。

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

【讨论】:

  • 查看代码,这是一个完全自定义的撤消队列。这不能无缝替换默认的撤消堆栈或与之集成。这就是问题的全部意义所在。
  • 更准确地说,使用这些类的堆栈,您可以轻松编写一个可以注册到Application.OnUndo 的子程序,但无论如何用户的操作都会丢失。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2021-03-31
    • 1970-01-01
    • 2018-05-21
    • 2011-03-25
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    相关资源
    最近更新 更多