Макросы для пароля в excel

It is a best practice,  to protect the Macro (VBA Code) from other users to edit or view. In this article, we explain to create a simple macro and protect the same “VBA Project” using a password in Excel from other users.

Implementation:

Follow the below steps to protect your excel macro with a password:

Step 1: Open an excel file, to create a simple “hello world” macro.

Step 2: Press Alt + F11 – to open Visual Basic Editor.

Step 3: Click Insert >> Module, which will add a new module as in Img1.

Img 1

Step 4: Type the below code in “code window”.

Sub firstMacro()
MsgBox "Hello World"
End Sub

Step 5: Right-click “VBAProject (Book1)” and then click “VBAProject Properties”.

Step 6: GoTo Protection Tab >> Check “Lock project for viewing” and type your password in both Password and Confirm password input text boxes. Press “OK” 

Step 7: Save your Excel workbook as Excel Macro-Enabled Workbook (*.xlsm) and close

Step 8: Now reopen your excel file.  Press Alt+F8 – to open the Macro dialog box. Select the macro “firstMacro” and click “RUN”.

Step 9: Our macro will pop up below the message box. Close or press OK to hide the message box

Step 10: Press Alt + F11 – to open Visual Basic Editor. Now user cannot see any information in the VBA. 

Step 11: Double click “VBAProject (vbaProtect.xlsm)”, It will ask the user to enter a password.

Step 12: Type your password and press “OK”.  Now user can see all the excel objects and Macro.

At this point we have successfully created a macro in VBA and protected it with a password.

Время на прочтение
5 мин

Количество просмотров 25K

Всем привет! Я обычный пользователь MS Excel. Не являющийся профессиональным программистом, но накопивший достаточно опыта, для установки и обхода защиты проектов VBA.

Дисклеймер:

В данной статье рассмотрены виды защиты проектов VBA, от несанкционированного доступа. Их сильные и слабые стороны – ранжирование.

Цель статьи показать слабые и сильные стороны каждого вида защиты проекта VBA в MS Office.

Демонстрация разработанных инструментов, в надстройке Macro Tools VBA, для снятия и установки той или иной защиты. 

Все инструменты реализованы стандартными средствами VBA, без использования дополнительных библиотек. 

Главная панель Надстройки Macro Tools VBA

Первый вид защиты — Обычный пароль

Время на снятие: мгновенно

Недостаток: быстрый доступ к запароленному модулю VBA

Стандартный инструмент (В среде VBE: панель Tools -> VBAProject Properties -> Protection). 

Самая легко снимающаяся защита. В интернете легко находится код, для снятия данной защиты. 

Данную защиту можно снять следующим инструментом:

Второй вид защиты — Project is Unviewable

Время на снятие:  от 10 до 15 мин (в ручную)

Недостаток: доступ к исходному коду модуля VBA

Один из самых распространённых видов защит.  Встречается в 95% файлах с защитой модуля VBA. При попытке открыть проект, открывается диалоговое окно, с  сообщением:  Project is Unviewable.


Большинство пользователей Excel, не могут снять данную защиту, так как она имеет множество вариации и нюансов, для ее снятие нужно иметь представление о внутренней структуре файла Excel.

Основан, данный вид защиты, на изменение ключей:

CMG=«4A488FCC54D054D054D054D0»

DPB=«0B09CE0F8E108E108E»

GC=«CCCE09520B120C120CED»

в файле vbaProject.bin

Кратко, как создается данная защита

Для создания данной защиты нужно, разархивировать файл Excel. Перейти в архиве в папку xl, открыть файл vbaProject.bin,  в конце файла находятся наши ключи, редактируем значения ключей на пусто, сохраняем файл. Переводим наш архив, обратно в файл Excel. Готово! 

Это самый простой вариант данной защиты, но существует множество модификаций.

Алгоритм снятия защиты Project is Unviewable.

1)  Разархивируем подопытный файл, переходим в файл  …xl_relsworkbook.xml.rels

2)      В файле workbook.xml.rels  ищем строку, содержащую слово  vbaProject, обычно имеет следующий вид:  />. В этой строке нас интересует ключ Target,иего значение. Значение является название файла, в котором находится проект VBA. Иногда, защищающий меняет значения ключа на printerSettings.bin.Получается маскировка файла с проектом VBA  под другой файл.

3)      Открываем на редактирование файл, указанный в  ключе Target, ищем в файле ключи  CMG, DPB, GC. И меняем в их названиях любую букву на любую другую, например: CMC, DPC, CC. При поиске нужно быть аккуратным, так как защищающий может поместить  в проект форму,  подписью повторяющую один из ключей, например такую: DPB=«0B09CE0F8E108E108E». При ее изменении проект VBA, будет удален из книги Excel.  Сохраняем и закрываем файл.

4)      Переводим архив обратно в файл Excel.

