0

我正在生成一个每日计划表,我想在保存后在其中锁定一些评估单元。我在 excel 工作簿代码中编写了以下代码。宏要求在保存前输入密码。为什么要求输入密码?(我有 53 张每周计划的工作表。我这里只显示了 2 张)

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets("Sheet18").Unprotect Password:="****"
Sheets("Sheet19").Unprotect Password:="****"
ActiveSheet.Protect Contents:=False
For Each Cell In Range("H5:H24,J5:J24")
If Cell <> "" Then Cell.Locked = True
If Cell = "" Then Cell.Locked = False
Next
ActiveSheet.Protect Contents:=True
Sheets("Sheet18").Protect Password:="****"
Sheets("Sheet18").Protect UserInterfaceOnly:=True
Sheets("Sheet19").Protect Password:="****"
Sheets("Sheet19").Protect UserInterfaceOnly:=True
End Sub
4

1 回答 1

0

保存时,您的代码将根据活动工作表表现不同。

另外,我不建议使用本地循环变量重载保留名称“Cell”。这将导致意外行为。

您应该删除对 ActiveSheet 的引用。如果您希望保护整个工作簿,我建议对工作表进行迭代:

Sub ProtectAll()
    Dim wSheet As Worksheet
    Dim myCell As Range
    For Each wSheet In Worksheets
        wSheet.Unprotect Password:="****"
        For Each myCell In Range("H5:H24,J5:J24")
            myCell.Locked = (myCell <> "")
        Next myCell
        wSheet.Protect Contents:=True, Password:="****", UserInterfaceOnly:=True
    Next wSheet
End Sub

注意:您必须将代码放在代码模块中。

于 2013-07-09T11:36:13.163 回答