Защита книги не от макроса excel

Хитрости »

1 Май 2011              162416 просмотров


Как защитить лист от пользователя, но не от макроса?

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

Sub Write_in_ProtectSheet()
    'снимаем защиту с листа
    Worksheets("Лист1").Unprotect
    'если лист защищен с паролем 1234: Worksheets("Лист1").Unprotect "1234"
    'действия на листе.Например,изменение значения ячейки А1
    Cells("A1").Value = "www.excel-vba.ru"
    'устанавливаем защиту на лист
    Worksheets("Лист1").Protect
    'если лист был защищен с паролем 1234: Worksheets("Лист1").Protect "1234"
End Sub

Но есть метод проще.
Если выполнить ниже приведенную строчку кода, то пользователю невозможно будет изменить данные на листе(кроме тех, которые Вы сами разрешите), однако код VBA(макрос) сможет преспокойно вносить любые изменения, не снимая защиту.

Sub Protect_for_User_Non_for_VBA()
    ActiveSheet.Protect Password:="1111", UserInterfaceOnly:=True
End Sub

Основную роль здесь играет параметр UserInterfaceOnly. Если его установить в True, то это говорит Excel-ю, что коды VBA могут выполнять действия по изменению ячеек, не снимая защиты методом Unprotect. Однако сама защита листа при этом не снимается и вручную изменить данные ячеек, не сняв защиту с листа, невозможно.
Код выше устанавливает такую защиту только на активный лист книги. Но можно указать лист явно(например установить защиту на лист с именем Лист1 в активной книге и лист, идущий вторым по порядку в книге(Sheets(2))):

Sub Protect_for_User_Non_for_VBA()
    Sheets(2).Protect Password:="1111", UserInterfaceOnly:=True
    Sheets("Лист1").Protect Password:="1111", UserInterfaceOnly:=True
End Sub

Так же приведенный код можно еще чуть модернизировать и разрешить пользователю помимо изменения ячеек еще и использовать автофильтр:

Sub Protect_for_User_Non_for_VBA()
    Sheets(2).Protect Password:="1111", UserInterfaceOnly:=True
    'на лист "Лист1" поставим защиту и разрешим пользоваться фильтром
    Sheets("Лист1").Protect Password:="1111", AllowFiltering:=True, UserInterfaceOnly:=True
End Sub

Можно разрешить и другие действия(выделение незащищенных ячеек, выделение защищенных ячеек, форматирование ячеек, вставку строк, вставку столбцов и т.д. Чуть подробнее про доступные параметры можно узнать в статье Защита листов и ячеек в MS Excel). А как будет выглядеть строка кода с разрешенными параметрами можно узнать, записав макрорекордером установку защиты листа с нужными параметрами:

После этого получится строка вроде такой:

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowFiltering:=True

здесь я разрешил использовать автофильтр(AllowFiltering:=True), вставлять строки(AllowInsertingRows:=True) и столбцы(AllowInsertingColumns:=True).Чтобы добавить возможность изменять данные ячеек только через код VBA, останется добавить параметр UserInterfaceOnly:=True:

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowFiltering:=True, UserInterfaceOnly:=True

и так же неплохо бы добавить и пароль для снятия защиты, т.к. запись макрорекордером не записывает пароль:

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowFiltering:=True, UserInterfaceOnly:=True, Password:="1111"

Этот метод всем хорош, все отлично, но. Параметр UserInterfaceOnly сбрасывается сразу после закрытия книги. Т.е. если установить таким образом защиту на лист и закрыть книгу, то при следующем открытии защиты этой уже не будет — останется лишь стандартная защита. Поэтому, если необходимо такую защиту видеть постоянно, то данный макрос лучше всего прописывать на событие открытия книги(модуль ЭтаКнига(ThisWorkbook)).
Сделать это можно таким кодом:

