Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2009, 13:47   #1
Анна1703
 
Регистрация: 25.09.2009
Сообщений: 3
По умолчанию Защита ячеек

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

Пробовала щелкнув правой кнопкой на ярлычке листа, выбирать пункт Исходный текст, и в открывшийся редактор VBA вставлять следующий код:
Код:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count = 1 Then If Left(Target.Formula, 1) = "=" Then Target.Offset(1).Select
End Sub

Все вроде получилось но после закрытия документа и открытия его вновь эта процедура работать перестала.
С чем это может быть связано??
Анна1703 вне форума Ответить с цитированием
Старый 28.09.2009, 14:00   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

После добавления кода
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count = 1 Then If Target.HasFormula Then Target(1, 2).Select
End Sub
необходимо сохранить файл Excel.

Тогда код переживёт перезапуск файла...
EducatedFool вне форума Ответить с цитированием
Старый 28.09.2009, 14:13   #3
Анна1703
 
Регистрация: 25.09.2009
Сообщений: 3
По умолчанию

этот код необходимо написать после того который я писала ранее или вместо?
я попробовала но что-то опять не получается

(первый раз вставив код, который кстати вы написали http://programmersforum.ru/showthrea...EC%F3%EB%EE%E9 получилось следующее: ячейки в которых стоят формулы, недоступны стали для редактирования, пытаясь поставить на них курсор, он просто напросто соскакивал вниз, все считалось была возможность удалять ненужные строки и добавлять новые), но сейчас все это почему-то не работает
Анна1703 вне форума Ответить с цитированием
Старый 28.09.2009, 14:20   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Можно использовать любой из 2-х вариантов кода. Они идентичны по сути.

А лучше вообще обойтись без всяких макросов - для защиты ячеек с формулами никакие макросы не нужны.
Для этого есть пункт меню Сервис - Защита
EducatedFool вне форума Ответить с цитированием
Старый 28.09.2009, 15:22   #5
Анна1703
 
Регистрация: 25.09.2009
Сообщений: 3
По умолчанию

пункт меню Сервис - Защита конечно очень хорош, только он не дает удалить строки и столбцы, даже в том случае если стоит галочка
Анна1703 вне форума Ответить с цитированием
Старый 29.01.2010, 14:28   #6
dzv
Пользователь
 
Аватар для dzv
 
Регистрация: 15.01.2010
Сообщений: 55
Вопрос

Здравствуйте уважаемые участники "Клуба ПРОграммистов"!

EducatedFool, во 2-м посте уже ответил на вопрос, но я хотел спросить следующее.

Как запретить изменять содержимое ячейки на листе, в которой находится выпадающий список (через "Проверка"), но чтобы выбирать из списка было можно, с помощью макроса?!

Думаю в "... Target.HasFormula ..." нужно заменить на "... Target.[B]HasВыпадающий список ...", но как звучит команда в VBA не знаю, хотя пересмотрел много тем...

Заранее спасибо за помощь!
dzv вне форума Ответить с цитированием
Старый 29.01.2010, 15:29   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ' только для ячеек с выпадающим списком (Validation.Type=3)
    On Error Resume Next: x = Target.Validation.Type
    If Target.Cells.Count = 1 Then If x = 3 Then Target.Next.Select
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 29.01.2010, 16:20   #8
dzv
Пользователь
 
Аватар для dzv
 
Регистрация: 15.01.2010
Сообщений: 55
Вопрос

Уважаемый EducatedFool, спасибо Вам!

Но с таким прыжком, очень тяжело выбрать что-то из списка, только выделив данную ячейку и соседнюю, можно наконец-то выбрать значения.
А также при выделении этих двух ячеек, списка + рядом ячейку, можно скопировать в ячейку со списком, копируемое значение, а мне это копирование как раз не нужно.

Последний раз редактировалось dzv; 29.01.2010 в 16:24.
dzv вне форума Ответить с цитированием
Старый 29.01.2010, 16:59   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В этом случае Вам поможет только Сервис - Защита - Защитить лист.

В виде кода это будет выглядеть примерно так:
Код:
Sub test()
    Cells.Locked = False
    [ЯчейкиСВыпадающимсписком].Locked = True
    ActiveSheet.Protect
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 29.01.2010, 17:08   #10
dzv
Пользователь
 
Аватар для dzv
 
Регистрация: 15.01.2010
Сообщений: 55
Вопрос

Цитата:
В этом случае Вам поможет только Сервис - Защита - Защитить лист.
EducatedFool, дело в том, что у меня защищен лист, не защищена только строка для ввода данных, в которой необходимо защитить список.
В таком случае, возможно, каким-нибудь образом запретить вставлять через специальную вставку в столбец G:G значения?
dzv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему снимается защита с защищенных ячеек? Freerider1972 Microsoft Office Excel 6 05.02.2010 04:49
макрос - подсчитать для каждой строки кол-во ячеек с «+», кол-во ячеек с «-» Vadim_abs Microsoft Office Excel 36 14.07.2009 12:08
Защита ячеек Levchik Microsoft Office Excel 1 02.02.2009 08:15
Защита ячеек от вырезания и копирования Freerider1972 Microsoft Office Excel 1 23.12.2008 20:57