Я получил первую часть вашего вопроса. Вам необходимо указать аргумент пароля как часть метода Protect
рабочего листа:
Sub lockSheet()
With ActiveSheet
'Check sheet is not already protected
If Not .ProtectContents Then
'Clear any existing lock settings
.Cells.Locked = False
.Range("A1:D23").Locked = True
.Protect Contents:=True, Password:="pw"
End If
End With
End Sub
Обратите внимание, что нет необходимости выбирать диапазон перед его изменением, просто примените действие непосредственно к диапазону.
Пароль явно виден в виде открытого текста. Если вам нужна какая-либо степень защиты, вам также нужно применить пароль к проекту VBA .
Чтобы ответить на вторую часть вашего вопроса, с изменениями в вашем комментарии:
Private Sub Worksheet_SelectionChange(ByVal target As Range)
If target.Locked Then
With ActiveSheet
.Unprotect
If Not .ProtectContents Then
target.Locked = False
.Protect Contents:=True, Password:="pw"
End If
End With
End If
End Sub
Это необходимо добавить в модуль рабочего листа.