Supondo que queremos bloquear um determinado range integrado numa dada linha (ex. A8:P8) e com base no conteúdo de uma célula dessa linha, sendo que o range poderá ser dinâmico, impedindo, assim, que seja alterado o conteúdo desse mesmo range, poderemos inserir o seguinte código na folha (planilha):
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
ActiveSheet.Unprotect Password:="XPto"
If UCase(Cells(Target.Row, 16)) = "x" Then
Cells(Target.Row, 1).Resize(, 16).Locked = True ‘bloqueia colunas de A-P, baseado na linha em causa e de acordo com o conteúdo de determinada célula da linha (coluna 16 – P).
Else
Cells(Target.Row, 1).Resize(, 16).Locked = False
End If
ActiveSheet.Protect Password:="XPto", DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub