Хитрости »
Основные понятия (21)Здесь собраны статьи, в которых разъясняются базовые понятия работы в Excel и VBA, а так же проблемы, с которыми сталкивается большинство начинающих
Сводные таблицы и анализ данных (4) Раздел поможет изучить сводные таблицы и научиться их использовать "на полную"
Графики и диаграммы (4) Раздел поможет научиться создавать диаграммы и графики в Excel, в том числе нестандартные
Работа с VB проектом (10) С помощью статей раздела вы научитесь создавать процедуры программно и выполнять различные операции с объектами самого VBA
Условное форматирование (5) Этот раздел поможет поближе познакомиться с Условным форматированием на примерах различных ситуаций
Списки и диапазоны (5) Статьи, посвященные работе не только с выпадающими списками, но и с диапазонами и хитростями их применения в рабочих файлах
Макросы(VBA процедуры) (56) Статьи раздела направлены на изучение VBA с детальным разбором кодов. Множество статей с примерами кодов под всевозможные ситуации с комментариями и пояснениями
Разное (34) Собраны статьи, которые не подходят ни под одну из представленных выше категорий или входят сразу в несколько. Но эти статье не менее полезные!

Как защитить лист от пользователя, но не от макроса?

Иногда бывает полезно защитить данные на листе от изменений другими пользователями, но при этом так же надо будет работать с данными на листе из VBA(т.е. вносить изменения с помощью кода). Обычная защита листа, конечно, подходит, хоть и есть небольшой недостаток: надо перед каждым обращением к листу снимать с него защиту, выполнять необходимые действия и защищать заново:

Но есть метод проще.
Если выполнить ниже приведенную строчку кода, то пользователю невозможно будет изменить данные на листе(кроме тех, которые Вы сами разрешите), однако код VBA(макрос) сможет преспокойно вносить любые изменения, не снимая защиту.

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

Конечно, приведенный код можно модернизировать и разрешить пользователю хоть какие-то действия. Например использование автофильтра:

Можно разрешить и другие действия(выделение незащищенных ячеек, выделение защищенных ячеек, форматирвоание ячеек, вставку строк, вставку столбцов и т.д.). Все их можно посмотреть, записав макрорекордером команду защиты листа с нужными параметрами.

Примечание: данный макрос лучше всего прописывать на событие открытия книги(модуль ЭтаКнига(ThisWorkbook)), т.к. сразу после закрытия и открытия книги данная защита снимается.

Можно ставить защиту сразу на все листы книги при открытии таким кодом:

Данный код вставляется в модуль ЭтаКнига. Плюс необходимо перед установкой защиты снять установленную(если она была):

Ну и если Вам только на один лист надо установить, то убираем цикл и вызываем процедуру только для нужного листа:

Примечание: Метод защиты через UsefInterface всем хорош, но есть одно ограничение: метод невозможно использовать в книге с общим доступом(Рецензирование -Доступ к книге), т.к. при общем доступе существуют ограничения, среди которых и такое, которое запрещает изменять параметры защиты для книги в общем доступе.

Также см.:
Как разрешить изменять только выбранные ячейки?
Защита листов/снятие защиты
Как оставить возможность работать со структурой на защищенном листе?


Статья помогла? Сделай твит, поделись ссылкой с друзьями!

Поиск по меткам

Access Multex Outlook VBA работа в редакторе VBA управление кодами Бесплатные надстройки Дата и время Диаграммы и графики Записки Защита данных Интернет Картинки и объекты Листы и книги Макросы и VBA Настройка Поиск данных Почта Программы Работа с приложениями Работа с файлами Разработка приложений Сводные таблицы Списки Тренинги и вебинары Финансовые Форматирование Формулы и функции Функции Excel Функции VBA Ячейки и диапазоны вебинар ссылки статьи тренинг
Обсуждение: оставлено 48 коммент.
  1. Всем Добрый день, очень странный момент. Excel 2003. Если устанавливаю значение EnableSelection через код:
    ActiveSheet.EnableSelection = xlUnlockedCells
    То при сохранении файла и повторном открытии значение данного параметра скидывается. Все ячейки доступны для выбора.

    Если же это делаю через интерфейс excel(сервис ->установить защиту) то все нормально. После закрытия/открытия всё сохраняется.

    Пробовал записать макроркордером установку защиты, ну в общем то он тоже самое и записывает:

    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveSheet.EnableSelection = xlUnlockedCells

    Так же пробую именно этим кодом установить недоступность для выделения, свойство устанавливается, но после сохранение/закрытия/повторного открытия так же сбрасывается на ноль (все ячейки доступны для выделения).

    В excel 2007 таких проблем нет. Всё корректно сохраняется.
    Может быть у кого то есть мысли по данной ситуации? Благодарю за помощь.

  2. Нашел ответ, может кому пригодиться. Данный баг возникает в локализованной версии excel 2003 без сервис пака. Установка SP3 решила проблему. Нашел пользователей с подобной проблемой на другом ресурсе.

Поделитесь своим мнением

Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме - добро пожаловать на Форум


Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Тренинги

Необходимо автоматизировать процессы в MS Office?
Доверьте это профессионалам и работа всегда будет сделана качественно и в срок!Заказать

Логин
Счетчики
Анализ сайта

Яндекс.Метрика
© 2016 Excel для всех  Войти