Private Sub Workbook_Open()
    Sheets("Лист1").Protect Password:="1111", UserInterfaceOnly:=True
End Sub

Этот код сработает только после того, как книга будет открыта. А это значит, чтобы увидеть результат необходимо после записи этого кода в ЭтаКнига сохранить книгу, закрыть её и открыть заново. Тогда в сам момент открытия книги код сработает и установит на «Лист1» правильную защиту.

Часто так же бывает необходимо устанавливать одинаковую защиту на все листы книги. Сделать это можно таким кодом, который так же должен быть размещен в модуле ЭтаКнига(ThisWorkbook):

Private Sub Workbook_Open()
    Dim wsSh As Object
    For Each wsSh In Me.Sheets
        Protect_for_User_Non_for_VBA wsSh
    Next wsSh
End Sub
Sub Protect_for_User_Non_for_VBA(wsSh As Worksheet)
    wsSh.Protect Password:="1111", UserInterfaceOnly:=True
End Sub

Плюс во избежание ошибок лучше перед установкой защиты снимать ранее установленную(если она была):

Sub Protect_for_User_Non_for_VBA(wsSh As Worksheet)
    wsSh.Unrotect "1111"
    wsSh.Protect Password:="1111", UserInterfaceOnly:=True
End Sub

Ну и если надо такую защиту установить только на конкретные листы, то убираем цикл и вызываем процедуру только для нужных листов. Если известны их имена, то можно прибегнуть к использованию массивов:

Private Sub Workbook_Open()
    Dim arr, sSh
    arr = Array("Отчет", "База", "Бланк")
    For Each sSh in arr
        Protect_for_User_Non_for_VBA Me.Sheets(sSh)
    Next
End Sub
Sub Protect_for_User_Non_for_VBA(wsSh As Worksheet)
    wsSh.Protect Password:="1111", AllowFiltering:=True, UserInterfaceOnly:=True
End Sub

Для применения в своих задачах в данном коде необходимо лишь изменить(добавить, удалить, вписать другие имена) имена листов в этой строке: Array(«Отчет», «База», «Бланк»)

Примечание: Метод защиты через UsefInterface всем хорош, но есть одно ограничение: метод невозможно использовать в книге с общим доступом(Рецензирование -Доступ к книге), т.к. при общем доступе существуют ограничения, среди которых и такое, которое запрещает изменять параметры защиты для книги в общем доступе.

Также см.:
Как разрешить изменять только выбранные ячейки?
Защита листов/снятие защиты
Как оставить возможность работать со структурой на защищенном листе?


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

  Плейлист   Видеоуроки


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



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

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

Вопрос собственно в теме.  
Если прописать в Workbook_Open условие на открытие книги, и запустить с включенными макросами, то тут все понятно.  

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

 

Hugo

Пользователь

Сообщений: 23252
Регистрация: 22.12.2012

Тогда нужно делать так, чтобы юзер при отключенных макросах рассматривал пустой лист с дулей, т.е. с надписью ВКЛЮЧИ МАКРОСЫ, ДУРЕНЬ!!!  
И ни одного другого листа в книге. Видимого или просто скрытого.

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

>>А если у юзера макросы отключены, куда тогда вставлять  

  : )  

  Не куда. Как вариант: создать лист в книге, на кот. большими буквами написать. «МАКРОСЫ ОТКЛЮЧЕНЫ, ДАЛЬНЕЙШАЯ РАБОТА НЕ ВОЗМОЖНА». И скрывать его каждый раз при открытии, а при закрытии снова делать видимым.

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

Hugo, а я ведь Ваше сообщение не видел ^_^  

    =37878=

 

Hugo

Пользователь

Сообщений: 23252
Регистрация: 22.12.2012

nerv, верю :)  

  Вернее в ключе задачи так — если макросы отключены или дата проверку не прошла — тогда дуля ( ну или две разные дули), а если включены и дата валидна — тогда молча работаем.

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

