【问题标题】:VBA detect when the user has performed an Undo or a RedoVBA 检测用户何时执行撤消或重做
【发布时间】:2021-02-20 06:34:16
【问题描述】:

有没有办法在 VBA 中的 Worksheet Change 事件 中知道用户已经完成了 撤消或重做和更具体地说是重做。请记住 也可以使用。

我使用了一种比较 Undo 和 Redo 堆栈高度的相反演变的方法,除了 1 个不可约情况外,该方法效果很好:

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

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

我没有找到任何东西来区分这两种情况

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

使用的 2 个 CommandBar 控件是:

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

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

提前感谢任何线索。

【问题讨论】:

  • 在 Access 中,我曾经使用 OnDirty 来跟踪用户输入。在进入时,OnDirty 变为 true,在 undo 上,OnDirty 变为 false。我不知道Excel中是否存在。
  • 感谢您的建议。不幸的是,它在 Excel 中不起作用,属性未知。

标签: vba undo redo


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-10-26
    • 2020-01-08
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多