5)      Запускаем приложение Excel, выполняем следующее: в Центре управления безопасностью -> Параметры макросов  -> Отключить все макросы без уведомления. Перезапускаем Excel. Данная операция нужна, для блокировки защиты, которую иногда ставят авторы макросов. Данная защита реализована следующим образом. В модуле VBA «ЭтаКнига», создается процедуры, реагирующие на события открытия книги или закрытия книги. Эти события обычно проверяют, наличие пароля на проект VBA, запрет сохранения и прочее.

6)      Открываем файл. Если все правильно сделано то, Excel, будет ругаться на не правильные ключи, которые мы отредактировали, в пункте 3. Жмем, да, пока данные сообщения не закончатся и диалоговое окно закроется. 

      Если данное сообщение не появляется то, вы отредактировали не файл который содержит проект VBA.

7)      Открываем проект VBA. После всего, проект VBA должен быть доступен.

8)       Но иногда защита не снимается, тогда нужно сохранить файл, проверить, что он действительно сохранился! И проделать повторно операции с 1 по 7. Обычно так происходит когда в файле workbook.xml.rels в ключе Target  установлено printerSettings.bin.При сохранение,  Excel  исправляет это на значение на vbaProject.bin

Данную защиту можно установить и снять следующим инструментом:

Третий вид защиты — Hidden  Module, скрытые модули VBA

