gpt4 book ai didi

vba - 在宏运行期间保存撤消堆栈

转载 作者:行者123 更新时间:2023-12-01 18:56:57 25 4
gpt4 key购买 nike

我想知道是否有一种方法可以在宏运行后保存撤消操作的能力。我不关心宏的结果 - 只需撤消用户在宏之前完成的操作。

背景:我在 worksheet_change 事件上有一个宏,用于记录谁以及何时对此工作表进行了更改。我不希望它限制用户撤消其操作的能力。

最佳答案

没有简单的方法可以做到这一点,但这是可能的。解决方法是创建三个宏,并使用一些全局变量来保存状态:

  1. 我的宏
  2. MyStateSavingMacro
  3. MyStateRevertingMacro

例如我的宏更改事件工作表的 A1:A10 范围内的单元格。因此,每当调用运行宏的代码时,它都会执行

Sub MyMacro()       
Call MyStateSavingMacro()
' Copies contents and formulae in range A1:A10 to a global data object

'... Code for MyMacro goes here
'
'................

Call Application.OnUndo("Undo MyMacro", "MyStateRevertingMacro")
'This puts MyStateRevertingMacro() in the Undo queue
'So pressing ctrl-Z invokes code in that procedure
End Sub


Sub MyStateSavingMacro()
' Code to copy into global data structures anything you might change
End Sub

Sub MyStateRevertingMacro
' Code to copy onto the spreadsheet the original state stored in the global variables
End Sub

所以就这样了。这并不漂亮,但可以做到。引用:http://msdn.microsoft.com/en-us/library/office/ff194135%28v=office.15%29.aspx

编辑:要在运行 MyMacro 之前保留撤消队列,不优雅的解决方案是创建一个由 4-5 个 MyStateRevertingMacro_1、_2 等组成的链,您可以在其中应用来自 Worksheet_Change 日志记录系统的信息并然后将每个恢复宏中的 Application.OnUndo 链接起来,因此每个恢复宏的 Application.OnUndo 将引用之前的状态恢复代码。

关于vba - 在宏运行期间保存撤消堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24185942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com