У цьому посібнику буде пояснено різницю між публічними та приватними деклараціями у 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, станеться помилка.