Частные функции можно использовать на листе - PullRequest
1 голос
/ 19 февраля 2012

Я обнаружил, что частные функции все еще доступны на листе. Они скрыты, но если пользователь введет свое имя, они будут вызваны. Зачем? Это должно работать так? Есть ли способ полностью заблокировать пользовательские функции от использования вне проекта VBA? Я пытался объявить функции с ключевым словом Private или поместить Option Private Module в верхней части моего модуля. Заранее спасибо.

1 Ответ

3 голосов
/ 19 февраля 2012

Опция Private Module, просто скрывает UDF от мастера функций. Эта опция позволяет скрыть модули от внешних пользователей и облегчает просмотр ваших открытых вызовов функций. Вы все еще можете использовать их на рабочем листе, если знаете имя функции. Вот как это работает.

Однако, если вы попытаетесь использовать эту Закрытую функцию из любого другого места, например, из события Worksheet_Change, вы не сможете этого сделать. И если они объявлены как «Public» с «Option Private Module», то к ним можно получить доступ.

С MSDN :

Когда модуль содержит Option Private Module, открытые части, например, переменные, объекты и определяемые пользователем типы, объявленные на уровне модуля, все еще доступны в проекте, содержащем модуль, но они не доступны для других приложений. или проекты.

По вашему вопросу

Есть ли способ полностью заблокировать использование пользовательских функций вне проекта VBA?

Есть два способа, которыми я могу придумать

1) Защита вашего проекта VBA, чтобы пользователь не знал названия функции.

2) Создание надстройки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...