首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >另存为附件时忽略Beforesave和Aftersave

另存为附件时忽略Beforesave和Aftersave
EN

Stack Overflow用户
提问于 2019-10-18 02:24:46
回答 1查看 99关注 0票数 4

我有一些放在Workbook_AfterSave和Workbook_BeforeSave中的代码。它工作得很好,做的正是我想要的;但是,在测试过程中,我发现了一个奇怪的情况,Excel在保存文档时不调用这两个函数。

如果我打开一个文档并选择文件->共享->电子邮件->发送附件,那么Excel会保存我的文档并将其放入电子邮件消息中,而无需调用Workbook_AfterSave和Workbook_BeforeSave (我已经通过在Workbook_AfterSave和Workbook_BeforeSave中添加一个消息框弹出窗口来验证这一点,当在Excel中使用发送附件时,它肯定不会弹出)。

因此,我在谷歌周围挖掘,试图找出我可能有哪些其他选择来弥补我的漏洞。

背景:我在Workbook_AfterSave和Workbook_BeforeSave中的代码隐藏了选项卡,非常隐蔽,用户根本看不到它们。用户可以通过使用此电子邮件作为附件“功能”来破解工作簿,并查看隐藏的选项卡。

问题的简化:创建一个没有VBA代码的新工作簿,并另存为.xlsm文件。添加以下代码:

代码语言:javascript
复制
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

   MsgBox "Before Save"

End Sub

选择文件->共享->电子邮件->作为附件发送。注意,您没有看到消息框;但是,如果您做了任何更改,它们肯定会被保存=)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-18 05:31:15

我有关于发生了什么的理论,但没有确凿的证据。

打开工作簿时,Excel会在临时目录中创建一个副本。您所做的所有更改都将在临时副本中进行。当您保存时,它会用临时副本替换您打开的文件,从而将您的更改“写入”磁盘。如果关闭而不保存,则只会删除临时副本。

作为附件发送时,未保存的更改将包含在附件中。但此时工作簿并未“保存”,因为如果您尝试关闭它,Excel将提示您保存更改。

如果当您保存并作为附件发送-发送时,Excel只是附加临时副本,并将该附件命名为与打开的工作簿相同的名称,该怎么办?事实上,由于您可以附加以前从未保存过的工作簿,因此它必须使用临时副本。

这就是我关于它为什么会以这种方式发生的理论。该怎么做呢?我不确定。我想我会想出如何劫持Ribbon后台的“作为附件发送”功能来强制保存,或者干脆不允许在不保存的情况下发送此工作簿。

如果你决定走这条路,搜索Excel功能区文件后台,你应该会找到一些关于如何修改该特定函数的说明。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58438675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档