Excel VBA:撤消自上次保存以来的所有正常Excel更改,然后运行宏并保存

时间:2013-09-02 09:20:29

标签: excel vba excel-vba

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

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

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命令来恢复上次保存状态的所有更改。然后我只需从上面运行宏并保存删除。

感谢您的帮助!

1 个答案:

答案 0 :(得分: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

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