Убедитесь, что общедоступные методы VBA не отображаются в списке макросов Excel
В Excel VBA (2003) я заметил, что любой метод Публичный или Друг Sub в модуле или этой книге, Нет аргументов, которые будут отображаться как макрос, который может быть запущен пользователем. То есть когда пользователь переходит в Инструменты → Макро → Макросы... (или Alt + F8), метод появится в списке, который можно запустить.
Для удобства (организация, обслуживание и т.д.) мне нужно разделить код на модули. Я надеюсь найти не-хакерский способ скрыть некоторые методы от пользователя, но все же позволить им быть видимыми для других модулей кода. Обратите внимание, что весь код содержится в одном приложении, поэтому внешний код не вызывается.
В моей текущей работе используется Функция, которая возвращает логическое значение вместо Sub s и просто игнорирует возвращаемое значение. eJames предложил вариант использования необязательного аргумента в Sub, который также скроет метод из списка макросов.
Ни один из них не чувствует себя совершенно правильно, поэтому любые советы о том, как структурировать нетривиальное приложение Excel VBA, будут высоко оценены.
Ответы
Ответ 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 больше не будет работать как целевая привязка клавиш.
Повторно: если у вас есть привязка клавиш для установки сочетания клавиш для запуска макроса. Макрос не может быть скрыт. В противном случае привязка клавиш не будет работать.