0

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

我有一个必须在关闭前运行的宏的 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 命令来将所有更改恢复到上次保存的状态。然后我会简单地从上面运行宏并保存我的删除。

感谢我得到的任何帮助!

4

1 回答 1

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

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

于 2013-09-13T13:50:30.477 回答