блокировка ручного запуска макроса пользователем

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
district
Сообщения: 56
Зарегистрирован: 13 ноя 2007, 23:03
Откуда: Москва

Уважаемые, помогите пожалуйста. Как сделать так чтобы процедура (excel) вызывалась из других модулей этой же книги, но не была видимой в списке макросов (чтобы пользователь не мог запустить макрос). Чего-то не могу ничего раскопать по теме.

Private не дает вызывать процедуру из других модулей, public же помещает название процедуры в список макросов из которого его может запустить любой пользователь даже если проект защищен. Может запретить вообще просмотр списка макросов или заблокировать как-то запуск макросов из него. В какой стороне ответ искать?
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Можно объявить макрос как функцию:

Код: Выделить всё

Function МойНевидимыйМакрос()
    Debug.Print 123
End Function
И вызывать эту функцию и кода как любой другой макрос:

Код: Выделить всё

Sub ВидимыйМакрос()
    МойНевидимыйМакрос
End Sub
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

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

А еще не видны процедуры из надстроек (XLA). Т.е. если надстройка сожержит макрос, то его будет не видно в списке макросов в любом случае.
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Пусть, например, имеется макрос Private Sub Test(). Т.е. макрос без параметров, который не виден в списке макросов.
Запустить такой макрос из другого модуля можно используя команду

Код: Выделить всё

Run "Test"
district
Сообщения: 56
Зарегистрирован: 13 ноя 2007, 23:03
Откуда: Москва

Спасибо всем большое! Вариант SAS888 в конечном итоге взял на вооружение - выглядит просто и наглядно.
Ответить