Защита ячеек от изменения 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.

Категория: Excel
Вы можете следить за изменениями этой записи через RSS 2.0 фид. Вы можете оставить комментарий, или трэкбек с вашего сайта.
12 Ответов
  1. Myledi says:

    Gualan!!!
    Полный респект и уважуха.Вы-прелесть.Измучилась вся – искала решение проблемы с защитой листа “от дурака”.Вы спасли мои формулы от ежедневного”убийства”.Огромное СПАСИБО.Теперь у меня работают макросы и ячейки защищены.Просто СУПЕР!Еще раз спасибо!

  2. gualan says:

    Большое пожалуйста.. рад что помогло!

  3. Макс says:

    Thanks////////////////// Это ооооооооооооооочень нужная инфа. Ещё раз спасибо

  4. Зовите меня Вася says:

    помогло, легко и просто
    спасибо, потом посмотрю как это работает в ВБА

  5. Oleg says:

    Поставил но после применения макроса ячейки становятся незащищенными ПРОБЛЕМА !!!

  6. gualan says:

    Oleg, а вы точно в последней строчке макроса не забыли Worksheets(”имя вашего листа”).Protect Password:=”ваш пароль”??

  7. Serega says:

    Спасибо за статью выручил!

  8. Andy Harder says:

    Спасибо за совет!

  9. Елена says:

    Восхищаюсь Вами, какая Вы умница!!! Наконец я защитила свои формулы. Дай Вам Бог здоровья!

  10. Kafer says:

    Штука прикольная (и автору спасибо, вопрос часто есть актуальный), но есть одно но: при долгом выполнении макроса комбинацией ctrl+break можно его прервать и таким образом оставить лист незащищенным. Лучше распароливать и защищать лист на небольших участках кода. ИМХО :)

  11. gualan says:

    Kafer, спасибо за замечание, как-то я об этом и не подумал :)

  12. Игорь says:

    Большое спасибо, очень помогло.

Оставить комментарий

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>