vba - 是否可以撤消宏操作?

标签 vba excel

我想知道我们是否可以撤消宏操作。我使用 Excel 工作表作为表单,并且有一个提交按钮(宏),它获取工作表的计数总和(基于表单输入)并将其存储在下一个工作表中。

我的问题是,如果我们在未完成的情况下按下提交按钮,或者按下两次,我存储在下一张表中的总和就会变得不准确。有没有办法可以撤消Excel中的宏操作?我尝试使用撤消按钮,但它对宏不起作用。有什么办法可以撤销它吗?

我们可以添加另一个宏来撤销前一个宏的工作吗?

最佳答案

我同意所有评论者的建议,他们建议最佳实践是在允许宏进行任何更改之前验证起始条件和/或输入值。然而,验证通常非常复杂,并且在很多“我们现在需要它”的情况下完全不切实际。

我可以建议以下两件非常简单的事情:

1) 让宏在进行任何更改之前保存工作簿,但在进行更改后不保存工作簿。这样,如果您发现出现问题,您可以关闭并重新打开工作簿,然后您将回到宏执行宏执行的任何操作之前的位置。

2) 在采取任何操作之前让宏保存任何受影响的工作表的副本,这样,如果出现问题,您可以恢复(或创建一个宏来恢复)回到起点。

第一个选项需要最少的代码,只需:

ThisWorkbook.Save

在让宏执行宏所做的任何事情之前。

我在测试宏时经常使用这种方法。

第二个选项稍微复杂一点,但也不复杂:

ThisWorkbook.Worksheets("YourWorksheet").Copy(After:=ThisWorkbook.Worksheets("NameOfSheetYouWantItToAppearAfter")

请注意,这将激活副本。如有必要,您可以像这样重新激活原始工作表:

ThisWorkbook.Worksheets("OriginalWorksheet").Activate

希望对您有所帮助!

关于vba - 是否可以撤消宏操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33813806/

相关文章:

sql - 在excel vba中使用数组或字典作为sql中的from子句

excel - VBA 将唯一的正则表达式附加到字符串变量

sql - Excel VBA - 存储过程 (SQL Server)

excel - 工作簿上的默认工作表打开

VBA从Sheet1中的唯一列值创建新工作表+带来相邻的行信息

excel - 范围的替换方法

excel - 从细胞函数中提取单词

sql - 基于不同表的表和表单 - 查看表中是否存在公共(public)记录并在表单中插入 "yes"或 "no"值

excel - 计算系列中的最大值时出错

variables - 通过变量引用工作簿和工作表