尽管文件未保存,但在VBA代码崩溃后Excel取消保护工作表

时间:2018-04-10 16:22:00

标签: excel vba excel-vba

我有一本同事使用的excel书,当他们打开它时受到保护,在测试我正在开发的新功能时,我遇到了一个奇怪的Excel,我不明白:

单击链接到宏的按钮时,VBA代码首先取消保护工作簿,如下所示:

Sub ButtonClick()
Dim userrange As Variant
Dim rrow As Range
Dim teeth As Range

' unprotect sheet
ActiveSheet.Unprotect ("password")
Application.EnableEvents = False

然后宏崩溃(我知道为什么,这不是问题)。然后我按下弹出的错误消息结束,并关闭excel而不保存文件。重新打开文件后,该书将不受保护。

基本上,代码在到达之前崩溃了:

' protect sheet
ActiveSheet.Protect ("password")
Application.EnableEvents = True

重新打开时,是否可以确保excel文件仍然受到保护,即使在取消保护后VBA代码崩溃了?

这是一个问题的原因是我在工作簿中有一些现有功能,只有在工作簿受到保护时才能正常工作。因此,如果有人崩溃该程序然后尝试重新打开它,他们不能在没有我输入的情况下再次正常使用它。

我觉得奇怪的是Excel' save'即使我关闭文件而不保存任何内容,工作簿也不受保护。我知道一些'东西'在运行VBA代码时会在后台发生,例如清除撤消堆栈,我猜测后台的某些内容是否记录了工作表未受保护的事实,即使我没有保存文件?我想了解这个机制,如果有人对如何记录保护状态有解释,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

作为一种变通方法,您可以使用Workbook_Open事件确保文件在打开时受到保护(添加到ThisWorkbook模块)。这并没有解释工作簿目前是如何保持不受保护的,但你应该能够规避这一点。

Private Sub Workbook_Open()

' Ensure sheets are protected at open
ActiveSheet.Protect "password"

End Sub