Lost your password?


Хитрости »
Основные понятия (27)
Сводные таблицы и анализ данных (10)
Графики и диаграммы (5)
Работа с VB проектом (12)
Power BI и Power Query (23)
Условное форматирование (5)
Списки и диапазоны (5)
Макросы(VBA процедуры) (68)
Разное (43)
Баги и глюки Excel (5)

Как защитить проект VBA паролем

Для тех кто уже освоился более-менее в программировании на Visual Basic for Application рано или поздно непременно встает вопрос: как защитить свой код от изменений или даже от просмотра? Как правило это делается в файлах, которые в дальнейшем "гуляют по рукам". Т.е. автор создал и потом файл отсылается или другим пользователям, или клиентам, поставщикам и т.п. Чтобы у тех, кто будет в дальнейшем работать с этим файлом, не было возможности подсмотреть проект и тем более что-то в нем изменить. В каких-то случаях цель такой защиты это защита "от дурака": чтобы по незнанию не изменили так, что файл просто откажется работать. Так же есть и другая причина - код является "коммерческим" и в нем присутствует некая защита от использования функционала по истечению ДЕМО-периода и надо закрыть код, чтобы эту защиту не "сломали".
По сути защитить проект VBA стандартными средствами совсем не сложно. Переходим в проект VBA (вкладка Разработчик(Developer) -Visual Basic или сочетание клавиш Alt+F11), далее:

  1. Tools -VBAProject Properties -вкладка Protection
  2. устанавливаем галочку Lock project for viewing. Если галочка не установлена, то весь код можно будет просматривать и изменять, но изменить или просмотреть свойства самого проекта будет уже невозможно без снятия пароля.
  3. вписываем пароль в полях Password и Confirm password

 
Чтобы снять пароль с проекта VBA необходимо перейти в проект VBA файла(вкладка Разработчик(Developer) -Visual Basic или сочетание клавиш Alt+F11) и:

  1. Tools -VBAProject Properties -вкладка Protection
  2. снимаем галочку Lock project for viewing
  3. удаляем пароль в полях Password и Confirm password

 
Для чего вообще может быть нужна отдельно галочка Lock project for viewing? Ведь как я написал выше - если её не поставить, весь код проекта становится доступен. Смысл такой защиты? Я применяю так: в коммерческой разработке устанавливаю пароль на проект. Но на само время разработки галочку не ставлю, чтобы у меня был доступ к коду без постоянного ввода пароля. Как только разработка завершена, перед тем как выслать файл заказчику мне остается только установить эту галочку и все - проект защищен(ведь пароль уже установлен). Если потом нужны доработки - то схема такая же: на время доработки снимаю галочку и ставлю обратно перед тем как выслать. Пароль при этом какой был, тот и остается - постоянно его вводить не требуется.


Хочу так же отметить, что пароль от проекта VBA ломается на ура(программ для этого достаточно в сети, перечислять не буду - кому надо сможет найти, а кто не сможет - значит не так уж и надо). Корпорацией Microsoft данный пароль точно не разрабатывался для защиты проекта от несанкционированного взлома и скорее был направлен больше на защиту от дурака. А может дело в том, что сам VBE практически не дорабатывался чуть ли не с самого его создания.
В любом случае, для тех, кто хочет чуть надежнее защитить свой проект VBA лучше использовать для этого сторонние утилиты. Например, очень хорошая программа для рядовых пользователей Protect VBA от eliansoft (http://www.eliansoft.com). Данная программа делает недоступным проект VBA. Никаких паролей вводить не надо - проект просто недоступен даже для ввода пароля. Последняя бесплатная версия была 1.6. Сейчас в сети её уже практически не найти в бесплатном варианте, т.к. разработчики убрали её с офф.сайта и постарались убрать отовсюду, видимо. Но т.к. у меня эта программа есть - выкладываю здесь, но скачать можно только после регистрации на сайте (чтобы тот же eliansoft не смог добраться).
Скачать Protect VBA

  Protect_VBA.zip (287,1 KiB, 584 скачиваний)
У Вас нет прав для скачивания этого файла. Возможно, Вы не зарегистрированы на сайте. Зарегистрируйтесь и попробуйте скачать снова.

Как использовать:

  • создаете файл с кодом, сохраняете, закрываете
  • запускаете Protect VBA
  • выбираете файл, проект VBA которого надо защитить
  • нажимаете Protect
  • будет предложено выбрать папку для сохранения защищенного файла. Здесь лучше заранее создать папку для сохранения файла, т.к. программа делает копию оригинального файла и не даст сохранить непосредственно тот же файл. Что к лучшему - ведь должен же у нас остаться файл с открытыми кодами :)

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

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

Access apple watch Multex Power Query и Power BI VBA управление кодами Бесплатные надстройки Дата и время Записки ИП Надстройки Печать Политика Конфиденциальности Почта Программы Работа с приложениями Разработка приложений Росстат Тренинги и вебинары Финансовые Форматирование Функции Excel акции MulTEx ссылки статистика
Обсуждение: 17 комментариев
  1. Алексй:

    А если так:
    Sub Ставим_пароль_на_VBProject_Protect()
    With Application
    .VBE.CommandBars.FindControl(ID:=2578).Execute
    .SendKeys "{Tab 9}{Right}{Tab} {Tab}пароль{Tab}пароль{Enter}"
    .ActiveWorkbook.Save
    End With
    End Sub

    • greatsky:

      Вопрос? а программа то не поддерживает xlsm

    • MK:

      СЛушайте, а как узнать идентификаторы разных элементов?

      Например кнопки Office, или какого-то пункта меню?

      • Создать код, который просмотрит все панели и все их элементы и выведет все их ID.

        • MK:

          Я имел в виду вот это:

          With Application
          .VBE.CommandBars.FindControl(ID:=2578).Execute

          Не намекнёте, как это примерно делается, пару строк покажите.

          • MK, я уже даже не намек, а готовый алгоритм Вам дал. Оставалось только код по нему написать, при этом совсем не хитрый. Вы же все никак не поймете :)

                Dim cbr, btn
                With Application.VBE
                    For Each cbr In .CommandBars
                        For Each btn In cbr.Controls
                            Debug.Print btn.Caption & "; ID = " & btn.ID
                        Next
                    Next
                End With
        • MK:

          Немного изменил Ваш код

          Sub ComponentIDE()
          Dim cmp As Object
          Dim i As Long, n As Long
          Dim cbr As Object, btn As Object
          i = 0
          With Application.VBE
          For Each cbr In .CommandBars
          For Each btn In cbr.Controls
          Debug.Print cbr.Name, btn.Caption
          Next
          Next
          End With
          End Sub
          Получил массу интересного на выходе, в итоге появилась новая проблема, непонятно, откуда, собственно, эти пункты - как ни старался, не смог г отыскать некоторые.

          Edit &Previous Bookmark
          Edit &Clear All Bookmarks
          Debug Design &Mode
          Debug Run &Project

          Но в целом, как работать с Редактором понятно, более или менее.

          А где взять кнопки и пункты меню в среде Excel?

    • MK:

      А как Вы узнали ID именно этого пункта меню?

  2. Valentinych:

    Вопрос о поддержке файлов xlsm актуален.
    Хотелось бы паролировать и их тоже...

  3. abricos29:

    Дмитрий, возник вопрос как защитить файл надстройки формата .xlam! Данная программа его не видит, и стандартный метод тоже не применяется. Как быть? подскажите пожалуйста.

    • Если речь про Protect VBA - то только искать аналоги. Но бесплатных я не видел.

      • MK:

        А платные где взять?

      • MK:

        А какие есть платные аналоги?

        • МК, целью статьи не является сравнение всех доступных средств защиты проекта VBA. Я показал лишь стандартный метод и бонусом программу. А платных программ куча. Со своими плюсами и минусами. Поищите в интернете, сравните и выбирайте какая больше подходит именно Вам.

  4. Paxani4:

    Спасибо за статью. Как я понял после защиты файла этой программой нет никаких вариантов докапаться до исходного кода, даже у того кто эту защиту установил?

  5. kompvp:

    Я *.xlsm запоролил этой прогой просто сохранив файл в формате офис 2003 (*.xls) и всё работает, по крайней мере у меня.

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

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


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

Тренинги

Заказать
Юридическая информация

Использование материалов сайта

Политика Конфиденциальности

ИП Щербаков Дмитрий Валентинович
ОГРНИП: 318502700083307
ИНН: 504013350772

Наши партнеры

Перейти

Счетчики

Рейтинг@Mail.ru Яндекс.Метрика
© 2024 Excel для всех   Войти