Страница: 1 |
Страница: 1 |
Вопрос: Защита ячеек. Как усовершенствовать?
Добавлено: 25.03.07 13:19
Автор вопроса: DrugON | ICQ: nospam
Прошу прощения за создание новой темы. Подобные уже были. Просто мне непонятен принцип работы форума, я написал там свой ответ - тема как была на "кавырнадцатой" странице - так и осталась, не поднялась наверх. Может плохо разобрался? Возможно...
Вот ссылка на эту тему:
[URL]http://vbnet.ru/forum/show.aspx?id=116565[/URL]
Ну и обозначу все же здесь вопрос:
В общем трабл вот в чем. На листе Excel есть ячейки для ввода данных и расчетные, т.е. с формулами. Нужно защитить от изменения ячейки с формулами. Но не весь лист. В общем, сделал сначала так. В книге:
В книге:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Locked = True Then
Me.Protect password:="3037"
Else
Me.Unprotect password:="3037"
End If
End Sub
И нужные ячейки зделал защищенными. При выделении защищенной ячейки лист блокируется, с остальными можно делать все, что угодно. Те, против которых это делалось :) догадались обходить эту защиту тупым выделением всех ячеек (CTRL+A) и снятием защиты с них.
Какой бы способ внедрить поизощреннее? Помогите, плиз.
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #1
Добавлено: 25.03.07 13:40
____ Я не понимаю проблему.
____ Защищаю весь лист, но в ячейках с вводом данных снимаю флажок защиты.
____ Я ответил?
Номер ответа: 2
Автор ответа:
DrugON
ICQ: nospam
Вопросов: 10
Ответов: 53
Профиль | | #2
Добавлено: 25.03.07 14:08
Нет. Пусть творят что хотят на листе, но защищенные ячейки чтобы не могли трогать и даже видеть формулы в них. Чтобы структура листа (заливка, вставка/удаление столбцов/строк и прочее было доступно. Закрыты только ячейки с формулами. По описанному выше способу работало недолго. Так как кому-то ну очень хотелось поковыряться и показать свою значимость. Тут понятное дело, что дело в человеке. То есть защита изначально ставилась от случайных изменений, а тут специально лезут. И частенько вместо формулы вбивают тупо число. CTRL+A, "Разблокировать" - и всё - твори с листом все что угодно.
Может как-то программно запретить разблокирование, вообще кнопку на панели сделать неактивной? Можно ли так сделать? Я не силен в ВБА, так, "для себя" изучаю потихоньку...
Номер ответа: 3
Автор ответа:
night-roll
Вопросов: 36
Ответов: 326
Профиль | | #3
Добавлено: 25.03.07 16:42
дело в том, что ошибочно реализован код в процедуре Worksheet_SelectionChange.
в этом случае, при выделении всех ячеек(Ctrl+A) вышеупомянутая процедура не будет вызываться - необходимо блокировать ячейки либо вручную изначально, либо по ходу выполнения действий, обращаясь к ячейке (диапазону ячеек) непосредственно по адресу.
думаю, понятно? если нет, поясню...
Номер ответа: 4
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #4
Добавлено: 25.03.07 17:43
____ Ну, хорошо. Тогда в защите листа выставить все флажки. Сервис — Защита — Защитить лист — и в списке разрешений выставить все флажки.
____ В защищённых ячейках формулы остануться защищённые и скрытые, а форматирование будет разрешено.
____ Я ответил?
Номер ответа: 5
Автор ответа:
DrugON
ICQ: nospam
Вопросов: 10
Ответов: 53
Профиль | | #5
Добавлено: 26.03.07 09:24
Я не пойму - Вы меня отговариваете решить эту задачу с помощью ВБА? Повторяю - лист должен быть незащищенным. причем здесь флажки? При защите листа всего 3 флажка - сценарии, объекты и, по-моему, содержимое (у меня лиц. офис, англ.версия). При снятии всех флажков кнопка защиты становится неактивной, оно и логично - смысл защищать, если сняты все флажки. Если же их все поставить - форматирование будет запрещено.
____Ответить-то ответил. Но не помог.
Номер ответа: 6
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #6
Добавлено: 26.03.07 11:48
____ У меня пятнадцать флажков разрешений при защищённом листе. Работает всё "со свистом" — делать можно всё, окромя изменений в ячейках с формулами. Сами формулы не видны. Excel 2002.
____ Если у Вас не так, то, видимо, надо через VBA. Однако проблема в том, что нет события "Перед изменением ячейки" или "Листа". Попадая в событие "SheetChange" у Вас уже нет предыдущего состояния ячейки — там уже введённое пользователем. Поэтому "отбить" событие достаточно проблематично, если только не держать копию листа в скрытой форме. Это тоже решение — подходит ли оно Вам?
____ Можно не дать выделить. Но тут другой эффект. — следует не дать выделить и диапазон с ячейками формул. Это сделать можно, но тогда этот метод не даст изменять групповое форматирование и, тем более, конкретно ячеек с формулами. Пример такого решения прилагаю.
 im i As Long
 im j As Long
For i = 1 To Target.Rows.Count: For j = 1 To Target.Columns.Count
If Target.Cells(i, j).HasFormula Then
Cells(1, 1).Select
Exit Sub
End If
Next: Next
End Sub
____ Я бы сделал upgrade Excel у всех "нехороших" пользователей до 2002-го.
Номер ответа: 7
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #7
Добавлено: 26.03.07 12:05
____ И ещё. Я думаю, что Ваш код "не защищал" не только по Ctrl+A, но и по выделению диапазона с содержанием формул не в первой его ячейке. Событие отрабатывает, но проверка должна быть по всем ячейкам выделенного диапазона (как в моём коде). Но тогда будет та же проблема — невозможность группового форматирования, потому что Ваш Protect, думаю, защищает лист, а не конкретную ячейку.