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
-
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.
-
Click on the “Developer“ tab on the Ribbon and then select “Visual Basic” to launch the Visual Basic work area.
-
Open the “Tools” menu and then select the “Visual Basic Properties” option to open the “VBA Project –Project Properties” window.
-
Click the “Protection” tab and place a check in the box labeled “Lock project for viewing.”
-
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
-
Open the VBA macro that you wish to hide from a workbook user’s sight when the macro list is chosen.
-
Locate the first line of the macro beginning with the “Sub” command listing the macro name.
-
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 все-таки).
Ну или как мне составить для него описание тех шагов, которые он должен будет выполнить на своем компе, чтобы это было, скажем так, не слишком пугающе? А иначе он просто не захочит с этим заморачиваться.
Я по себе знаю, что бывает иногда довольно хлопотно запускать свои же собственные макросы на своем же собственном компе, но не том, на котором они были разработаны. Приходится заново подписывать макросы и проходить другие формальности.
Меня сейчас совершенно не интересуют какие-то хакерские штучки. Совсем наоборот. Интересует совершенно «официальное», но понятное разъяснение юзеру, как запустить книгу Экселя с чужими макросами, не снижая при этом уровень безопасности системы.
В принципе, можно, конечно, поехать к нему домой и установить все самому, но мы с ним живем на противоположных концах Москвы, встречаемся очень редко и обычно летом. Честно говоря, не хотелось бы ради всего этого нарушать установившуюся традицию
Содержание
- Скрыть макрос от пользователя в Excel, но по-прежнему звонить через кнопку?
- Отличное решение
- Скрытие листов и использование константы xlVeryHidden в макросе
- Аннотация
- Дополнительные сведения
- Скрытие листа с помощью команд меню
- Скрытие листа с помощью макроса Visual Basic
- Пример кода Visual Basic
- Как сделать макрос невидимым excel
- -100- VBA EXCEL. Как сделать список макросов невидимыми для пользователей
- Озорные Стихи
- Валерий Богданов
- Evgen Beg
- Алексей Сальников
- Evgen Beg
- Александр Качанов
- Как сделать лист очень скрытым
Скрыть макрос от пользователя в Excel, но по-прежнему звонить через кнопку?
У меня есть электронная таблица, которая будет распространена среди сотрудников; Я хочу сделать его максимально удобным для пользователя, поэтому для запуска макросов у меня есть простая кнопка, которая автоматизирует все для них. Но я не хочу, чтобы у них был доступ к запуску любого из макросов самостоятельно.
Мне это удалось, используя
Все, что Public Sub Misc_Doc() делает, это импорт данных из другой электронной таблицы и форматирование.
А затем с помощью кнопки Command, вызывающей модуль через application.run
Выполнение подобных работ; так как в нем, похоже, работает подпрограмма Run_Batch_Report просто отлично, но этот юг также вызывает другие субтитры в одном модуле для завершения задания. Эти субмастеры не будут работать БЕЗ РАЗГРУЗКИ VB в настройках разработчиков для просмотра и редактирования. Возможно ли, чтобы подпрограммой полностью (включая вызов других подсайтов внутри одного модуля), или мне пришлось бы реструктурировать мой юг, чтобы включить в него все остальные подписи, которые он вызывает?
Извините, если я сформулировал это случайно – я на самом деле посреди встречи и жонглирования этим, слушая боссов.
Изменение: Чтобы уточнить, я заблокировал VB от просмотра. Когда я запускаю скрипт, пока он все еще заблокирован, он не позволит субпользователю вызывать другие части модуля. Когда мой пароль введен для разблокировки VB для просмотра, он работает.
Предполагая, что “но я не хочу, чтобы у них был доступ к запуску каких-либо макросов самостоятельно” означает “Я не хочу, чтобы макросы были перечислены в окне” Макросы “, у вас уже есть это.
Я не могу воспроизвести ваш “макрос не запускается, если проект не разблокирован”, с использованием или без Application.Run Запустите участие, не уверен, что это значит. В любом случае, похоже, вы испытываете ложное впечатление о том, что защита паролем вашего проекта дает ему какую-либо защиту. Это не так.
Код VBA не безопасен. Защита паролем проекта VBA – это буквально шутка, это только раздражает dev (вы!) И предотвращает незнакомых пользователей, которые в любом случае не знали, что делать с VBE, от просмотра исходного кода, который они все равно не понимают – и если кто-то хочет видеть код, поверьте мне, они будут – в считанные секунды.
Если кто-то может открыть документ хоста, он может получить код VBA.
Либо пользователь может запустить макрос, либо не может. Если пользователь может нажать кнопку, чтобы вызвать код VBA, тогда у них есть разрешение на вызов этого кода VBA из любого места.
Имейте “скрытые” макросы в стандартном модуле (.bas) с дополнительным Option Private Module :
И тогда вы все равно можете присвоить этот макрос какой-либо форме, набрав имя макроса (оно не будет указано в списке, поскольку Option Private Module ):
Нажмите кнопку, чтобы увидеть, как она работает:
Формы можно отформатировать, чтобы выглядеть намного красивее, чем любая кнопка ActiveX:
Это не должно быть более сложным, чем это.
Отличное решение
Вы начинаете с VBA, поэтому я предполагаю, что вы не много играли с модульными модулями. Одна из приятных вещей в модулях классов заключается в том, что их публичные члены не могут быть вызваны как макросы, поскольку во время выполнения модули классов не существуют – это типы, а не модули. Для типа, означающего что-либо, его нужно создать, а макро-бегун этого не делает.
Поэтому поставьте “рабочий” код в модуле класса, скажем BatchReport :
Теперь в макросе, прикрепленном к кнопке (или в кнопке ActiveX Click handler), все, что вы делаете, это создать экземпляр этого объекта с ключевым словом New и вызвать его метод Run :
Здесь у меня есть привязка With блокировкой объекта. В качестве альтернативы вы могли бы объявить объектную переменную и Set ее ссылку на New экземпляр класса BatchReport :
Источник
Аннотация
В Microsoft Excel можно скрыть листы в книге, чтобы пользователь не отображал их. В книге можно скрыть лист любого типа, но всегда должен быть виден хотя бы один лист.
Дополнительные сведения
Скрытие листа с помощью команд меню
Чтобы скрыть лист, наведите указатель мыши на пункт «Лист» в меню «Формат» и нажмите кнопку «Скрыть». Чтобы отобразить лист, наведите указатель на пункт «Лист» в меню «Формат» и нажмите кнопку «Отобразить». Выберите соответствующий лист и нажмите кнопку «ОК».
Невозможно скрыть листы модулей, так как они отображаются в редакторе Visual Basic.
Скрытие листа с помощью макроса Visual Basic
Вы также можете скрыть или отобразить лист с помощью макроса Visual Basic для приложений майкрософт. При использовании кода Visual Basic можно использовать свойство xlVeryHidden, чтобы скрыть лист и не отображать его в диалоговом окне «Отобразить». При этом единственный способ снова сделать лист видимым — создать другой макрос Visual Basic.
В макросе Visual Basic используйте свойство Visible, чтобы скрыть или отобразить лист. Для свойства Visible можно задать значение True, False или xlVeryHidden. Значения True и False имеют тот же эффект, что и при использовании команд меню «Отобразить» или «Скрыть». Аргумент xlVeryHidden скрывает лист, а также не отображает диалоговое окно «Отобразить».
Пример кода Visual Basic
Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Инженеры службы поддержки Майкрософт могут помочь объяснить функциональные возможности конкретной процедуры, но они не будут изменять эти примеры, чтобы предоставить дополнительные функциональные возможности или процедуры создания в соответствии с конкретными требованиями. В следующих примерах показано, как использовать свойство Visible объекта Sheet.
В следующем примере показано, как использовать аргумент xlVeryHidden свойства Visible для скрытия листа:
Источник
Как сделать макрос невидимым excel
= Мир MS Excel/Скрыть действия макроса — Мир MS Excel
Войти через uID
Войти через uID
Модератор форума: китин, _Boroda_
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Скрыть действия макроса (Макросы/Sub)
Скрыть действия макроса
Гисер | Дата: Четверг, 03.10.2013, 18:59 | Сообщение № 1 | |
|
ПАХОМ Пользователь Сообщений: 254 |
Доброго вечера, ГУРУ Excel! Подскажите пожалуйста, как закрыть доступ пользователя к перечню макросов, отображаемых после нажатия сочетания клавиш Alt + F8? Это делается для того, чтобы пользователь мог использовать макрос только «зарегистрированными» способом С уважением, С уважением, |
Hugo Пользователь Сообщений: 23253 |
|
{quote}{login=Пахом}{date=16.11.2010 07:10}{thema=как скрыть список макросов, отображамых комадной Alt + F8?}{post}Доброго вечера, ГУРУ Excel! Подскажите пожалуйста, как закрыть доступ пользователя к перечню макросов, отображаемых после нажатия сочетания клавиш Alt + F8? Это делается для того, чтобы пользователь мог использовать макрос только «зарегистрированными» способом Private Sub УРА() С уважением, С уважением,{/post}{/quote} |
|
ПАХОМ Пользователь Сообщений: 254 |
|
ran Пользователь Сообщений: 7091 |
Но в этом случае на такую кнопку, как в примере, их не повесить! |
ПАХОМ Пользователь Сообщений: 254 |
{quote}{login=The_Prist}{date=16.11.2010 08:12}{thema=}{post}В области объявлений модуля с макросами: Все макросы в данном модуле будут недоступны по Alt+F11{/post}{/quote} что-то не получается … уважаемый The_Prist, подсобите пожалуйста … Private Sub УРА() |
ran Пользователь Сообщений: 7091 |
|
ПАХОМ Пользователь Сообщений: 254 |
{quote}{login=RAN}{date=16.11.2010 08:20}{thema=}{post}Но в этом случае на такую кнопку, как в примере, их не повесить! у меня работает … странно |
ПАХОМ Пользователь Сообщений: 254 |
{quote}{login=RAN}{date=16.11.2010 08:33}{thema=}{post}Вариант{/post}{/quote} так у Вас нет этого макроса на листе 3 |
ПАХОМ Пользователь Сообщений: 254 |
#10 16.11.2010 20:40:40 {quote}{login=The_Prist}{date=16.11.2010 08:33}{thema=}{post}Область объявлений: это перед всеми кодами. Можно до или под Option Explicit Просто вписываете эту строку: Все. Теперь ВСЕ макросы в этом модуле не видны по Alt+F11{/post}{/quote} я долго думаю … Вы же знаете С уважением, |
I just finished some VBA and I was wondering if there is a way to hide certain macros on Excel.
I need the user to run a certain macro and only that one, but it shows all the sub macros in Excel. I want to hide the unnecessary macros from the user so that way the user doesn’t accidentally click on the wrong one.
0m3r
12.2k15 gold badges33 silver badges70 bronze badges
asked Sep 18, 2017 at 20:53
2
You can also do this by placing the macros you want to hide in a separate module and using Option Private Module at the top of the module before the code. The macros will still be available to your project but will not appear in the Macros seen by the user when he clicks the Macros button.
answered Sep 18, 2017 at 20:59
3
You can either create a button in the ribbon to run the macro, or you can add «Private» before each «Sub» in the VBA editor that you don’t want the user to easily access.
answered Sep 18, 2017 at 20:57
RobbyRobby
8333 gold badges20 silver badges49 bronze badges
1
To subjectively ‘hide’ certain sub procedures (i.e. ‘macros’) from the (Alt+F8) Developer, Macros dialog use an optional non-variant parameter that means nothing.
Sub meh(Optional w As Worksheet)
Debug.Print "hello world"
End Sub
The meh
macro will not show up in the list of macros to run. If you dim the parameter as variant it will show in the list. This is likely due to a optional variant parameter being able to use the IsMissing
function. It will also not be able to be run from the VBE with F5 or stepped through with F8.
The test
sub procedure will run the code correctly.
Sub test()
meh
End Sub
Sub meh(Optional w As Worksheet)
Debug.Print "hello world"
End Sub
answered Sep 18, 2017 at 21:08
5