VBA中BeforeClose事件中调用保护函数

问题描述 投票:0回答:3

我试图在工作簿关闭之前执行保护功能。

保护子系统可以单独工作,但在调用时不起作用

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
vba excel
3个回答
0
投票

我也遇到了保护子的确切问题。事实证明 dev1998 是正确的,并且工作簿无法找到子目录。尝试使用: “调用 Module1.Protect”,或者代替 Module1,无论您的保护子模块位于哪个模块


0
投票

您无法对 Workbook_BeforeClose 模块中或来自 Workbook_BeforeClose 模块的工作表进行(某些?)更改。 我从来没有在任何地方读过它,但似乎一旦触发此事件,Excel就会查看工作表。

我有一张未受保护的床单。 它“从未”受到保护。 但是当我尝试从 Workbook_BeforeClose 模块向其添加时间戳时,我收到了“受保护的工作表”错误。 它也是一个隐藏的工作表,所以我尝试使其可见,以便我可以验证它确实不受保护。 我无法通过代码或属性框执行此操作。

我最终所做的是将我的清理例程从 Workbook_BeforeClose 移至 Workbook_Open,并且再也没有出现过问题。


0
投票
some

语句不会在从 BeforeClose when 工作簿通过 ThisWorkbook.Close 方法专门关闭时调用的函数中执行。 尝试保护/取消保护工作簿、显示/隐藏工作表以及更改 OnKey 事件不会生效。其他语句(例如更改范围值)仍然有效。在 BeforeClose 事件中设置断点,然后单步执行代码会显示受影响语句的执行情况,但它们实际上不会执行任何操作,执行只是跳到下一条语句。

它们

确实

在以下情况下仍然有效:

直接调用程序
  • 调用应用程序.退出
  • 使用 X 按钮关闭工作簿
  • 因此,在这种情况下,请在调用 ThisWorkbook.Close 之前显式调用所需的过程

© www.soinside.com 2019 - 2024. All rights reserved.