【问题标题】:Undo function to revert the reset contents macro撤消功能以恢复重置内容宏
【发布时间】:2017-03-10 10:39:07
【问题描述】:

我在工作表上有一个 Active X 控件按钮,它将“重置工作表的内容”。

我还想添加一个名为“撤消按钮”的其他按钮,该按钮应该恢复使用“重置内容”清除的内容。这可能吗?

Private Sub CommandButton21_Click()
Worksheets("DropSheet").Range("E7:E15").ClearContents
End Sub

请推荐

【问题讨论】:

  • 它需要在更改之前创建工作表的快照,然后使用快照重置页面。在进行更改之前,您实际上会复制工作表,然后如果需要撤消,则将工作表粘贴回去。
  • @ScottCraner 感谢您的回复。您建议保留一张表来存储快照并在单击撤消按钮时使用。正确的?一个问题,它不会增加电子表格的大小吗?
  • 它会增加大小,因为您正在创建工作表的备份(通过复制它,即使它具有相同的值)。该过程类似于:当按下重置按钮时复制目标工作表并将其隐藏,然后清除目标工作表内容。单击撤消时,删除目标工作表,然后复制隐藏的工作表。 (那么隐藏的工作表也可以删除)
  • @RCaetano 谢谢。让我试着努力。但我担心床单的大小。由于这些电子表格将与其他用户共享,因此大小的增加会导致问题。从隐藏表应对后。你建议删除备份内容吗?
  • 如果您不介意单元格格式,您可以将它们的值存储到数组中,从而不会增加工作表的大小。当然,这在同一个 VBA 会话中有效

标签: vba excel undo


【解决方案1】:

假设在您的相关(“DropSheet”?)工作表中有:

  • 一个以“CommandButton21”命名的 ActiveX 按钮

  • 一个以“UndoBtn”命名的 ActiveX 按钮

将此代码放在同一个工作表代码窗格中:

Option Explicit

Dim lastValues As Variant '<-- worksheet scoped variable where to store "last" values in before CommandButton21 button clears them

Private Sub CommandButton21_Click()
    With Range("E7:E15") '<--| reference your relevant range
        lastValues = .Value '<--| first, store its content in the worksheet scoped array variable
        .ClearContents '<--| then, clear its content
    End With
End Sub

Private Sub UndoBtn_Click()
    Range("E7:E15").Value = lastValues '<--| write'em back!
End Sub

【讨论】:

  • @sady,你通过了吗?
猜你喜欢
  • 2019-02-17
  • 2013-03-12
  • 2014-02-07
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 2011-03-27
相关资源
最近更新 更多