Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 当用户进行更改时,停止“另存为”提示,然后关闭工作簿_Excel_Vba - Fatal编程技术网

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