![]() |
|
Модераторы: mihanik |
![]()
|
|
| bucdapuswert |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 14.5.2007 Репутация: нет Всего: нет |
Помогите написать макрос в котором информацию в ячеку можно ввести только один раз и нельзя ее будет изменить!
|
|||
|
||||
| Twwi |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 8.11.2005 Где: Домодедово Репутация: 1 Всего: 5 |
я бы сделала так:
Желательно, чтобы диапазон ячеек на которые должно распространяться такое правило был ограничен. Тогда содаем в одельно взятой ячейке формулу считающую количество заполненных ячеек спец.диапазона. Рядом с ней резервируем ячейку, куда макрос будет кидать предыдущее значение. Далее в макросе на событие Worksheet_Change (кстати речь об Экселе? Если они не равны, пишем код, в котором перво-наперво ячейке с пред.значением присваиваем текущее. Далее *забыла в начале обработки события перехватить адрес текущей ячейки, считаем что он у нас есть* текущей ячейке даю свойство Protection=loced, hiden , и защищаю лист. *соответственно перед всеми этими операциями лист анпротектим* я бы так... |
|||
|
||||
| Genyaa |
|
|||
|
Усердный ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 25.9.2006 Где: Москва Репутация: 2 Всего: 11 |
Можно сделать следующее:
1. В листе, где эта штука должна работать выделить все ячейки, далее Меню-Формат-Ячейки-Защита-Защищаемая ячейка - отключить. 2. Вставить в модуль листа следующий код
3. Меню-Сервис-Защита-Защитить лист - можно разрешить выделение заблокированных и незаблокированных ячеек - установить пароль (в примере кода приведенного выше используется - aaa (латинские)). После этого, всякая введенная вновь информация на листе будет защищена от изменений. Макрос в момент всякого события изменения данных на листе будет делать следующее: - снимет временно защиту листа - включит блокировку изменненных ячеек - вернет защиту листа обратно Пробуйте. --------------------
Всякое решение плодит новые проблемы. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 26 Всего: 454 |
Тут вот какая ерунда - изменение может вноситься путем Paste диапазона, который наложится как на защищенные, так и на еще пустые ячейки...
Единственный способ, который у меня когда-то давно получился (восстанавливать текст лениво), был таким... Обрабатываем Worksheet_Change. Смотрим Range, заводим под него двумерный массив (столько элементов, сколько в нем ячеек), сохраняем в массив текущее значение. Затем делаем Application.Undo. Снова проходим по каждой ячейке из Target (там предыдущие значения), и те, которые можно изменять, заменяем на сохраненное в массиве. Единственная тонкость - как Undo, так и последующие изменения в свою очередь генерят Worksheet_Change - потому надо завести static-переменную ака флаг обработки, дабы отсеивать эти вторичные изменения и не обрабатывать их. Также на время работы макроса надо избежать повторного внешнего change... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| Правила форума "Программирование, связанное с MS Office" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще!
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование, связанное с MS Office | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |