2015-03-03 4 views
0

Я стараюсь иметь на одной вкладке раздел, в котором пользователи не могут редактировать или изменять ячейки каким-либо образом (только точки и клики), а затем другой раздел, где они могут только вставлять/копировать/удалять записи с ячейками (но не изменять форматирование). Я не вижу, как назначать разные разрешения для разных диапазонов.Excel - с разными разрешениями для разных диапазонов на одной вкладке

Спасибо за помощь.

ответ

0

Невозможно использовать встроенную защиту 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 и постоянно защищает и снимает защиту с листа, когда пользователь нажимает, но если вам нужны разные ограничения для разных диапазонов на одном листе, то это, вероятно, лучший выбор.

+0

Спасибо за ответ и код! –