Vba excel скрыть макросы

Creating a macro in Microsoft Excel allows you to program automatic tasks into a spreadsheet or template that can contain multiple commands or functions for easy access and use. After these macros are present in the worksheet they can be changed by anyone who uses the sheet unless you protect the macros using the password system provided by Microsoft. For protection from having the macros listed, allowing for private use, you can hide the macros completely from user sight.

Password-Protected Macros

  1. Open the Excel worksheet where you wish to place the macro and then activate the Visual Basic for Applications options by turning on the Developer tab. To do so, select “Options” from the “File tab, click on “Customize Ribbon,” check the “Developer” box and click “OK” to add the tab to the Excel Ribbon.

  2. Click on the “Developer“ tab on the Ribbon and then select “Visual Basic” to launch the Visual Basic work area.

  3. Open the “Tools” menu and then select the “Visual Basic Properties” option to open the “VBA Project –Project Properties” window.

  4. Click the “Protection” tab and place a check in the box labeled “Lock project for viewing.”

  5. Input a password and confirm the password in the selected sections. Click «OK» to save the password. Now to view the macro content you must enter the password.

Hide Macros

  1. Open the VBA macro that you wish to hide from a workbook user’s sight when the macro list is chosen.

  2. Locate the first line of the macro beginning with the “Sub” command listing the macro name.

  3. Add the word “Private” at the beginning of the “Sub” line with a space between the word and the name of the macro. Save the macro and it will no longer appear on the list of macros within the workbook.

Цитата: _Boroda_ от 04.04.2013, 15:08
Только учтите, что все это (пароль на VBA) вскрывается элементарно. Просто вручную, не говоря даже о спецпрограммах-вскрывашках.
Кстати, про это в правилах форума написано: «Запрещается обсуждение способов взлома защиты программ и файлов».

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

Цитата: _Boroda_ от 04.04.2013, 15:08А надстройку можно сделать и видимой, и невидимой. По желанию.

А видимой, это как?
Я все делал по описанию из книги Уокенбаха, а в результате, когда к новой книге подключил эту надстройку (а она с несколькими листами и даже с диаграммами), ничего вообще не произошло. Как был пустой Лист1, так и остался пустой Лист1 :)

Ну, как я уже понял, для моей исходной цели это не нужно.
Одним словом, остановлюсь на том, что уже есть, а именно, что код макроса среднестатистический пользователь изменить самостоятельно не сможет, а к этому я, собственно, и стремился.

Короче говоря, давайте забудем про все эти надстройки :)

Вы мне лучше подскажите, как сделать так, чтобы для него процедура первого запуска моей книги (с макросом) прошла наиболее гладко. В смысле, чтобы поменьше всяких пугающих окон выскакивало при первом запуске. Сам-то я знаю, как макросы подписывать, так и делаю. А ему придется тоже пошагово объяснять, как это делать? И ему придется тоже проходить всю эту процедуру от начала до конца? Или можно как-то упростить, чтобы как-нибудь сразу выскочило окошко, в котором будет написано что-то вроде: «Автор — Олег. Доверять макросам, полученным из этого источника? Да/Нет».
Теоретически, есть еще вариант установить на его компе самый низкий уровень системы безопасности, но я этот вариант сразу отвергаю. Я и сам так никогда не делаю, и никому не советую.

Еще раз напомню, у меня Excel 2010, а у него 2002 или 2003 (скорее всего 2003 все-таки).

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

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

Меня сейчас совершенно не интересуют какие-то хакерские штучки. Совсем наоборот. Интересует совершенно «официальное», но понятное разъяснение юзеру, как запустить книгу Экселя с чужими макросами, не снижая при этом уровень безопасности системы.

В принципе, можно, конечно, поехать к нему домой и установить все самому, но мы с ним живем на противоположных концах Москвы, встречаемся очень редко и обычно летом. Честно говоря, не хотелось бы ради всего этого нарушать установившуюся традицию :)

