Excel 当用户进行更改时,停止“另存为”提示,然后关闭工作簿
我已通过以下操作成功禁用了转到文件>另存为的“另存为”方法:Excel 当用户进行更改时,停止“另存为”提示,然后关闭工作簿,excel,vba,Excel,Vba,我已通过以下操作成功禁用了转到文件>另存为的“另存为”方法: Private Sub Workbook_BeforeSave _ (ByVal SaveAsUI As Boolean, Cancel As Boolean) If SaveAsUI = True Then Cancel = True End Sub 我已将文件设置为只读,因此“保存”选项会阻止它们以这种方式保存 但是,如果他们对工作簿中的工作表进行更改,系统会提示他们保存更改。单击“是”
Private Sub Workbook_BeforeSave _
(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI = True Then Cancel = True
End Sub
我已将文件设置为只读,因此“保存”选项会阻止它们以这种方式保存
但是,如果他们对工作簿中的工作表进行更改,系统会提示他们保存更改。单击“是”将显示“另存为”提示
我的最终目标是阻止他们在这张纸上保存,或者在任何地方保存这张纸的副本。我希望他们能够打开工作表,使用其功能/特性,就是这样
VBA受密码保护
他们将通过快捷方式访问该文件,该文件不在他们的计算机上(我知道创建了本地副本,这是我的下一个挑战)该文件本身将位于Active Directory控制的服务器上。因为我们似乎同意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文件:
请注意,您不能/不应该同时使用所有子组件,因为它们是相互依存的。因此,如果您使用选项(1)关闭文件,并在关闭前执行事件
BeforeClose
,则子Deactivate
将失败,因为再也没有打开的Excel文件可关闭(反之亦然)。您的整个工作都基于这样一个事实,即打开文件时它们会激活VBA/宏。如果他们不执行/不允许您的代码运行,那么您的程序将不会执行或“保护”您的文件。此外,您无法阻止他们使用其他应用程序打开文件,例如,这些应用程序将绕过宏和您可能已实施的其他安全机制(如VBA密码保护)。这些只是一些缺点。简而言之:如果你问我,那么我会说当你使用Excel时没有真正的安全性。我将在用户计算机上最初设置Excel和此连接,因此我将自己启用它。我知道Excel不是防弹的,但越难或越让人讨厌,我就能把它做得更好。如果有人真的想得到它,那么他们会的,但是这张工作表的用户通常不了解它。对于(1),它可以很好地关闭工作簿,但后面的Excel窗口仍然打开。如何同时关闭此项?在这种情况下,您希望使用Application.DisplayAlerts=False:ThisWorkbook.Parent.Quit
。因为Excel文件的父级被认为是显示给定Excel文件的Excel应用程序(在打开多个Excel实例时特别有用)。必须首先禁用DisplayAltert
,以确保用户不会遇到是否应首先保存文件的问题。
Private Sub Workbook_Deactivate()
ThisWorkbook.Close SaveChanges:=False
End Sub