Большинство читателей уже знают, что с помощью VBA можно создавать функции и подпрограммы. Это ничем не отличается от тезки VBA, Visual Basic. Обычно макрос отображается в списке макросов, когда вы открываете диалоговое окно «Макросы» (нажмите Alt + F8), если не выполняется одно из трех условий:

  • Макрос — это функция. Функции обычно возвращают информацию, и они требуют, чтобы информация была передана им. Поскольку запуск макроса из списка макросов не позволяет выполнить ни одно из этих действий, Excel считает, что нет необходимости перечислять его. Пользовательские функции, которые весьма полезны в Excel, не отображаются в диалоговом окне «Макросы», потому что они, в конце концов, являются функциями.

  • Макрос — это подпрограмма с параметрами. Excel предполагает, что, поскольку параметры необходимы, и вы не можете предоставить параметры, выбрав подпрограмму из списка макросов, нет необходимости перечислять ее.

  • Подпрограмма была объявлена ​​частной. Это означает, что подпрограмма полезна только для кода в модуле, в котором она объявлена.

Единственный тип макроса, указанный в диалоговом окне «Макросы», — это подпрограмма без параметров, не являющаяся частной. Однако в определенных ситуациях вам могут не понадобиться и те, что указаны в списке. Например, вы, возможно, создали несколько универсальных подпрограмм, которые не делают ничего полезного, если вызываются сами по себе; они предназначены для вызова из другого кода. Например, рассмотрим следующий макрос:

Sub MySub()

MsgBox "We are running the macro"

End Sub

Этот макрос появится в диалоговом окне Macros. Если вы не хотите, чтобы он появлялся, есть несколько решений, которые вы можете найти, и все они станут очевидными при изучении трех способов исключения макросов из списка макросов. Первое возможное решение — изучить ваш код и выяснить, действительно ли он «универсален». Вам нужен код из более чем одного модуля? Если нет, то объявите подпрограмму Private; он не появится в диалоговом окне «Макросы». Таким образом, предыдущий проблемный макрос становится следующим:

Private Sub MySub()

MsgBox "We are running the macro"

End Sub

Второй способ скрыть макрос — просто преобразовать его в функцию.

Это может показаться странным, особенно если вы не хотите возвращать какие-либо значения, но это вполне допустимо. В VBA функция не обязана возвращать значение. При отсутствии явного объявления возвращаемого значения функция вернет результат по умолчанию (например, Boolean возвращает False, String возвращает «» и т. Д.) Таким образом, проблемная процедура может быть изменена на функцию и объявлена, как показано здесь:

Function MySub() As Boolean     MsgBox "We are running the macro"

End Function

Эта процедура не отображается в диалоговом окне «Макросы» и не требует аргументов. По умолчанию он возвращает False, но этот результат можно проигнорировать. В зависимости от характера изменяемой подпрограммы вам может быть выгодно действительно разрешить преобразованной функции возвращать True или False в зависимости от успеха того, что делается в коде. В этом случае преобразованная функция является реальной функцией, а не фиктивной подпрограммой, поскольку она возвращает что-то ценное.

Третье возможное решение — использовать в подпрограмме фиктивные параметры. Вам не нужно ничего делать с ними в самой подпрограмме, но при их включении процедура не указана в списке макросов. В этом сценарии подпрограмма задачи изменяется на что-то вроде следующего:

Sub MySub(Void As Integer)

MsgBox "We are running the macro"

End Sub

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

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (3291) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:

link: / excelribbon-Hiding_Macros [Скрытие макросов].