Для тех кто уже освоился более-менее в программировании на Visual Basic for Application рано или поздно непременно встает вопрос: как защитить свой код от изменений или даже от просмотра? Как правило это делается в файлах, которые в дальнейшем "гуляют по рукам". Т.е. автор создал и потом файл отсылается или другим пользователям, или клиентам, поставщикам и т.п. Чтобы у тех, кто будет в дальнейшем работать с этим файлом, не было возможности подсмотреть проект и тем более что-то в нем изменить. В каких-то случаях цель такой защиты это защита "от дурака": чтобы по незнанию не изменили так, что файл просто откажется работать. Так же есть и другая причина - код является "коммерческим" и в нем присутствует некая защита от использования функционала по истечению ДЕМО-периода и надо закрыть код, чтобы эту защиту не "сломали".
По сути
Tools -VBAProject Properties -вкладкаProtection - устанавливаем галочку
Lock project for viewing . Если галочка не установлена, то весь код можно будет просматривать и изменять, но изменить или просмотреть свойства самого проекта будет уже невозможно без снятия пароля. - вписываем пароль в полях
Password иConfirm password
Чтобы
Tools -VBAProject Properties -вкладкаProtection - снимаем галочку
Lock project for viewing - удаляем пароль в полях
Password иConfirm password
Для чего вообще может быть нужна отдельно галочка
Хочу так же отметить, что пароль от проекта VBA ломается на ура(программ для этого достаточно в сети, перечислять не буду - кому надо сможет найти, а кто не сможет - значит не так уж и надо). Корпорацией Microsoft данный пароль точно не разрабатывался для защиты проекта от несанкционированного взлома и скорее был направлен больше на защиту от дурака. А может дело в том, что сам VBE практически не дорабатывался чуть ли не с самого его создания.
В любом случае, для тех, кто хочет чуть надежнее защитить свой проект VBA лучше использовать для этого сторонние утилиты. Например, очень хорошая программа для рядовых пользователей Protect VBA от eliansoft (http://www.eliansoft.com). Данная программа делает недоступным проект VBA. Никаких паролей вводить не надо - проект просто недоступен даже для ввода пароля. Последняя бесплатная версия была 1.6. Сейчас в сети её уже практически не найти в бесплатном варианте, т.к. разработчики убрали её с офф.сайта и постарались убрать отовсюду, видимо. Но т.к. у меня эта программа есть - выкладываю здесь, но скачать можно только после регистрации на сайте (чтобы тот же eliansoft не смог добраться).
Protect_VBA.zip (287,1 КиБ, 607 скачиваний)
- создаете файл с кодом, сохраняете, закрываете
- запускаете Protect VBA
- выбираете файл, проект VBA которого надо защитить
- нажимаете Protect
- будет предложено выбрать папку для сохранения защищенного файла. Здесь лучше заранее создать папку для сохранения файла, т.к. программа делает копию оригинального файла и не даст сохранить непосредственно тот же файл. Что к лучшему - ведь должен же у нас остаться файл с открытыми кодами :)
А если так:
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
Вопрос? а программа то не поддерживает xlsm
СЛушайте, а как узнать идентификаторы разных элементов?
Например кнопки Office, или какого-то пункта меню?
Создать код, который просмотрит все панели и все их элементы и выведет все их ID.
Я имел в виду вот это:
With Application
.VBE.CommandBars.FindControl(ID:=2578).Execute
Не намекнёте, как это примерно делается, пару строк покажите.
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?
А как Вы узнали ID именно этого пункта меню?
Вопрос о поддержке файлов xlsm актуален.
Хотелось бы паролировать и их тоже...
Дмитрий, возник вопрос как защитить файл надстройки формата .xlam! Данная программа его не видит, и стандартный метод тоже не применяется. Как быть? подскажите пожалуйста.
Если речь про Protect VBA - то только искать аналоги. Но бесплатных я не видел.
А платные где взять?
А какие есть платные аналоги?
МК, целью статьи не является сравнение всех доступных средств защиты проекта VBA. Я показал лишь стандартный метод и бонусом программу. А платных программ куча. Со своими плюсами и минусами. Поищите в интернете, сравните и выбирайте какая больше подходит именно Вам.
Спасибо за статью. Как я понял после защиты файла этой программой нет никаких вариантов докапаться до исходного кода, даже у того кто эту защиту установил?
Paxani4, не то чтобы совсем никак нельзя. Но сложнее в разы, чем взлом обычного пароля.
Я *.xlsm запоролил этой прогой просто сохранив файл в формате офис 2003 (*.xls) и всё работает, по крайней мере у меня.