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

VBA检测用户何时执行撤消或重做,vba,undo,redo,Vba,Undo,Redo,在VBA中,在工作表更改事件中,是否有方法知道用户已执行了撤消或重做,更具体地说是重做。记住,也可以使用和 我使用了一种方法来比较撤销和重做堆栈高度的相反演变,除了1种不可约情况外,这两种方法都很有效: 当重做堆栈高度从1变为0时,可能有两个原因: 用户已执行最后一次重做 或者用户在工作表中执行了一个简单的更改,清空了重做堆栈 我没有找到任何东西来区分这两种情况 .OnAction不适用于内置CommandBar控件,并且没有其他属性提供有用的信息 使用的两个CommandBar控件是: 撤

VBA中,在工作表更改事件中,是否有方法知道用户已执行了撤消或重做,更具体地说是重做。记住,也可以使用和

我使用了一种方法来比较撤销和重做堆栈高度的相反演变,除了1种不可约情况外,这两种方法都很有效:

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

  • 用户已执行最后一次重做
  • 或者用户在工作表中执行了一个简单的更改,清空了重做堆栈
我没有找到任何东西来区分这两种情况

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

使用的两个CommandBar控件是:

  • 撤消->
    Application.commandbar(“标准”).FindControl(ID:=128)
  • 重做->
    Application.commandbar(“标准”).FindControl(ID:=129)
  • 堆栈高度计数随属性
    .ListCount
    (如果为0,则在出错时使用
    进行保护)


    提前感谢您提供的任何线索。

    我也尝试了
    应用程序。OnUndo
    ,但它完全无法使用。它需要一个文本,终止堆栈和一个
    应用程序。过程中的Undo
    将生成一个错误。无论如何,
    Application.OnRepeat
    似乎不是
    Application.OnUndo
    的对应项。它只对a作出反应,不显示文本(!)并阻止重做按钮和VBA重做(
    Application.CommandBars(“Standard”).FindControl(ID:=129)。在我使用的跟踪用户输入的访问中执行

    。在输入时,
    OnDirty
    转到
    true
    ,在
    undo
    时,
    OnDirty
    转到false。我不知道Excel中是否存在这种情况。谢谢你的建议。不幸的是,它在Excel中不起作用,属性未知。