我试图在工作簿关闭之前执行保护功能。
保护子系统可以单独工作,但在调用时不起作用
WorkBook_BeforeClose()
。
模块 1 中的代码:
Public Sub protect()
Dim index As Integer
index = 1
Do While index <= ActiveWorkbook.Worksheets.Count
ActiveWorkbook.Sheets(index).Activate
If ActiveSheet.Name <> "README" Then
ActiveSheet.unprotect
Cells.Select
Selection.Locked = True
Selection.FormulaHidden = False
ActiveSheet.protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveSheet.Range("A1").Select
End If
index = index + 1
Loop
ActiveWorkbook.Sheets(1).Activate
End Sub
本工作簿中的代码:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call protect
End Sub
我也遇到了保护子的确切问题。事实证明 dev1998 是正确的,并且工作簿无法找到子目录。尝试使用: “调用 Module1.Protect”,或者代替 Module1,无论您的保护子模块位于哪个模块
您无法对 Workbook_BeforeClose 模块中或来自 Workbook_BeforeClose 模块的工作表进行(某些?)更改。 我从来没有在任何地方读过它,但似乎一旦触发此事件,Excel就会查看工作表。
我有一张未受保护的床单。 它“从未”受到保护。 但是当我尝试从 Workbook_BeforeClose 模块向其添加时间戳时,我收到了“受保护的工作表”错误。 它也是一个隐藏的工作表,所以我尝试使其可见,以便我可以验证它确实不受保护。 我无法通过代码或属性框执行此操作。
我最终所做的是将我的清理例程从 Workbook_BeforeClose 移至 Workbook_Open,并且再也没有出现过问题。
语句不会在从 BeforeClose when 工作簿通过 ThisWorkbook.Close 方法专门关闭时调用的函数中执行。 尝试保护/取消保护工作簿、显示/隐藏工作表以及更改 OnKey 事件不会生效。其他语句(例如更改范围值)仍然有效。在 BeforeClose 事件中设置断点,然后单步执行代码会显示受影响语句的执行情况,但它们实际上不会执行任何操作,执行只是跳到下一条语句。
它们
确实在以下情况下仍然有效:
直接调用程序