Приватні чи публічні процедури VBA (підрозділи та функції)

У цьому посібнику буде пояснено різницю між публічними та приватними деклараціями у VBA та як визначити модулі як приватні.

Державні та приватні підпроцедури

Процедури (підрозділи та функції) можуть бути оголошені як приватними, так і відкритими у VBA. Якщо вони публічні, це означає, що ви зможете побачити їх у вікні макросу Excel, і їх можна буде викликати з будь -якої точки вашого проекту VBA. Якщо вони є приватними, їх не можна побачити у вікні макросу Excel і доступні лише для використання в модулі, в якому вони оголошені (використовуючи звичайні методи, див. Нижню частину цієї статті для способів доступу до приватних процедур з інших модулів) .

Загальнодоступні функції можна викликати як вбудовані функції Excel на аркуші Excel.

Примітка: Змінні та константи також можуть бути загальнодоступними або приватними.

Вікно макросу Excel

За замовчуванням макроси Excel (більшість процедур VBA) відображаються користувачам книги у вікні макросів:

Такі вважаються Громадські процедури. Ви можете чітко визначити процедури як загальнодоступні, додавши “Public” перед оператором Sub:

123 Публічний суб HelloWorld ()Повідомлення "Привіт, світ"End Sub

Якщо ви не визначите процедуру як загальнодоступну, вона буде вважатися публічною.

Щоб оголосити процедуру як приватну, просто додайте “приватну” перед підзаявою процедури:

123 Приватна підписка HelloEveryone ()Повідомлення "Привіт усім"End Sub

Друга процедура не відображатиметься у вікні макросу для користувачів Excel, але все одно може використовуватися у вашому коді VBA.

Процедури з аргументами

Підпроцедури можуть мати аргументи. Аргументи є вхідними даними для підпроцедури:

123 Sub Hello (strName як рядок)MsgBox "Hello" & strNameEnd Sub

Якщо підпроцедура містить аргументи, вона ніколи не з’явиться у вікні макросу, незалежно від того, чи оголошено вона як загальнодоступна, оскільки немає способу оголосити аргументи.

Функції також ніколи не відображатимуться у вікні макросу, незалежно від того, якщо вони оголошені загальнодоступними.

Загальнодоступні функції в Excel можна використовувати безпосередньо на робочому аркуші як "функцію, визначену користувачем" (UDF). В основному це спеціальна формула, яку можна викликати безпосередньо на робочому аркуші. Їх можна знайти в категорії "Визначені користувачем" у вікні "Вставити функцію" або їх можна ввести безпосередньо в клітинку.

Програмування VBA | Генератор коду працює для вас!

Використання процедур між модулями у вашому проекті VBA

Публічні процедури можна викликати з будь -якого модуля або форми у вашому проекті VBA.

Спроба викликати приватну процедуру з іншого модуля призведе до помилки (Примітка: див. Нижню частину цієї статті, щоб обійти сторону).

Примітка: Відкриті процедури та змінні в модулях класів поводяться дещо інакше і виходять за рамки цієї статті.

Різні модулі можуть зберігати процедури з однаковою назвою, за умови, що обидва вони є приватними.

Якщо дві або більше процедур мають однакове ім’я та оголошені загальнодоступними, ви отримаєте помилку компіляції «Виявлено неоднозначне ім’я» під час запуску коду.

Приватні модулі

За замовчуванням модулі є загальнодоступними.

Щоб зробити модуль приватним, ви кладете таке ключове слово у верхній частині модуля.

1 Опція Приватний модуль

Якщо ви оголосите модуль приватним, будь -які процедури в модулі не будуть видимими для користувачів Excel. Процедури функцій не відображатимуться у вікні "Вставити функцію", але їх можна використовувати на аркуші Excel, доки користувач знає назву функції!

Додаткові процедури не відображатимуться у вікні макросу, але все одно будуть доступні для використання у проекті VBA.

Доступ до приватної процедури з іншого модуля

Як згадувалося вище, приватні процедури недоступні в інших модулях коду “нормальними” методами. Однак ви можете отримати доступ до приватних процедур за допомогою Додаток.Виконати команда доступна у VBA.

Розглянемо наступні 3 модулі.

Модуль 2 - це a Приватний Модуль з Громадські Підпроцедура, тоді як Модуль3 є Громадські модуль з Приватний Підпроцедура.

У модулі 1 ми можемо назвати Hello World - Опція Приватний модуль у верхній частині не заважає нам викликати підпроцедуру - все, що їй потрібно - це приховати процедуру субпроцедури у вікні макросу.

Нам також не потрібен оператор Call - він тут, щоб полегшити читання коду.

Код також може виглядати так:

1234 Sub CallHelloFromPrivate ()'виклик сабвуфера з приватного модуляПривіт СвітEnd Sub

Ми також можемо запустити підпроцедуру HelloWorld за допомогою VBA Додаток.Виконати команду.

Однак у модулі 3 процедура GoodMorningWorld була оголошена приватною. Ви не можете викликати його з іншого модуля, використовуючи «нормальні» засоби, тобто оператор Call.

Ви повинні використовувати Application.RunCommand для запуску приватного підрозділу з іншого модуля.

1234 Sub CallGoodMorning ()'запустити приватний суб з публічного модуляApplication.Run ("GoodMorningWorld")End Sub

Зверніть увагу, коли ви використовуєте Application.RunCommand команду, ви повинні помістити назву підпроцедури в перевернуті коми.

Якщо ми спробуємо використати оператор Call для запуску підпроцедури GoodMorningWorld, станеться помилка.

Ви допоможете розвитку сайту, поділившись сторінкою з друзями

wave wave wave wave wave