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

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

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

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

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

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

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

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

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

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

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

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

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