【发布时间】:2016-08-18 22:30:39
【问题描述】:
我目前有一个启用宏的电子表格,它执行各种功能,包括更新、创建和删除数百行。如果出于某种原因,其中一个函数出现故障并删除了本应保留的信息 - 我想实现一个“撤消”按钮,以恢复刚刚被宏更改的电子表格版本。
我认为它会如下所示:
Public InstanceOfWorksheet As Range
Sub Button_Click()
InstanceOfWorksheet = CurrentWorksheet.UsedRange 'Or something like this
'Macro functionality here
CurrentWorksheet.Update() 'Worksheet has now been updated
End Sub
Sub Button2_Click()
InstanceOfWorksheet = CurrentWorksheet.UsedRange 'Or something like this
'Second Macro functionality here
CurrentWorksheet.Update() 'Worksheet has now been updated
End Sub
Sub UndoLastMacro_Click()
CurrentWorksheet = InstanceOfWorksheet
End Sub
因此,在这种情况下,当您激活 UndoLastMacro 命令时,您将有效地“恢复”上次调用宏之前的工作表版本。
我的问题是,InstanceOfWorksheet 应该是什么变量类型,以及将InstanceOfWorksheet 的内容复制回当前工作表的最简单方法是什么?
提前致谢! :)
【问题讨论】:
-
您需要多个变量,一个范围变量和一个数据类型为
Variant的数组变量来保存目标范围的值。这假设您的更改仅与值有关。如果公式、格式等也改变了,那就复杂得多了。 -
再想一想,一个更简单、更安全的方法是制作工作表的临时副本,如果在进行更改时没有出现错误,则将其删除。使用
On error resume next,如果最后是Err.Number = 0,则删除临时副本。 -
您最好创建一个新工作表来存储
.UsedRange.Formula。除非记录每个更改,否则 VBA 很难撤消。或者,只需将工作簿的副本保存到 Temp 文件夹?
标签: vba excel macros worksheet-function