Lost your password?


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

Как программно снять пароль с 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

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

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

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

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

Также см.:
[[Копирование модулей и форм из одной книги в другую]]
[[Как удалить макросы в книге?]]
[[Как добавить код процедуры программно, скопировать модуль]]
[[Защита листов/снятие защиты]]


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

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

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

    Способ отлично работает в Office 2003, но в 2010 вводимый пароль появляется в Исходном коде модуля...

  2. Проверил на 2010 - отрабатывает как положено.

  3. Nerg:

    Здравствуйте! у меня пишет invalid password, хотя написал правильный пасворд. если ввожу вручную этот же пасворд то проект открывается. в чем проблема, а?

  4. Проблема в этом(я в статье написал): "Главный недостаток: снятие пароля данным методом весьма нестабильно и иногда может не срабатывать."

  5. Nerg:

    Добрый день! а куда вставить код который удаляет макросы после снятия пароля. я вставляю код где написано "'здесь Ваш код по внесению изменений в проект" и скрипт не срабатывает, пишет инвалид пасворд. код для удаления макросов тоже ваш, просто хотел их обьеденить, что-то не получается. Помогите пожалуйста?

  6. Так если пишет "Invalid password" - значит так оно и есть. Значит Вы код неверный указываете. Вы тильды поставили до и после самого пароля? Как в статье написано.

  7. Nerg:

    Нет, сам код снятия пароля работает нормально. Если добавляю код удаления макросов с книги, то снятия пароля не работает. Я хочу сперва снять пароль с проекта и после этого удалить все макросы с этой книги. И чтобы это все было в одной процедуре.

  8. Nerg, я не экстрасенс - я не знаю что Вы там и как накрутили, что у Вас пишет "неверный пароль". Я даю ответ так, как был задан вопрос. Пока что из Ваших вопросов понять можно одно - Вы что-то делаете не так. что не знаю. Почитайте тему на форуме: http://www.excel-vba.ru/forum/index.php?topic=996.0

  9. imort:

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

  10. imort, Вы считаете свою критику справедливой? И почему Вы считаете "без соответствующих пояснений"? Прокомментирована почти каждая строка кода. Код работает нестабильно не из-за того, что без пояснения и выдранный откуда-то. Нестабильная работа обосновывается тем, что идет перебор окон проекта и к ним применяется метод SendKeys. Он как раз нестабилен.
    Может Вы предложите вариант лучше, если уж взялись за критику? Критиковать легко, когда сам ничего не сделал и не ведаешь как. А вот обоснованная критика с предложением лучших вариантов удается не всем.

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

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


Для оформления сообщений Вы можете использовать следующие тэги:
<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 для всех   Войти