Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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-сайт: www.adsemenov.ru
 Профиль | | #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-сайт: www.adsemenov.ru
 Профиль | | #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-сайт: www.adsemenov.ru
 Профиль | | #6
Добавлено: 26.03.07 11:48
____ У меня пятнадцать флажков разрешений при защищённом листе. Работает всё "со свистом" — делать можно всё, окромя изменений в ячейках с формулами. Сами формулы не видны. Excel 2002.
____ Если у Вас не так, то, видимо, надо через VBA. Однако проблема в том, что нет события "Перед изменением ячейки" или "Листа". Попадая в событие "SheetChange" у Вас уже нет предыдущего состояния ячейки — там уже введённое пользователем. Поэтому "отбить" событие достаточно проблематично, если только не держать копию листа в скрытой форме. Это тоже решение — подходит ли оно Вам?

____ Можно не дать выделить. Но тут другой эффект. — следует не дать выделить и диапазон с ячейками формул. Это сделать можно, но тогда этот метод не даст изменять групповое форматирование и, тем более, конкретно ячеек с формулами. Пример такого решения прилагаю.
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  ;Dim i As Long
  ;Dim 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-сайт: www.adsemenov.ru
 Профиль | | #7
Добавлено: 26.03.07 12:05
____ И ещё. Я думаю, что Ваш код "не защищал" не только по Ctrl+A, но и по выделению диапазона с содержанием формул не в первой его ячейке. Событие отрабатывает, но проверка должна быть по всем ячейкам выделенного диапазона (как в моём коде). Но тогда будет та же проблема — невозможность группового форматирования, потому что Ваш Protect, думаю, защищает лист, а не конкретную ячейку.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам