Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Защита диапазонов от редактирования - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Защита диапазонов от редактирования (Макросы/Sub)
Защита диапазонов от редактирования
w00t Дата: Среда, 06.07.2016, 13:46 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 3 ±
Замечаний: 0% ±

Книга находится в общем доступе. Пять листов (то же самое, что в пустой книге добавить кликом пару штук к имеющимся трем).

Имена листов (обращение к листам по именам):
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]

Автор - w00t
Дата добавления - 06.07.2016 в 13:46
w00t Дата: Среда, 06.07.2016, 15:10 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 3 ±
Замечаний: 0% ±

PS: даже вот это не выходит [vba]
Код
UserInterfaceOnly:=True
[/vba]
в режиме общего доступа. А такой менюшки в экселе нет, не видел чтобы задавалась эта опция кроме, как в коде.

То есть вообще не выходит сделать так, чтобы в режиме общего доступа ставить или снимать защиту на разные диапазоны разных листов. Возможно есть какие-то иные варианты, которые бы действительно бы обеспечивали безопасность данных. Два варианта выглядят ненадежно (нужно разрешить предварительно выполнение макросов).


Сообщение отредактировал w00t - Среда, 06.07.2016, 15:13
 
Ответить
СообщениеPS: даже вот это не выходит [vba]
Код
UserInterfaceOnly:=True
[/vba]
в режиме общего доступа. А такой менюшки в экселе нет, не видел чтобы задавалась эта опция кроме, как в коде.

То есть вообще не выходит сделать так, чтобы в режиме общего доступа ставить или снимать защиту на разные диапазоны разных листов. Возможно есть какие-то иные варианты, которые бы действительно бы обеспечивали безопасность данных. Два варианта выглядят ненадежно (нужно разрешить предварительно выполнение макросов).

Автор - w00t
Дата добавления - 06.07.2016 в 15:10
Sancho Дата: Среда, 06.07.2016, 16:05 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 279
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
В модуль листа
[vba]
Код
Const PWD = "XXX"

Sub Worksheet_activate()
  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]

защитить лист вручную паролем ХХХ, определив защищаемые ячейки. при активации листа будет разрешено редактирование макросом и устанавливаться защита вновь если была снята защита вручную. соответственно сам макрос надо тоже запаролить.


Сообщение отредактировал Sancho - Среда, 06.07.2016, 16:06
 
Ответить
СообщениеВ модуль листа
[vba]
Код
Const PWD = "XXX"

Sub Worksheet_activate()
  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]

защитить лист вручную паролем ХХХ, определив защищаемые ячейки. при активации листа будет разрешено редактирование макросом и устанавливаться защита вновь если была снята защита вручную. соответственно сам макрос надо тоже запаролить.

Автор - Sancho
Дата добавления - 06.07.2016 в 16:05
w00t Дата: Среда, 06.07.2016, 16:20 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 3 ±
Замечаний: 0% ±

В модуль листа

Выделяю все, ф формате ячеек снимаю галочку "зазищаемая ячейка"?
Выделяю нужный диапазон, через формат ставлю галочку - защищаемая ячейка? затем защитить лист и ввожу пароль?

И после этот код

[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

Или что-то не так делаю?

Автор - w00t
Дата добавления - 06.07.2016 в 16:20
RAN Дата: Среда, 06.07.2016, 17:01 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Не внимательно читаете ограничения книги в общем доступе. Её функционал существенно меньше.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНе внимательно читаете ограничения книги в общем доступе. Её функционал существенно меньше.

Автор - RAN
Дата добавления - 06.07.2016 в 17:01
w00t Дата: Среда, 06.07.2016, 17:38 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 3 ±
Замечаний: 0% ±

Не внимательно читаете ограничения книги в общем доступе. Её функционал существенно меньше.

Видел, но подумал, что вдруг кто пытался выкрутиться и у него получилось)
Ok, попробую тогда другие варианты, наподобие двух выше.
 
Ответить
Сообщение
Не внимательно читаете ограничения книги в общем доступе. Её функционал существенно меньше.

Видел, но подумал, что вдруг кто пытался выкрутиться и у него получилось)
Ok, попробую тогда другие варианты, наподобие двух выше.

Автор - w00t
Дата добавления - 06.07.2016 в 17:38
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Защита диапазонов от редактирования (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!