В кодовом модуле листа, который вы хотите защитить sh, введите следующее ...
Private Sub Worksheet_Activate()
Shield
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Shield
If Len(Me.[u5]) Then Me.Unprotect '<-- change 'u5' to the cell in column U that unlocks
End Sub
Sub Shield()
With Me
.Unprotect
.Cells.Locked = False
.[L3:n40].Locked = True
.Protect , 0, 1, 1, 1, 1, 1, 1, 1, 1, 1
End With
End Sub
Обновление
Приведенный выше код работает, ввод отключить только одну ячейку U5
, чтобы контролировать, заблокирован ли весь диапазон L3:N40
.
Теперь я понимаю, что вы хотите, чтобы каждая строка L3:N40
была независимо заблокирована / разблокирована в зависимости от того, строка диапазона U3:U40
имеет значение.
Следующий код работает для этого нового сценария ...
Private Sub Worksheet_Activate()
Shield
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Shield
End Sub
Sub Shield()
Dim c
With Me
.Unprotect
.Cells.Locked = False
For Each c In .[u3:u40]
If Len(c) = 0 Then c.Offset(, -9).Resize(, 3).Locked = True
Next
.Protect , 0, 1, 1, 1, 1, 1, 1, 1, 1, 1
End With
End Sub