Вопрос:

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

Мне это удалось, используя

Option Private Module
Public Sub Run_Batch_Report()
'The actual script that works is here, cutting it to skip to the portion that won't work'
Call Misc_Doc
MsgBox ("Report finished.")
End Sub

Все, что Public Sub Misc_Doc() делает, это импорт данных из другой электронной таблицы и форматирование.

А затем с помощью кнопки Command, вызывающей модуль через application.run

Private Sub CommandButton1_Click()
Application.Run "Batching_Module.Run_Batch_Report"
End Sub

Выполнение подобных работ; так как в нем, похоже, работает подпрограмма Run_Batch_Report просто отлично, но этот юг также вызывает другие субтитры в одном модуле для завершения задания. Эти субмастеры не будут работать БЕЗ РАЗГРУЗКИ VB в настройках разработчиков для просмотра и редактирования. Возможно ли, чтобы подпрограммой полностью (включая вызов других подсайтов внутри одного модуля), или мне пришлось бы реструктурировать мой юг, чтобы включить в него все остальные подписи, которые он вызывает?

Извините, если я сформулировал это случайно – я на самом деле посреди встречи и жонглирования этим, слушая боссов.

Изменение: Чтобы уточнить, я заблокировал VB от просмотра. Когда я запускаю скрипт, пока он все еще заблокирован, он не позволит субпользователю вызывать другие части модуля. Когда мой пароль введен для разблокировки VB для просмотра, он работает.

Лучший ответ:

Предполагая, что “но я не хочу, чтобы у них был доступ к запуску каких-либо макросов самостоятельно” означает “Я не хочу, чтобы макросы были перечислены в окне” Макросы “, у вас уже есть это.

Я не могу воспроизвести ваш “макрос не запускается, если проект не разблокирован”, с использованием или без Application.Run Запустите участие, не уверен, что это значит. В любом случае, похоже, вы испытываете ложное впечатление о том, что защита паролем вашего проекта дает ему какую-либо защиту. Это не так.

Код VBA не безопасен. Защита паролем проекта VBA – это буквально шутка, это только раздражает dev (вы!) И предотвращает незнакомых пользователей, которые в любом случае не знали, что делать с VBE, от просмотра исходного кода, который они все равно не понимают – и если кто-то хочет видеть код, поверьте мне, они будут – в считанные секунды.

Если кто-то может открыть документ хоста, он может получить код VBA.

Либо пользователь может запустить макрос, либо не может. Если пользователь может нажать кнопку, чтобы вызвать код VBA, тогда у них есть разрешение на вызов этого кода VBA из любого места.

Имейте “скрытые” макросы в стандартном модуле (.bas) с дополнительным Option Private Module:

Option Private Module
Option Explicit

Public Sub SomeHiddenMacro()
    MsgBox "Hi"
End Sub

И тогда вы все равно можете присвоить этот макрос какой-либо форме, набрав имя макроса (оно не будет указано в списке, поскольку Option Private Module):

Excel's "Assign Macro" dialog

Нажмите кнопку, чтобы увидеть, как она работает:

Message box shows up

Формы можно отформатировать, чтобы выглядеть намного красивее, чем любая кнопка ActiveX:

"Run batch report" button with gradient shading and 3D bevel

Это не должно быть более сложным, чем это.


Отличное решение

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

Поэтому поставьте “рабочий” код в модуле класса, скажем BatchReport:

Option Explicit

Public Sub Run()
    'TODO: do your thing
End Sub

Теперь в макросе, прикрепленном к кнопке (или в кнопке ActiveX Click handler), все, что вы делаете, это создать экземпляр этого объекта с ключевым словом New и вызвать его метод Run:

Option Private Module
Option Explicit

Public Sub RunBatchReport()
    With New BatchReport
        .Run
    End With
End Sub    

Здесь у меня есть привязка With блокировкой объекта. В качестве альтернативы вы могли бы объявить объектную переменную и Set ее ссылку на New экземпляр класса BatchReport:

