Убедиться, что общедоступные методы VBA не отображаются в списке макросов Excel - PullRequest
23 голосов
/ 17 ноября 2008

В Excel VBA (2003) я заметил, что любой метод Public или Friend Sub либо в модуле, либо ThisWorkbook без аргументов будет отображаться как макрос, который может запустить пользователь. То есть когда пользователь перейдет в Инструменты -> Макрос -> Макросы ... (или Alt + F8), метод отобразится в списке, который можно запустить.

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

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

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

Ответы [ 4 ]

46 голосов
/ 17 ноября 2008

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

Option Private Module

С MSDN :

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

8 голосов
/ 17 ноября 2008

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

Public Sub myPublicSub(Optional dummy_var As Integer)
    ...
End Sub
6 голосов
/ 12 декабря 2008

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

3 голосов
/ 19 января 2013

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

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

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