я этот вариант рассматривал, но подлый юзер может поступить так:  
Открыть с макросами (пока не наступила проверочная дата), все нужные листы будут видны. Сохранить в таком виде в формат .xlsx, и дальше опять чихал он на макросы !!

 

Hugo

Пользователь

Сообщений: 23252
Регистрация: 22.12.2012

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

 

Hugo

Пользователь

Сообщений: 23252
Регистрация: 22.12.2012

И кстати перед сохранением тоже нужно макросом скрывать листы в обязательном порядке — тогда будет xlsx с одним видимым листом с дулей.  
В общем, нужно продумать все варианты — и всё равно это ненадёжно :(

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

Еще вариант — подписать документ, сделать Ваши макросы разрешенными по умолчанию, т.е., чтобы окошка открыть с макросами, без них не было вообще.

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

>>Сохранить в таком виде в формат .xlsx, и дальше опять чихал он на макросы !!  

  Убейте SaveAs

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

{quote}{login=Hugo}{date=22.08.2011 05:28}{thema=}{post} — и всё равно это ненадёжно :({/post}{/quote}  

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

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Антош, абсолютной защиты не существует. Все, что создано, может быть сломано. Вопрос, сколько времени и средств нужно потратить на взлом. А запрос тоже можно реализовать программно. И нюанс — если юзер способен поломать такую защиту, он наверняка способен сам написать программу, подобную твоей(ну, с некоторыми оговорками).

Я сам — дурнее всякого примера! …

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

Спасибо Сережа. Тогда сделаю несколько уровней защиты, с подковырками, и посмотрим кто кого ))

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Загляни еще сюда:  

http://www.programmersforum.ru/showthread.php?t=163614  

возможно тебе будет интересно.  
Круто, симметрия по двум осям:  
-=68389=-

Я сам — дурнее всякого примера! …

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

Собственно, я не понимаю чем Вам не решение — подписать документ.  
В редакторе VBE: Tools -> Digital Signature. Соответственно, предварительно ее нужно будет создать. И при открытии книги EXСEL сообщений типа: «Этот документ содержит макросы. Отключить / Не отключать» выводиться не будет.

 

ran

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

{quote}{login=nerv}{date=22.08.2011 07:01}{thema=}{post}Собственно, я не понимаю чем Вам не решение — подписать документ.  
В редакторе VBE: Tools -> Digital Signature. Соответственно, предварительно ее нужно будет создать.{/post}{/quote}  
А можно с этого места поподробнее???

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

Пожалуйста. Я специально для себя инфу как-то на этот счет в txt сохранял. Вот она  

  C:Program FilesMicrosoft OfficeOFFICE11SELFCERT.EXE  
Если такого файла нет, смотреть в установленных компонентах Microsoft Office.  

  Запускаете SELFCERT.EXE, создаете цифровой сертификат. Потом открываете интересующую Вас книгу, Параметры -> Безопасноть -> Цифровые подписи. Выбираете созданный Вами сертификат.  

  Подписать макросы можно следующим образом:  

  1. Открываем редактор VBA  
2. Tools->Digital Signature  
3. Выбираем требуемый сертификат  
4. Сохраняем проект  
5. Сохраняем книгу  

  Затем, закрываем ее. Снова открываем и ставим галку «доверять макросам этого издателя». Все : )

 

ran

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

Судя по описанию это, мягко говоря, не совсем то-:)

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

>>А если у юзера макросы отключены, куда тогда вставлять проверку например по дате  

  Т.о. макросы будут включены ВСЕГДА. ЧТо нето?

 

ran

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

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

 

Hugo

Пользователь

Сообщений: 23252
Регистрация: 22.12.2012

#21

23.08.2011 14:10:58

Да, я тоже понял это так — эта штука для того, чтоб на своих макросах небыло запроса (мы им верим), а на всех других был.  
Т.е. для распространяемой программы SELFCERT.EXE не подходит.

Время на прочтение
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. Так и снимаются без особых проблем.

269 / 14 / 0

Регистрация: 26.02.2014

Сообщений: 142

1

Защита книги и макрос

18.03.2014, 13:33. Показов 19321. Ответов 10


Студворк — интернет-сервис помощи студентам

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



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

18.03.2014, 13:33

Ответы с готовыми решениями:

Защита книги
доброго времени суток. Вопрос. Запаролил книгу, но узнал что открыть ее не представляет никакой…

Защита книги и кода excel
Вот новый вопросик:
задача защитить код и доступ к записям листов методом макросов. Вот как я это…

Защита книги от переноса на другой ПК
У меня проблема, как защитить книгу от незаконного переноса на другой пк?
Если кто знает помогите….

Защита книги excel 2007
Хочу чтоб Если книгу excel 2007 c названием BOOK1 перепишут в другой компьютер, там его не могли…

10

12 / 12 / 4

Регистрация: 16.03.2012

Сообщений: 252

24.03.2014, 10:07

2

Нужно в автоопен поставить:
ActiveWorkbook.Unprotect Password:=»ПАРОЛЬ»
Это снятие автоматом пароля.

Таже нужно ставить пароль автоматом перед закрытием. Для нужно в саб Sub Workbook_BeforeClose вставить:
ActiveWorkbook.Protect Password:=»ПАРОЛЬ», structure:=True, Windows:=True



0



40 / 40 / 9

Регистрация: 19.03.2014

Сообщений: 215

24.03.2014, 12:03

3

Скорее всего нельзя.
Включение макросов это настройка самого Экзеля, поэтому лучше формой.



0



12 / 12 / 4

Регистрация: 16.03.2012

Сообщений: 252

24.03.2014, 15:02

4

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



0



269 / 14 / 0

Регистрация: 26.02.2014

Сообщений: 142

24.03.2014, 15:10

 [ТС]

5

Может глупый вопрос, а что есть Auto Open и где задавать ему макрос?



0



12 / 12 / 4

Регистрация: 16.03.2012

Сообщений: 252

24.03.2014, 15:16

6

авто опен — это обычный макрос в каталоге макросов. Делает «создать макрос» …и т.д. Просто первая строчка в макросе «Private Sub auto_open()». Вобщем, если макрос так называется — он запусется при открытии книги.



0



40 / 40 / 9

Регистрация: 19.03.2014

Сообщений: 215

24.03.2014, 15:18

7



0



Derjzemit

269 / 14 / 0

Регистрация: 26.02.2014

Сообщений: 142

24.03.2014, 15:30

 [ТС]

8

Visual Basic
1
2
3
Private Sub Auto_Open()
ActiveWorkbook.Unprotect Password:="1234"
End Sub

Имеется в виду такой вариант? Если да, то я задаю в лист «Эта книга» его и все равно книга с нуля запускается под паролем.

Добавлено через 10 минут
Возможно я конечно не так выразился изначально, еще раз по сути, меня не интересует защита отдельных листов и структуры от редактирования и изменения (все что связано со вкладкой Рецензирование) — с этим я разобрался, меня интересует шифровании книги стандартными методами (через Сервис при сохранении), вернее снятие пароля оттуда макросом. Насколько я понимаю, книгу надо сначала расшифровать паролем, а потом все макросы и будут запускаться (в моем понимании работы экселя), по-этому и спрашиваю, можно ли как-то это обойти. Была конечно идея запускать одну книгу, которая копировала в буфер обмена пароль, открывала нужную книгу и вставляла грубо, но это некрасиво и плоско, по-этому и интересно можно ли.



0



mrf

12 / 12 / 4

Регистрация: 16.03.2012

Сообщений: 252

24.03.2014, 15:32

9

книга не запускается под поролем если он не установлен.
1. Сохраняете книгу(и все сделанные изменения) с автоматической установкой пароля (макрос вписывается в «эта книга»):

Visual Basic
1
2
Sub Workbook_BeforeClose
ActiveWorkbook.Protect Password:="1234", structure:=True, Windows:=True

2. Также у вас прописан макрос на автоматической выполнение при открытии (обычный макрось в «mudules»:

Visual Basic
1
2
3
Private Sub Auto_Open()
ActiveWorkbook.Unprotect Password:="1234"
End Sub

Т.е. Получается, что выходя из книги устанавливаетсяы пароль на защиту книги(структуры и окно). А при открытии книги выполняется макрос, которые его снимает. Т.о. если макросы отключены, то книги остается защищенной (структура окна и т.п.)



0



269 / 14 / 0

Регистрация: 26.02.2014

Сообщений: 142

24.03.2014, 15:40

 [ТС]

10

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



0



mrf

12 / 12 / 4

Регистрация: 16.03.2012

Сообщений: 252

24.03.2014, 15:44

11

наверное, это я не правильно понял
Тогда только макрос на форму через автоопен

Добавлено через 1 минуту

Visual Basic
1
2
3
4
5
6
Sheets("1").Select
    With UserForm1
    
         .Show
         
         If .txtPwd.Text <> "1234" Then Exit Sub



0



Защита структуры книги при открытии

kadig

Дата: Среда, 07.07.2021, 02:57 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 26


Репутация:

0

±

Замечаний:
0% ±


Здравствуйте. Вопрос общего характера. Необходимо, чтобы при открытии файла, ставилась защита на структуру книги с паролем и листов с паролем. Проблема в защите структуры книги — дает снять защиту книги без ввода пароля. В разделе «ЭтаКнига»
[vba]

Код

Sub Book()
Const MyPassword = «123»

With ThisWorkbook
.Protect Structure:=True, Windows:=False
.Protect Password:=MyPassword
End With
End Sub

Private Sub Workbook_Open()
Const MyPassword = «123» ‘ Указываем пароль на листы

          With Sheets(«U») ‘Указываем наименование листа
.Unprotect Password:=MyPassword
.EnableOutlining = True
.Protect Password:=MyPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
AllowFiltering:=True, UserInterfaceOnly:=True
    End With

         With Sheets(«L») ‘Указываем наименование листа
.Unprotect Password:=MyPassword
.EnableOutlining = True
.Protect Password:=MyPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
AllowFiltering:=True, UserInterfaceOnly:=True
    End With

End Sub

[/vba]

К сообщению приложен файл:

9811716.xlsm
(15.8 Kb)

Сообщение отредактировал kadigСреда, 07.07.2021, 09:27

 

Ответить

китин

Дата: Среда, 07.07.2021, 07:40 |
Сообщение № 2

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

Замечаний:
0% ±


Excel 2007;2010;2016

kadig, — Прочитайте Правила форума
— Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

 

Ответить

Pelena

Дата: Среда, 07.07.2021, 10:36 |
Сообщение № 3

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

kadig,

чтобы при открытии файла, ставилась защита на структуру книги с паролем

надо эту защиту тоже прописать в макросе Workbook_Open
[vba]

Код

Private Sub Workbook_Open()
Const MyPassword = «123» ‘ Указываем пароль на листы
ThisWorkbook.Protect Password:=MyPassword, Structure:=True, Windows:=False

[/vba]и дальше по тексту


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

kadig

Дата: Среда, 07.07.2021, 10:49 |
Сообщение № 4

Группа: Пользователи

Ранг: Новичок

Сообщений: 26


Репутация:

0

±

Замечаний:
0% ±


Pelena, Спасибо большое.

 

Ответить

Like this post? Please share to your friends:
  • Защита книги в excel убрать
  • Защита документов word pdf
  • Защита книги excel только чтение
  • Защита документов ms word 2007
  • Защита книги excel от редактирования