VBA会检测用户何时执行了撤消或重做

问题描述

工作表更改事件中的 VBA 中,有一种方法可以知道用户已执行 Undo或Redo ,并且更具体地说是重做。请记住,也可以使用

我使用了一种比较撤消和重做堆栈高度的相反演变的方法,该方法在1种不可归约的情况下可以很好地工作:

当重做堆栈高度从1变为0时,可能有两个原因

  • 用户执行了最后一次重做
  • 或者用户在工作表中做了一个简单的更改,清空了Redo堆栈。

我没有发现任何可区分这两种情况的

.OnAction不适用于内置CommandBar控件,并且没有其他属性提供有用的信息。

使用的2个CommandBar控件是:

  1. 撤消-> Application.CommandBars("Standard").FindControl(ID:=128)
  2. 重做-> Application.CommandBars("Standard").FindControl(ID:=129)

堆栈高度计数带有属性.ListCount(如果为0,则用On Error保护)

预先感谢您提供任何线索。

解决方法

我也尝试过Application.OnUndo,但完全无法使用。它需要一个文本,杀死堆栈,过程中的Application.Undo会产生错误。而且无论如何Application.OnRepeat似乎不是Application.OnUndo的对应物。它只对起反应,不显示文本(!),并阻止重做按钮和VBA重做(Application.CommandBars("Standard").FindControl(ID:=129).Execute