Время на снятие:  от 15 до 20 мин (нужен редактор OLE — объектов, Structured Storage Viewer, например.

Недостаток: доступ к коду модуля VBA

Менее распространенный вид  защиты обычно встречается в комбинации с защитой Project is Unviewable. При установке данной защиты модуль VBA не отображается в проекте книги Excel. О его существовании можно узнать, проанализировав код VBA (что требует время!) или открыть файл Excel в программе  OpenOffice  или  LibreOffice (так же можно смотреть код при защите Project is Unviewable, но данный способ не дает возможность получить рабочий файл, без пароля). 

Просмотр кода VBA в  LibreOffice

Кратко, как создается данная защита

Для создания данной защиты нужно отредактировать файл  с проектом VBA — vbaProject.bin  или printerSettings.bin,в зависимости от настроек в файле …xl_relsworkbook.xml.rels. В конце файла удаляются строки вида: Module1=32, 32, 635, 330, Z.  С нужными названиями модулей.

Для снятия данной защиты нужно в файле vbaProject.bin — восстановить удаленные записи модулей.

Данную защиту можно установить следующим инструментом.

Четвертый вид защиты — Обфускация кода

Время на снятие:  неизвестно, зависит от объема кода и пере использования частей кода

Обфусцированный код VBA

Недостаток:  необходимость тестирование файла после обфускации, на работоспособность

Крайне редкий вид защиты, основанный на изменении исходного кода VBA, в не удобочитаемый вид для человека. Удаляются все комментарии, форматирование кода, переименовываются названия всех переменных,  процедур, функций, модулей и прочего. Злоумышленнику никогда не удастся восстановить первоначальный вид кода, и потребует достаточно много времени для, его восстановления в удобно читаемый вид для человека.  

Для де-обфускации кода нужно иметь  время, специализированное ПО.

Данную защиту можно установить следующим инструментом.

Пятый вид защиты — Перенос кода в dll

Время на снятие:  неизвестно, зависит от языка программирования и квалификации

Недостаток:  необходимости в дополнительном  файле dll

Один из самых редких видов защиты. Основная идея перенос основного кода в отдельную библиотеку dll, написанную на любом другом языке программирования. Не распространённость данный вид защиты получил по следующей причине,  необходимости за файлом Excel, «таскать» дополнительный файл, dll.

Для получения доступа к коду dll, нужно обладать специальными знаниями.

Заключение

В заключении хочу выделить бесполезность защит:  Project is Unviewable и Hidden  Module которые, по существу ни отчего не защищают. Позволяют просматривать код VBA, без изменения исходного  файла, в таких программах как OpenOffice  или  LibreOffice. Так и снимаются без особых проблем.

Правильная защита макросом

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

Worksheets("Лист1").Unprotect Password:="123"
'тут макрос делает действия
Worksheets("Лист1").Protect Password:="123"

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

Есть гораздо более легкий и красивый способ решить задачу.

Нажмите Alt+F11, чтобы попасть в редактор Visual Basic. Затем найдите в левом верхнем углу в окне Project Explorer (если его не видно, то нажмите Ctrl+R) модуль ЭтаКнига (ThisWorkbook) и откройте двойным щелчком:

smart_protection1.gif

Скопируйте туда этот код:

Private Sub Workbook_Open()
    'включаем защиту первого листа для пользователя, но не макроса
    Worksheets("Лист1").Protect Password:="123", UserInterfaceOnly:=True
    
    'второй лист защищаем аналогично, но с возможностью пользоваться группировкой
    Worksheets("Лист2").EnableOutlining = True
    Worksheets("Лист2").Protect Password:="555", UserInterfaceOnly:=True
End Sub

Эта процедура будет автоматически запускаться при открытии файла и ставить защиту на заданные листы книги. Причем параметр UserInterfaceOnly, который мы дополнительно ввели, указывает Excel, что защита не должна распространяться на действия выполняемые макросом, а только на операции пользователя. Для второго листа все еще веселее — строка с параметром EnableOutlining разрешает пользоваться группировкой (символы плюс-минус для сворачивания-разворачивания строк и столбцов) на защищенном листе.

Всего три строчки кода, зато как удобно!

Ссылки по теме

  • Что такое макросы и куда копировать их код
  • Как поставить защиту листа, книги или всего файла

Макрос предназначен для замены паролей на открытие, для большого количества файлов Excel.

В качестве исходных данных, задаётся старый и новый пароли.

Если поле «старый пароль» — пустое, подразумевается, что у файлов нет пароля.
Если поле «новый пароль» — пустое, подразумевается, что с файлов снимается пароль.

Нажимаем кнопку, — появляется диалоговое окно выбора папки, — после чего макрос в цикле открывает всё файлы,
и пересохраняет их с новым паролем.

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

ВНИМАНИЕ: Это очень опасный макрос, — если вы случайно забудете, какой пароль вы установили на файлы,
— все обработанные макросом файлы Excel станут недоступны!

Так что, пользуйтесь макросом на свой страх и риск.

Напоминаю: снять (сбросить) пароль н а открытие файла невозможно!
(только полным перебором, — а это очень долго)

Часть кода макроса: (см. прикреплённый файл)

Sub ChangePasswords()
    On Error Resume Next
    PassOld$ = shs.Range("PassOld").Text
    PassNew$ = shs.Range("PassNew").Text
 
    folder$ = GetFolder(777, True)        ' запрашиваем имя папки
    If folder$ = "" Then Exit Sub        ' выход, если пользователь отказался от выбора папки

    Dim coll As Collection
    ' считываем в колекцию coll имена файлов XLS*
    Set coll = FilenamesCollection(folder$, "*.xls*")
    If coll.Count = 0 Then
        MsgBox "В выбранной папке не найдено ни одного файла Excel", vbExclamation
        Exit Sub
    End If
 
    Dim WB As Workbook, nOK&, nErr&
    ' очистка таблицы ошибок
    Intersect(shs.UsedRange, shs.Range("b11:b" & shs.Rows.Count)).ClearContents
    Application.ScreenUpdating = False        ' отключаем обновление экрана

    For Each Filename In coll        ' перебираем найденные в папке файлы
        Err.Clear: Set WB = Nothing
        Set WB = Workbooks.Open(Filename, , , , PassOld$)        ' пробуем открыть очередной файл
        If Not WB Is Nothing Then        ' если файл открылся
            WB.Password = PassNew$        ' ставим новый пароль
            WB.Close True        ' закрываем файл с сохранением изменений
            nOK& = nOK& - (Err = 0)        ' считаем количество успешно сохранённых файлов

        Else        ' файл не открылся - выводим в список ошибок
            nErr& = nErr& + 1
            With shs.Range("b" & 10 + nErr&)
                .Value = Filename
                .Hyperlinks.Add .Resize(, 1), Filename, "", "Попробовать открыть файл вручную"
            End With
        End If
        DoEvents
    Next
 
    Application.ScreenUpdating = True
    msg$ = "Найдено файлов в папке: " & coll.Count & vbNewLine & _
           "Удалось заменить пароли на файлах: " & nOK&
    MsgBox msg, vbInformation, "Готово"
End Sub
  • 15033 просмотра

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.

Skip to content

Как защитить все листы в файле

На чтение 2 мин. Просмотров 2.8k.

Что делает макрос: Вы можете защитить все листы в файле
перед тем, как распространить свои книги.
Вместо того чтобы защищать каждый лист вручную, вы можете использовать этот макрос.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как работает этот код
  4. Как использовать

Как макрос работает

В этом макросе вы выбираете листы и просто применяете защиту с помощью пароля.
Пароль аргумент определяет пароль, необходимый для снятия защиты. Аргумент Пароль не является обязательным. Если его вообще опустить, лист по-прежнему будет защищен; вам просто не нужно будет вводить пароль для снятия его защиты. Кроме того, следует помнить, что пароли Excel чувствительны к регистру.

Код макроса

Sub ZaschititVseListi()
 'Шаг 1: Объявляем переменные
 Dim ws As Worksheet
 'Шаг : Запускаем цикл через все рабочие листы
 For Each ws In ActiveWorkbook.Worksheets
 'Шаг 3: Ставим защиту и переходим к следующему листу
 ws.Protect Password:="КРАСНЫЙ"
 Next ws
 End Sub

Как работает этот код

  1. Шаг 1 объявляет объект под названием WS. Он создает контейнер памяти для каждого рабочего листа.
  2. Шаг 2 начинает процесс в Excel — проходит через все рабочие листы.
  3. На шаге 3, макрос применяет защиту с данным паролем, а затем возвращается обратно, чтобы получить рабочий лист.

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

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши personal.xlb в окне Project.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код во вновь созданном модуле.

Понравилась статья? Поделить с друзьями:
  • Макросы для офис excel
  • Макросы для word 2019
  • Макросы для отчетов excel
  • Макросы для word 2013
  • Макросы для открытия листов excel