Как спрятать макрос в 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 все-таки).

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

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

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

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

Содержание

  1. Скрыть макрос от пользователя в Excel, но по-прежнему звонить через кнопку?
  2. Отличное решение
  3. Скрытие листов и использование константы xlVeryHidden в макросе
  4. Аннотация
  5. Дополнительные сведения
  6. Скрытие листа с помощью команд меню
  7. Скрытие листа с помощью макроса Visual Basic
  8. Пример кода Visual Basic
  9. Как сделать макрос невидимым excel
  10. -100- VBA EXCEL. Как сделать список макросов невидимыми для пользователей
  11. Озорные Стихи
  12. Валерий Богданов
  13. Evgen Beg
  14. Алексей Сальников
  15. Evgen Beg
  16. Александр Качанов
  17. Как сделать лист очень скрытым

Скрыть макрос от пользователя в 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

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

нашел такой способ:

Ставишь в начале программы и . Ничего не видно

Вставляю в макрос ругается(

Мож я что то не понимаю. Как то так должно выглядеть:

Или может это не подходит для 64-битной системы, вроде бы есть различия. Или на офисе 2010 не работает?

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

нашел такой способ:

Ставишь в начале программы и . Ничего не видно

Вставляю в макрос ругается(

Мож я что то не понимаю. Как то так должно выглядеть:

Или может это не подходит для 64-битной системы, вроде бы есть различия. Или на офисе 2010 не работает? Гисер

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

нашел такой способ:

Ставишь в начале программы и . Ничего не видно

Вставляю в макрос ругается(

Мож я что то не понимаю. Как то так должно выглядеть:

Или может это не подходит для 64-битной системы, вроде бы есть различия. Или на офисе 2010 не работает? Автор — Гисер
Дата добавления — 03.10.2013 в 18:59

Источник

-100- VBA EXCEL. Как сделать список макросов невидимыми для пользователей

Просмотров: 1 322

Озорные Стихи

полезно, будем использовать.

Валерий Богданов

Круто. Не знал, что это можно так просто настроить.

Evgen Beg

Подскажи подалуйста, как вывести на печать (принтер) данные из ЛистБокса только выделеные (мультилайн)

Ещё можно процедуры на функции заменить

Здравствуйте, сперва хочу выразить благодарность за ваши интересные видео.

У меня появился вопрос. Я создал UserForm и показываю его в конце макроса с помощью команды “UserForm.show” но проблема в том что иногда UserForm выходит под файлом Excel и чтобы его выявить нужно выбрать его внизу на панели задач. Есть ли способ которые бы активировал этот UserForm так чтобы он изначально оказался над файлом Excel ?

Если такого решения нет то тогда можно ли отследить если кнопка на UserForm не была нажата в течение какого-то времени и тогда подать сигнал об этом.

Алексей Сальников

Добрый день, очень хотелось бы урок по использованию com-port из-под excel. Это очень удобно особенно для связи c arduino.

Evgen Beg

💯! 👍👌
Подскажи подалуйста, как вывести на печать (принтер) данные из ЛистБокса только выделеные (мультилайн)

Александр Качанов

Здравствуйте! Хотел бы сделать для своего проекта
Userform-заставку, которая отображалась при открытии книги. Не хотите ли сделать видео по данной теме?

Источник

Как сделать лист очень скрытым

Иногда возникают ситуации, когда надо скрыть лист со всем его содержимым от посторонних любопытных глаз. Очень часто это делается из контекстного меню листа (для счастливых обладателей 2007 Excel. Подробнее: здесь). Но при использовании данного метода необходимо защитить книгу, иначе отобразить скрытые листы сможет каждый (тем же правым щелчком мыши — Отобразить). А что делать, если книгу не надо защищать? Ведь часто необходимо оставить пользователям возможность работы со структурой книги, например, добавлять листы. Как тогда скрыть лист так, чтобы его нельзя было отобразить? Есть достаточно простой способ через редактор VBA, при этом обладать навыком программирования вообще не нужно. Итак, определились какой лист надо скрыть. Далее:

  1. заходим в редактор VBA( Alt + F11 )
  2. жмем сочетание клавиш Ctrl + R или идем в меню ViewProject Explorer (чтобы отобразить окно объектов проекта VBA)
  3. жмем F4 или через ViewProperties Window (чтобы отобразить окно свойств)
  4. в левой части окна (в Project Explorer) ищем книгу, лист в которой надо скрыть и раскрываем её папку(на скрине это VBA Project (Книга1))
  5. раскрываем папку Microsoft Excel Objects и выделяем там лист с нужным именем
  6. в Окне свойств (Properties Window) находим свойство Visible и назначаем ему значение xlSheetVeryHidden

Чтобы затем отобразить этот лист необходимо свойству Visible задать значение — xlSheetVisible. При этом для отображения листа необходимо будет обязательно зайти в редактор VBA — простым методом отобразить не получится. И книгу защищать не надо. Что нам и было необходимо.
Для большей надежности можно защитить проект VBA, чтобы не было возможности отобразить лист из VBA, не указав пароль. На функционал это не повлияет совершенно.
В том же окне VBA( Alt + F11 ):

  1. ToolsVBAProject Properties -вкладка Protection
  2. для защиты устанавливается галочка «Lock project for viewing«; для разблокировки — снимается
  3. вписывается/удаляется сам пароль в полях Password и Confirm password.

Скрыть только определенные листы активной книги можно следующим кодом:

Sub Hide_Sheets() Dim ws, aSheets aSheets = Array(«Лист1», «Списки», «Лист2») ‘через запятую перечисляем листы для скрытия(обязательно в кавычках) For Each ws In aSheets ActiveWorkbook.Sheets(ws).Visible = xlSheetVeryHidden ‘отобразить – xlSheetVisible; сделать лист просто скрытым — xlSheetHidden Next wsSh End Sub

Как использовать: Для начала надо убедиться, что разрешены макросы и при необходимости включить их: почему не работает макрос. Затем копируем код выше, из Excel переходим в редактор VBA( Alt + F11 ) —InsertModule. Вставляем туда скопированный код. Теперь код можно вызывать нажатием клавиш Alt + F8 -выделяем Hide_SheetsВыполнить (Run) .
Скрыть все листы в активной книге, кроме листа с именем «Видимый», можно следующим кодом:

Sub Hide_All_Sheets() Dim wsSh As Object For Each wsSh In ActiveWorkbook.Sheets If wsSh.Name <> «Видимый» Then wsSh.Visible = xlSheetVeryHidden ‘отобразить – xlSheetVisible; сделать лист просто скрытым — xlSheetHidden Next wsSh End Sub

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

Источник

Adblock
detector

 

ПАХОМ

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

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

Доброго вечера, ГУРУ Excel!  

  Подскажите пожалуйста, как закрыть доступ пользователя к перечню макросов, отображаемых после нажатия сочетания клавиш Alt + F8?  

  Это делается для того, чтобы пользователь мог использовать макрос только «зарегистрированными» способом :) В прилагаемом файле при нажатии кнопки выводиться сообщение. Это зарегистрированный способ :)    
А вот если вызвать это сообщение через Alt + F8 — Выполнить — не зарегистрированный :(.  

  С уважением,    

    С уважением,

 

Hugo

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

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

 

{quote}{login=Пахом}{date=16.11.2010 07:10}{thema=как скрыть список макросов, отображамых комадной Alt + F8?}{post}Доброго вечера, ГУРУ Excel!  

  Подскажите пожалуйста, как закрыть доступ пользователя к перечню макросов, отображаемых после нажатия сочетания клавиш Alt + F8?  

  Это делается для того, чтобы пользователь мог использовать макрос только «зарегистрированными» способом :) В прилагаемом файле при нажатии кнопки выводиться сообщение. Это зарегистрированный способ :)    
