Невозможно использовать встроенную защиту Excel. Вы можете иметь диапазон, который не защищен, если остальная часть рабочего листа защищена, но вы не можете различной степени защиты в разных диапазонах.
Вы можете сделать какую-то сложную работу в VBA, чтобы запускать различные параметры защиты рабочего стола, основанные на ячейке, которая нажата, используя событие worksheet_selectionchange()
. По существу, вы обнаружили, что нажал диапазон target
, снимите защиту с листа, а затем перепрограммируйте лист с любым набором параметров, которые вы хотите для выбранной конкретной ячейки/диапазона.
Что-то вроде:
Private Sub Worksheet_Change(ByVal Target As Range)
'Detect if cells A1:B10 was clicked, in this case I want them to be able to copy/paste, but not format or anything else
If Not (Intersect(Target, Me.Range("A1:B10")) Is Nothing) Then
Me.Unprotect
Me.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
'If it's C1:D10 then allow formatting, but nothing else
ElseIf Not (Intersect(Target, Me.Range("C1:D10")) Is Nothing) Then
Me.Unprotect
Me.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingCells:=True
End If
End Sub
Что бы в VBA в рабочем листе, а не индивидуальный модуля. Вы также можете указать пароли в методах Protect и Unprotect, если вы пройдете этот маршрут. Это не 100% отличный вариант, поскольку он полагается на VBA и постоянно защищает и снимает защиту с листа, когда пользователь нажимает, но если вам нужны разные ограничения для разных диапазонов на одном листе, то это, вероятно, лучший выбор.
Спасибо за ответ и код! –