在VBA中调用函数BeforeClose事件不起作用

时间:2016-08-04 14:35:01

标签: excel vba excel-vba

我试图在工作簿关闭之前调用保护函数,但它不起作用。保护子工作正常,但在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

这是ThisWorkbook中的代码:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call protect
End Sub

2 个答案:

答案 0 :(得分:0)

我也遇到了保护子问题。原来dev1998是正确的,工作簿找不到子。尝试使用: “调用Module1.Protect”,或代替Module1,无论您的保护子属于哪个模块

答案 1 :(得分:0)

您无法在Workbook_BeforeClose模块中或从中更改工作表。我从没在任何地方阅读过它,但是看来一旦触发此事件,Excel就会查找工作表。

我有一张没有保护的床单。它从未受到保护。但是,当我尝试从Workbook_BeforeClose模块向其添加时间戳时,出现了“受保护的工作表”错误。

这也是一个隐藏的工作表,因此我尝试使其可见,以便可以确认它确实不受保护。我无法通过代码或通过属性框来做到这一点。

我最终要做的是将清理例程从Workbook_BeforeClose移到Workbook_Open,再也没有问题了。