Защита ячеек от изменения Excel

     Возможно кому-то это будет и не интересно, но наверное всё-таки найдутся и те, кому эта информация будет полезной.  Речь пойдёт о цикле статей по работе в Office Excel 2007 + офисный VBA (Visual Basic Application). Сразу отмечу, что Excel + VBA я стал изучать не так давно, и по мере работы у меня возникали различные вопросы и трудности. Сейчас эти “трудности” превратились лишь в весёлые воспоминания =) Я придерживаюсь принципа “Глупый человек учиться на своих ошибках, Умный – на чужих”  и поэтому я решил помочь Вам не допускать тех же ошибок, с которыми пришлось сталкиваться мне. Надеюсь предложенная информация пригодиться новичкам, а профи не будут меня сильно бить палками. Ну и на последок, мне не хотелось бы чтобы все эти статьи были в стили монолог – автора, поэтому буду рад пообщаться с вами в комментариях, вопросы приветствуются и поощряются(если у вас есть блог, то в посте-ответе будет стоять ссылка на ваш сайт). Ладно, хватит “лить воду”, пора приступить к первому совету, думаю вы уже из названия топика догадались, что речь пойдёт о Защите ячеек от изменений.

     В чём же может возникнуть трудность с защитой ячеек в Excel. Во-первых во вкладке “рецензирование” в меню “изменения” есть кнопка “защитить лист”. 

priventcell

     Отметим галочку на “защитить лист и содержимое защищаемых ячеек”, далее введём пароль, остальные checkbox’ы оставим без галочек, нажмём “OK”, потом подтвердим пароль и вот все ячейки листа стали заблокированными.  Отмечу, что по умолчанию в Excel  при создание нового листа, у всех ячеек  в свойствах “формат ячеек” – “защита” отмечено “защищаемая ячейка”. Так что если Вы захотите, чтобы какая-то ячейка была не защищенная, т.е. была доступна для изменений, то всего лишь уберите эту галочку. После этого и возникнут трудности, во всяком случае у меня возникли… 

     Итак, у меня была таблица, в которой находились ячейки доступные для изменений, а также ячейки в которых информация вычислялась автоматически (к примеры сумма чисел) – и они должны быть защищены от изменений. Впринципе в этом нет ничего трудного, с одних ячеек(доступных для ввода данных) убираем ”защищаемая ячейка”, на других(вычисления в которых происходят автоматически) оставляем. Жмём “защитить лист” и радуемся результату.

easyprivent

     Изменяя значения в ячейках E7, F7,G7 в ячейке M7(нельзя выделить) вычисляется их сумма. НО…не всё так просто. Если в защищенных ячейках значение вычисляется по стандартным формулам Excel из меню “формулы”, то проблем не будет, а вот если вы написали макрос на VBA для вычисления более сложных значений, то при запуске этого макроса у вас появится ошибка

error1004

      Что же делать в этом случае?  Первое что мне пришло в голову, сейчас многие из вас будут смеятся =) это оставить все ячейки незащищенными, а далее над ячейками значения в которых вычисляются автоматически разместить Вставка – Фигуры – Прямоуголньник..в свойствах которого установить Прозрачность 100%… Таким образом значения в ячейках будут видны, но наведя на них курсор мышки Вы не сможете их выделить и изменить… Минус такой “фишки” в том, что продвинутый пользователь “может догадаться” воспользоваться  клавишами “стрелки” на клавиатуре, и попав в ячейку, которую мы “прикрыли” прозрачным прямоугольником, именить в ней значения. Этого как раз нам свами больше всего и не хотелось…

     Выход из данной ситуации:

     Ячейки, информация в которых должна быть не доступна для изменений, мы  оставляем защищенными. Далее в макросе, который производит вычисление по хитрой формуле, прописываем Worksheets(”Имя листа”).Unprotect Password:=”пароль” …текст макроса… Worksheets(”Имя листа”).Protect Password:=”пароль”

Напоследок пример такого макроса:

        Private Sub CommandButton1_Click()
        Worksheets(”Gualanland”).Unprotect Password:=”gualan”
        Range(”A3″).Value = Range(”A1″).Value * Val(Range(”A2″).Value)

        Worksheets(”Gualanland”).Protect Password:=”gualan”
        End Sub

© Блог гордого владельца говносайтов – автор текста gualan.

Category: Excel
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>