我正在生成每日计划表,我想在保存后锁定一些评估单元格。我在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
答案 0 :(得分: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
注意:您必须将代码放在代码模块中。