我想根据另一个单元格的值来锁定/解锁单元格。我将把我想锁定的单元格称为“Data_Cell”,把其值决定是否应该锁定的单元格称为“Permission_Cell”。我正尝试通过Worksheet_Change来完成此操作:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
With ThisWorkbook.Worksheets("Sheet1")
Application.EnableEvents = False
.Unprotect Password:=""
If Not Intersect(Target, .Range("Permission_Cell")) Is Nothing Then
If .Range("Permission_Cell").Value = "No" Then
.Range("Data_Cell").Formula = "=Some_Other_Named_Range"
.Range("Data_Cell").Locked = True
Else
.Range("Data_Cell").Locked = False
End If
End If
Application.EnableEvents = True
.Protect Password:="", AllowFiltering:=True, AllowSorting:=True, UserInterFaceOnly:=True, AllowFormattingCells:=True, DrawingObjects:=True
End With
End Sub
请注意,Permission_Cell处于未锁定状态,并且可以在“是”/“否”之间进行更改。当Permission_Cell为“否”时,Data_Cell应具有公式“=Some_Other_Named_Range”,并且应处于锁定状态。否则,Data_Cell应处于未锁定状态,并且可以进行编辑。
当我执行此操作并在Permission_Cell中输入“否”时,Excel指示工作表受保护且Data_Cell已锁定(注意挂锁图标已突出显示)。但是,我仍然可以在Data_Cell中输入不同的值。如果我单击“取消工作表保护”,然后单击“保护工作表”,则Data_Cell已正确锁定。为什么通过VBA进行的锁定不起作用?
1条答案
按热度按时间dvtswwa31#
如果您的代码存在于工作表的模块中,则将第二行更改为:与我同行
在我的办公室里工作得很好