【发布时间】:2019-10-18 05:31:14
【问题描述】:
我在 Workbook_AfterSave 和 Workbook_BeforeSave 中有一些代码。它工作得很好,完全符合我的要求;但是,在测试过程中,我发现了一个奇怪的情况,即 Excel 在保存文档时没有调用这两个函数。
如果我打开一个文档并选择文件->共享->电子邮件->作为附件发送,则 Excel 会保存我的文档并将其放入电子邮件中,而无需调用 Workbook_AfterSave 和 Workbook_BeforeSave(我已通过添加Workbook_AfterSave 和 Workbook_BeforeSave 中的 msgbox 弹出窗口,在 Excel 中使用作为附件发送时肯定不会弹出。
所以,我正在与 Google 一起挖掘,试图找出我可能需要哪些其他选项来修复我的漏洞。
背景:我在 Workbook_AfterSave 和 Workbook_BeforeSave 中的代码隐藏了选项卡,非常隐藏,用户根本看不到它们。用户可以通过将此电子邮件用作附件“功能”来破解工作簿并查看隐藏的选项卡。
问题的简化:创建一个没有 VBA 代码的新工作簿并保存为 .xlsm 文件。添加以下代码:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
MsgBox "Before Save"
End Sub
选择文件->共享->电子邮件->作为附件发送。请注意,您没有收到消息框;但是,如果您进行任何更改,它们肯定会被保存 =)。
【问题讨论】:
-
当您使用“作为附件发送”时,您确定它真的被保存了吗?
-
公平地说,用户可以打开 VBE 并以这种方式取消隐藏选项卡,尽管这是一个有趣的问题。
-
我刚试过这个,在分享之前或分享期间没有提示保存。如果您进行更改、共享然后关闭,您将丢失所有更改。似乎事件没有触发,因为没有保存发生。我想解决方案是创建一个按钮或他们可以点击的东西来保存然后分享。
-
虽然共享的工作表会有变化。所以这很有趣。
-
Yes, when the share via email is selected, any changes in the workbook are automatically saved at that point. Excel 当然不会提示用户询问他们是否要保存更改。