Возможно кому-то это будет и не интересно, но наверное всё-таки найдутся и те, кому эта информация будет полезной. Речь пойдёт о цикле статей по работе в Office Excel 2007 + офисный VBA (Visual Basic Application). Сразу отмечу, что Excel + VBA я стал изучать не так давно, и по мере работы у меня возникали различные вопросы и трудности. Сейчас эти “трудности” превратились лишь в весёлые воспоминания =) Я придерживаюсь принципа “Глупый человек учиться на своих ошибках, Умный – на чужих” и поэтому я решил помочь Вам не допускать тех же ошибок, с которыми пришлось сталкиваться мне. Надеюсь предложенная информация пригодиться новичкам, а профи не будут меня сильно бить палками. Ну и на последок, мне не хотелось бы чтобы все эти статьи были в стили монолог – автора, поэтому буду рад пообщаться с вами в комментариях, вопросы приветствуются и поощряются(если у вас есть блог, то в посте-ответе будет стоять ссылка на ваш сайт). Ладно, хватит “лить воду”, пора приступить к первому совету, думаю вы уже из названия топика догадались, что речь пойдёт о Защите ячеек от изменений.
В чём же может возникнуть трудность с защитой ячеек в Excel. Во-первых во вкладке “рецензирование” в меню “изменения” есть кнопка “защитить лист”.
Отметим галочку на “защитить лист и содержимое защищаемых ячеек”, далее введём пароль, остальные checkbox’ы оставим без галочек, нажмём “OK”, потом подтвердим пароль и вот все ячейки листа стали заблокированными. Отмечу, что по умолчанию в Excel при создание нового листа, у всех ячеек в свойствах “формат ячеек” – “защита” отмечено “защищаемая ячейка”. Так что если Вы захотите, чтобы какая-то ячейка была не защищенная, т.е. была доступна для изменений, то всего лишь уберите эту галочку. После этого и возникнут трудности, во всяком случае у меня возникли…
Итак, у меня была таблица, в которой находились ячейки доступные для изменений, а также ячейки в которых информация вычислялась автоматически (к примеры сумма чисел) – и они должны быть защищены от изменений. Впринципе в этом нет ничего трудного, с одних ячеек(доступных для ввода данных) убираем ”защищаемая ячейка”, на других(вычисления в которых происходят автоматически) оставляем. Жмём “защитить лист” и радуемся результату.
Изменяя значения в ячейках E7, F7,G7 в ячейке M7(нельзя выделить) вычисляется их сумма. НО…не всё так просто. Если в защищенных ячейках значение вычисляется по стандартным формулам Excel из меню “формулы”, то проблем не будет, а вот если вы написали макрос на VBA для вычисления более сложных значений, то при запуске этого макроса у вас появится ошибка
Что же делать в этом случае? Первое что мне пришло в голову, сейчас многие из вас будут смеятся =) это оставить все ячейки незащищенными, а далее над ячейками значения в которых вычисляются автоматически разместить Вставка – Фигуры – Прямоуголньник..в свойствах которого установить Прозрачность 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.




