Protect
и Unprotect
действуют на лист, а не на диапазон.Вам нужно разблокировать лист, но затем вам необходимо установить для свойства Range.Locked
значение true / false, прежде чем снова заблокировать его.Также для этого требуется цикл, вы не можете сразу воздействовать на весь диапазон для достижения этого результата.
Я бы порекомендовал поместить это в Workbook_Open
, поэтому он запускается только один раз, если вы не меняете даты;тогда это должно идти в Worksheet_Change
.
Private Sub Workbook_Open()
Dim col As Range
'Set the correct sheet name here:
With ThisWorkbook.Sheets("Sheet1")
.Unprotect "1234"
For Each col In .UsedRange.Columns
col.EntireColumn.Locked = col.Range("A1").Value < Date
Next col
.Protect "1234"
.EnableSelection = xlNoRestrictions
End With
End Sub