【发布时间】:2018-04-10 16:21:59
【问题描述】:
我有一本同事使用的 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 会“保存”工作簿不受保护的事实,即使我关闭文件而不保存任何内容也是如此。我知道在运行 VBA 代码时会在后台发生一些“事情”,例如撤消堆栈被清除,我猜后台的某些东西正在记录工作表不受保护的事实,即使我不保存文件?我想了解该机制,如果有人对如何记录保护状态有解释,将不胜感激。
【问题讨论】:
-
使用错误处理并作为重新保护工作表的一部分
-
@Tom 你能解释一下即使文件没有保存,工作簿是如何保持不受保护的吗?这基本上是我想了解的。我猜这是一个后台进程,就像运行 VBA 代码时清除撤消堆栈一样。