Подтвердить что ты не робот

Убедитесь, что общедоступные методы VBA не отображаются в списке макросов Excel

В Excel VBA (2003) я заметил, что любой метод Публичный или Друг Sub в модуле или этой книге, Нет аргументов, которые будут отображаться как макрос, который может быть запущен пользователем. То есть когда пользователь переходит в Инструменты → Макро → Макросы... (или Alt + F8), метод появится в списке, который можно запустить.

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

В моей текущей работе используется Функция, которая возвращает логическое значение вместо Sub s и просто игнорирует возвращаемое значение. eJames предложил вариант использования необязательного аргумента в Sub, который также скроет метод из списка макросов.

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

4b9b3361

Ответ 1

Добавьте в верхнюю часть модуля следующее:

Option Private Module

От MSDN:

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

Ответ 2

Одним из решений является предоставление аргумента Optional.

Public Sub myPublicSub(Optional dummy_var As Integer)
    ...
End Sub

Ответ 3

Просто небольшое добавление к Jason Z answer: методы, скрытые Option Private Module, по-прежнему видны, если вы используете Application.Run() для вызова метода.

Ответ 4

Также стоит отметить побочный эффект как Option Private Module, так и добавление опциональных Params - это то, что Sub больше не будет работать как целевая привязка клавиш.

Повторно: если у вас есть привязка клавиш для установки сочетания клавиш для запуска макроса. Макрос не может быть скрыт. В противном случае привязка клавиш не будет работать.