【问题标题】:Excel VBA: Undo all normal Excel-changes since last save, then run macro and saveExcel VBA:撤消自上次保存以来的所有正常 Excel 更改,然后运行宏并保存
【发布时间】:2013-09-05 08:27:28
【问题描述】:

我在解决这个问题时遇到了严重的问题:

我有一个 Excel 工作簿(2010 或更高版本),其中包含一个必须在关闭前运行的宏。它会删除内部数据并保存此更改:(目前没有问题)

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim xlSheet As Worksheet

For Each xlSheet In Sheets
    If xlSheet.Name = "internalDataSource" Then
        MsgBox "Internal data will be deleted from the workbook. Changes are saved."
        Application.DisplayAlerts = False
        xlSheet.Delete
        ThisWorkbook.Save
        Application.DisplayAlerts = True
    End If
Next xlSheet

End Sub

我的问题: 用户应该能够改变一些东西。现在,如果用户更改了某些内容,他通常会被问到是否要保存更改。在这个版本中,别无选择,只能保存他的更改。目前它们总是被保存。

如何让用户能够说“不,不要保存我的更改”。但仍然运行宏并保存删除内部数据?

我正在拼命寻找一个 VBA 命令来将所有更改恢复到上次保存的状态。然后我会简单地从上面运行宏并保存我的删除。

感谢您为我提供的任何帮助!

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    这可以通过在每次正常保存完成时保存工作簿的副本、将内部数据移动到副本并将副本重命名为原始副本来完成。具体如何执行此操作的选项很少,我将在此处发布一些建议以清除我的答案:

    保存副本可以放在Workbook_BeforeSave 事件中。

    将副本重命名为原始副本可以在您在此处列出的Workbook_BeforeClose 过程中完成。

    要通过用户运行消息框,您可以考虑将您列出的 MsgBox 编辑为:

    If (MsgBox("You are attempting to exit." & vbNewLine _
    & "All changes since the last save will be lost." & vbNewLine _
    & "Okay to proceed?", 308) = vbNo) Then
      Cancel = True
    End If
    

    当然,不是“自上次保存后的所有更改都将丢失”,因为您的内部数据将被保存。

    【讨论】:

    • 嘿,谢谢你的建议!我不确定你的版本是否能产生我想要的功能。无论如何,我觉得复制,保存,重命名不像以下解决方案那么容易:我利用 Application.OnTime 删除用户想要保存更改的内部数据ID。即:如果 userWantsToSave => 保存,则现在执行 Application.OnTime,myFunction myFunction 执行以下操作:删除内部数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多