当用户进行更改然后关闭工作簿时停止“另存为”提示
Posted
技术标签:
【中文标题】当用户进行更改然后关闭工作簿时停止“另存为”提示【英文标题】:Stop the Save As prompt when users make changes then close workbook 【发布时间】:2017-11-09 10:29:54 【问题描述】:我已经设法抑制“另存为”方法转到文件 > 另存为,如下所示:
Private Sub Workbook_BeforeSave _
(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI = True Then Cancel = True
End Sub
我已将文件设为只读,因此“保存”选项会阻止它们以这种方式保存。
但是,如果他们对工作簿的工作表进行更改,则会提示他们保存更改。点击“是”会弹出“另存为”提示。
我的最终目标是阻止他们保存在此工作表上或能够在任何地方保存工作表的副本。我希望他们能够打开工作表,使用它的功能/特性,就是这样。
VBA 受密码保护。
他们将通过快捷方式访问它,文件不在他们的机器上(我知道已创建本地副本,这是我的下一个挑战)文件本身将在由 Active Directory 控制的服务器上。
【问题讨论】:
您的整个工作都是基于它们在打开文件时激活 VBA / 宏这一事实。如果他们不执行/允许您的代码运行,那么您的程序将不会执行或“保护”您的文件。此外,您无法阻止他们使用其他应用程序(如 LibreOffice)打开文件,这将绕过您可能已实施的宏和其他一些安全机制(如 VBA 密码保护)。而这些只是一些缺点。简而言之:如果你问我,我会说你使用 Excel 时没有真正的安全性。 我最初将在用户计算机上设置 Excel 和此连接,因此我将自己启用它。我知道 Excel 不是万无一失的,但越难或越难,我就可以让它变得更好。如果有人真的想得到它,那么他们会得到它,但这张表的用户通常不会精通 IT。 【参考方案1】:由于我们似乎同意 Excel 不提供任何真正的保护,这可能就是您要寻找的:
(1) 确保用户在文件关闭时不会收到有关保存更改的问题。
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Close SaveChanges:=False
End Sub
(2) 确保用户无法打印 Excel 文件:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Cancel = True
End Sub
(3) 您甚至可以在文件停用时自动关闭该文件,以尝试确保他们不会创建引用您的“受保护”文件的新 Excel 文件:
Private Sub Workbook_Deactivate()
ThisWorkbook.Close SaveChanges:=False
End Sub
请注意,你不能/不应该同时使用所有的 sub,因为它们是部分相互依赖的。因此,如果您使用选项 (1) 和事件 BeforeClose
关闭文件,那么子 Deactivate
将失败,因为没有打开的 Excel 文件可以关闭(反之亦然)。
【讨论】:
对于 (1),它可以很好地关闭工作簿,但后面的 Excel 窗口仍然打开。如何同时关闭它? 在这种情况下你想使用Application.DisplayAlerts = False : ThisWorkbook.Parent.Quit
。因为 Excel 文件的parent
被认为是显示给定 Excel 文件的 Excel 应用程序(在打开多个 Excel 实例时特别有用)。 DisplayAltert
必须首先被禁用,以确保用户确实不会收到是否应该先保存文件的问题。以上是关于当用户进行更改然后关闭工作簿时停止“另存为”提示的主要内容,如果未能解决你的问题,请参考以下文章