А вот если вызвать это сообщение через Alt + F8 — Выполнить — не зарегистрированный :(.  

  Private Sub УРА()  
MsgBox «Если Вы читаете это сообщение после нажатия Alt + F8, то Ваше решение не работает :(. В противном случае у Вас всё получилось!»  
End Sub  

    С уважением,    

    С уважением,{/post}{/quote}

 

ПАХОМ

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

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

 

ran

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

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

Но в этом случае на такую кнопку, как в примере, их не повесить!  
Надо использовать кнопку АктивХ.

 

ПАХОМ

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

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

{quote}{login=The_Prist}{date=16.11.2010 08:12}{thema=}{post}В области объявлений модуля с макросами:  
Option Private Module  

  Все макросы в данном модуле будут недоступны по Alt+F11{/post}{/quote}  

  что-то не получается … уважаемый The_Prist, подсобите пожалуйста …  
текст макроса  

  Private Sub УРА()  
  MsgBox » … текст сообщения …»  
End Sub

 

ran

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

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

 

ПАХОМ

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

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

{quote}{login=RAN}{date=16.11.2010 08:20}{thema=}{post}Но в этом случае на такую кнопку, как в примере, их не повесить!  
Надо использовать кнопку АктивХ.{/post}{/quote}  

  у меня работает … странно

 

ПАХОМ

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

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

{quote}{login=RAN}{date=16.11.2010 08:33}{thema=}{post}Вариант{/post}{/quote}  

  так у Вас нет этого макроса на листе 3 :)

 

ПАХОМ

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

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

#10

16.11.2010 20:40:40

{quote}{login=The_Prist}{date=16.11.2010 08:33}{thema=}{post}Область объявлений: это перед всеми кодами. Можно до или под Option Explicit  

  Просто вписываете эту строку:  
Option Private Module  

  Все. Теперь ВСЕ макросы в этом модуле не видны по Alt+F11{/post}{/quote}  

  я долго думаю … Вы же знаете :)    
Благодарю Вас, The_Prist.    

  С уважением,

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's user avatar

0m3r

12.2k15 gold badges33 silver badges70 bronze badges

asked Sep 18, 2017 at 20:53

DaBeau96's user avatar

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

JohnDunsmuir's user avatar

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

Robby's user avatar

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

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Как сохранить фон в word
  • Как спрятать колонки в excel
  • Как спрятать значение в ячейке excel
  • Как сохранить фильтрацию в excel
  • Как сохранить фигуры в word

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии