Книга находится в общем доступе. Пять листов (то же самое, что в пустой книге добавить кликом пару штук к имеющимся трем).
Имена листов (обращение к листам по именам): 1. "Лист1" нужно запретить редактировать пользователю строки 1:9, но оставить возможность макросу внести изменение в ячейку. 2. "Лист2" и "Лист4" тоже самое. 3. На листе "Лист3" нужно запретить диапазон "A2:G5", но так же оставить возможность макросу что-то вносить в ячейки. 4. Оставить без защиты "Лист5".
Для обычной книги проще, а для книги, которой нужен режим общего доступа - не выходит сделать. Нужна парольная защита.
Видел пару макросов, удобны, но ненадежны до тех пор, пока макросы еще не разрешены к выполнению.
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(Target, Range("D9,1:3,N:P,C4:C9,F4:F9,K4:K9")) Is Nothing Then Exit Sub If [A4] = "$$$" Then Exit Sub Range("A5").Select End Sub
[/vba]
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [C21:H21]) Is Nothing Then _ With Application: .EnableEvents = 0: .Undo: .EnableEvents = -1: End With End Sub
[/vba]
Книга находится в общем доступе. Пять листов (то же самое, что в пустой книге добавить кликом пару штук к имеющимся трем).
Имена листов (обращение к листам по именам): 1. "Лист1" нужно запретить редактировать пользователю строки 1:9, но оставить возможность макросу внести изменение в ячейку. 2. "Лист2" и "Лист4" тоже самое. 3. На листе "Лист3" нужно запретить диапазон "A2:G5", но так же оставить возможность макросу что-то вносить в ячейки. 4. Оставить без защиты "Лист5".
Для обычной книги проще, а для книги, которой нужен режим общего доступа - не выходит сделать. Нужна парольная защита.
Видел пару макросов, удобны, но ненадежны до тех пор, пока макросы еще не разрешены к выполнению.
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(Target, Range("D9,1:3,N:P,C4:C9,F4:F9,K4:K9")) Is Nothing Then Exit Sub If [A4] = "$$$" Then Exit Sub Range("A5").Select End Sub
[/vba]
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [C21:H21]) Is Nothing Then _ With Application: .EnableEvents = 0: .Undo: .EnableEvents = -1: End With End Sub
[/vba] в режиме общего доступа. А такой менюшки в экселе нет, не видел чтобы задавалась эта опция кроме, как в коде.
То есть вообще не выходит сделать так, чтобы в режиме общего доступа ставить или снимать защиту на разные диапазоны разных листов. Возможно есть какие-то иные варианты, которые бы действительно бы обеспечивали безопасность данных. Два варианта выглядят ненадежно (нужно разрешить предварительно выполнение макросов).
PS: даже вот это не выходит [vba]
Код
UserInterfaceOnly:=True
[/vba] в режиме общего доступа. А такой менюшки в экселе нет, не видел чтобы задавалась эта опция кроме, как в коде.
То есть вообще не выходит сделать так, чтобы в режиме общего доступа ставить или снимать защиту на разные диапазоны разных листов. Возможно есть какие-то иные варианты, которые бы действительно бы обеспечивали безопасность данных. Два варианта выглядят ненадежно (нужно разрешить предварительно выполнение макросов).w00t
Сообщение отредактировал w00t - Среда, 06.07.2016, 15:13
защитить лист вручную паролем ХХХ, определив защищаемые ячейки. при активации листа будет разрешено редактирование макросом и устанавливаться защита вновь если была снята защита вручную. соответственно сам макрос надо тоже запаролить.
защитить лист вручную паролем ХХХ, определив защищаемые ячейки. при активации листа будет разрешено редактирование макросом и устанавливаться защита вновь если была снята защита вручную. соответственно сам макрос надо тоже запаролить.Sancho
Сообщение отредактировал Sancho - Среда, 06.07.2016, 16:06
Выделяю все, ф формате ячеек снимаю галочку "зазищаемая ячейка"? Выделяю нужный диапазон, через формат ставлю галочку - защищаемая ячейка? затем защитить лист и ввожу пароль?
И после этот код
[vba]
Код
Const PWD = "test" Private Sub Worksheet_Activate() 'Range("1:9").Locked = True Me.Protect Password:=PWD, UserInterfaceOnly:=1, DrawingObjects:=1, Contents:=1, Scenarios:=1, _ AllowFormattingCells:=1, AllowInsertingRows:=0, AllowDeletingRows:=0, AllowFiltering:=1, AllowFormattingRows:=0 End Sub
[/vba]
Нужно на листе строки с первой по девятую, но я все сделал. Перевел книгу в режим общего доступа, ошибки (не работает по-прежнему): 1. Run-time error 1004. Application defined or object-defined error 2. method project of object worksheet failed
Выделяю все, ф формате ячеек снимаю галочку "зазищаемая ячейка"? Выделяю нужный диапазон, через формат ставлю галочку - защищаемая ячейка? затем защитить лист и ввожу пароль?
И после этот код
[vba]
Код
Const PWD = "test" Private Sub Worksheet_Activate() 'Range("1:9").Locked = True Me.Protect Password:=PWD, UserInterfaceOnly:=1, DrawingObjects:=1, Contents:=1, Scenarios:=1, _ AllowFormattingCells:=1, AllowInsertingRows:=0, AllowDeletingRows:=0, AllowFiltering:=1, AllowFormattingRows:=0 End Sub
[/vba]
Нужно на листе строки с первой по девятую, но я все сделал. Перевел книгу в режим общего доступа, ошибки (не работает по-прежнему): 1. Run-time error 1004. Application defined or object-defined error 2. method project of object worksheet failed