我在解决这个问题时遇到了严重的麻烦:
我有一个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命令来恢复上次保存状态的所有更改。然后我只需从上面运行宏并保存删除。
感谢您的帮助!
答案 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
当然,并非“自上次保存以来的所有更改都将丢失”,因为您的内部数据将被保存。