Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Блокировка ячейки, Нужен код на BVA 
:(
    Опции темы
bucdapuswert
Дата 15.5.2007, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 14.5.2007

Репутация: нет
Всего: нет



Помогите написать макрос в котором информацию в ячеку можно ввести только один раз и нельзя ее будет изменить! 
PM MAIL   Вверх
Twwi
Дата 16.5.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 8.11.2005
Где: Домодедово

Репутация: 1
Всего: 5



я бы сделала так:
Желательно, чтобы диапазон ячеек на которые должно распространяться такое правило был ограничен. Тогда содаем в одельно взятой ячейке формулу считающую количество заполненных ячеек спец.диапазона. Рядом с ней резервируем ячейку, куда макрос будет кидать предыдущее значение.

Далее в макросе на событие Worksheet_Change (кстати речь об Экселе?  smile ) сравниваем значение ячейки с текущим значением и предыдущим. 
Если они не равны, пишем код, в котором перво-наперво ячейке с пред.значением присваиваем текущее. Далее *забыла в начале обработки события перехватить адрес текущей ячейки, считаем что он у нас есть* текущей ячейке даю свойство Protection=loced, hiden , и защищаю лист. *соответственно перед всеми этими операциями лист анпротектим* 
я бы так...
PM MAIL ICQ   Вверх
Genyaa
Дата 16.5.2007, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Усердный
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 25.9.2006
Где: Москва

Репутация: 2
Всего: 11



Можно сделать следующее:

1. В листе, где эта штука должна работать выделить все ячейки, далее Меню-Формат-Ячейки-Защита-Защищаемая ячейка - отключить.
2. Вставить в модуль листа следующий код
Код

Private Sub Worksheet_Change(ByVal Target As Range)
    ActiveSheet.Unprotect "aaa"
    Target.Locked = True
    Target.FormulaHidden = True
    ActiveSheet.Protect Password:="aaa", DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

3. Меню-Сервис-Защита-Защитить лист - можно разрешить выделение заблокированных и незаблокированных ячеек - установить пароль (в примере кода приведенного выше используется - aaa (латинские)).

После этого, всякая введенная вновь информация на листе будет защищена от изменений. 

Макрос в момент всякого события изменения данных на листе будет делать следующее:
- снимет временно защиту листа
- включит блокировку изменненных ячеек
- вернет защиту листа обратно

Пробуйте.
--------------------
Всякое решение плодит новые проблемы.
PM WWW   Вверх
Akina
Дата 16.5.2007, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Тут вот какая ерунда - изменение может вноситься путем Paste диапазона, который наложится как на защищенные, так и на еще пустые ячейки...

Единственный способ, который у меня когда-то давно получился (восстанавливать текст лениво), был таким...

Обрабатываем Worksheet_Change. Смотрим Range, заводим под него двумерный массив (столько элементов, сколько в нем ячеек), сохраняем в массив текущее значение. Затем делаем Application.Undo. Снова проходим по каждой ячейке из Target (там предыдущие значения), и те, которые можно изменять, заменяем на сохраненное в массиве.

Единственная тонкость - как Undo, так и последующие изменения в свою очередь генерят Worksheet_Change - потому надо завести static-переменную ака флаг обработки, дабы отсеивать эти вторичные изменения и не обрабатывать их. Также на время работы макроса надо избежать повторного внешнего change...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0434 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.