Option Private Module
Option Explicit

Public Sub RunBatchReport()
    Dim report As BatchReport
    Set report = New BatchReport
    report.Run
End Sub    
 

Господа!  

  Два вопроса.  
1. Написала макрос обработки строк. Т.к. файл на общем доступе, подскажите, как сделать макрос не видимым (но при необходимости чтобы я могла войти и отредактировать…). Т.е. чтобы пользователи не смогли добраться и испортить, посмотреть…  

  2. Подскажите хорошую книгу по функциям, командам, короче программированию в Excel.  Нужно что-то наподобие подробного справочника. Сколько смотрю в магазинах, все не то…  

  Большое спасибо.  
С уважением, Ольга

 

Marchuk

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

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

{quote}{login=OLGAL}{date=03.02.2010 03:29}{thema=Как спрятать макрос?}{post}Господа!  

  Два вопроса.  
1. Написала макрос обработки строк. Т.к. файл на общем доступе, подскажите, как сделать макрос не видимым (но при необходимости чтобы я могла войти и отредактировать…). Т.е. чтобы пользователи не смогли добраться и испортить, посмотреть…  
{/post}{/quote}  

  поставить пароль на проект

 

slav

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

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

{quote}{login=OLGAL}{date=03.02.2010 03:29}{thema=Как спрятать макрос?}{post}Господа!  

  Два вопроса.  
1. Написала макрос обработки строк. Т.к. файл на общем доступе, подскажите, как сделать макрос не видимым (но при необходимости чтобы я могла войти и отредактировать…). Т.е. чтобы пользователи не смогли добраться и испортить, посмотреть…  
{/post}{/quote}  
добавьте в модуле с макросом в самом верху строчку  
Option Private Module    

  {quote}{login=OLGAL}{date=03.02.2010 03:29}{thema=Как спрятать макрос?}{post}  
2. Подскажите хорошую книгу по функциям, командам, короче программированию в Excel.  Нужно что-то наподобие подробного справочника. Сколько смотрю в магазинах, все не то…  

  Большое спасибо.  
С уважением, Ольга{/post}{/quote}  

http://www.planetaexcel.ru/forum.php?thread_id=8763

 

slav

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

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

1. добавьте в модуле с макросом в самом верху строчку  
Option Private Module    
2.

http://www.planetaexcel.ru/forum.php?thread_id=8763  

  P.S. сори за прерыдущий пост непонятный )

 

За ссылку на книги — большое спасибо!  

  Option Private Module — поставлю, как тогда я буду изменять?

 

ytk5kyky

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

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

Option Private Module на видимость для пользователей никак не влияет.  
совет Марчука — самое то.  
Что проект есть видно, а что в нем и поменять что — после пароля.  
Только не забывайте — пароли нестойкие, ломаются на раз, если кто захочет.

 

Sorry….    

  Как пароль то поставить на проект?  

  Ольга

 

Большое спасибо!!!!  

  С уважением, Ольга

 

slav

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

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

{quote}{login=Лузер™}{date=04.02.2010 10:24}{thema=}{post}Option Private Module на видимость для пользователей никак не влияет.  
{/post}{/quote}  

  Данная строчка скроет названия макросов по ALT+F8

 

ytk5kyky

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

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

#10

04.02.2010 11:49:43

{quote}{login=slav}{date=04.02.2010 11:37}{thema=Re: }{post}  

  Данная строчка скроет названия макросов по ALT+F8{/post}{/quote} Имелся в виду все-таки проект VBA:  
>>Т.е. чтобы пользователи не смогли добраться и испортить, посмотреть…

Bite my shiny metal ass!      

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

Понравилась статья? Поделить с друзьями:
  • Vba excel скрыть колонку
  • Vba excel скрыть кнопку на листе
  • Vba excel скрыть вкладки
  • Vba excel скрыть userform
  • Vba excel сколько листов в книге