MyTetra Share
Делитесь знаниями!
Как программно снять пароль с VBA проекта?
Время создания: 16.03.2019 23:43
Текстовые метки: Объектная модель, VBOM
Раздел: !Закладки - VBA - VBA управление кодами
Запись: xintrea/mytetra_db_adgaver_new/master/base/1512730954ni0cguev3b/text.html на raw.githubusercontent.com

Как программно снять пароль с VBA проекта?

Большинство наверняка знает как установить/снять пароль с VBA проекта вручную:

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

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

Я лично знаю два способа снять пароль программно: через метод SendKeys и использовании функций API. Т.к. второй способ довольно громоздкий и сложный для понимания - я в данной статье опишу лишь первый способ. Он не содежит каких-либо изысков и довольно прост.

Sub Unprotect_VBA() Dim objVBProject As Object, objVBComponent As Object, objWindow As Object Workbooks.Open "C:\1.xls" Set objVBProject = ActiveWorkbook.VBProject 'просматриваем все окна проекта в поисках окна снятия защиты For Each objWindow In objVBProject.VBE.Windows ' Type = 6 - это нужное нам окно If objWindow.Type = 6 Then objWindow.Visible = True objWindow.SetFocus: Exit For End If Next 'вводим пароль и подтверждаем ввод SendKeys "~1234~", True: SendKeys "{ENTER}", True 'здесь Ваш код по внесению изменений в проект Set objVBProject = Nothing: Set objVBComponent = Nothing: Set objWindow = Nothing ActiveWorkbook.Close True End Sub


Sub Unprotect_VBA()

    Dim objVBProject As Object, objVBComponent As Object, objWindow As Object

 

    Workbooks.Open "C:\1.xls"

    Set objVBProject = ActiveWorkbook.VBProject

    'просматриваем все окна проекта в поисках окна снятия защиты

    For Each objWindow In objVBProject.VBE.Windows

        ' Type = 6 - это нужное нам окно

        If objWindow.Type = 6 Then

            objWindow.Visible = True

            objWindow.SetFocus: Exit For

        End If

    Next

    'вводим пароль и подтверждаем ввод

    SendKeys "~1234~", True: SendKeys "{ENTER}", True

    'здесь Ваш код по внесению изменений в проект

    Set objVBProject = Nothing: Set objVBComponent = Nothing: Set objWindow = Nothing

    ActiveWorkbook.Close True

End Sub

Код сначала открывает необходимую книгу, а затем снимает пароль с проекта.

"C:\1.xls" - полный путь к книге, включая расширение файла.

"~1234~" - пароль к проекту. Тильды нужны, но они не являются частью кода. Т.е. сам код это - 1234.

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

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования