VBA Private vs Public Procedure (Subs & Functions)

Този урок ще обясни разликата между публични и частни декларации във VBA и как да посочите модулите като частни.

Публични срещу частни подпроцедури

Процедурите (под -функции и функции) могат да бъдат обявени за частни или публични във VBA. Ако са публични, това означава, че ще можете да ги видите от макро прозореца на Excel и те могат да бъдат извикани от всяко място във вашия VBA проект. Ако са частни, те не могат да се видят в прозореца на макроса на Excel и са достъпни само за използване в рамките на модула, в който са декларирани (използвайки нормални методи, вижте долната част на тази статия за начини за достъп до частни процедури от други модули) .

Публичните функции могат да бъдат извикани като вградени функции на Excel в работния лист на Excel.

Забележка: Променливите и константите могат да бъдат публични или частни.

Макро прозорец на Excel

По подразбиране макросите на Excel (повечето процедури VBA) са видими за потребителите на работната книга в прозореца за макроси:

Те се считат Обществен процедури. Можете изрично да дефинирате процедурите като публични, като добавите „Публично“ преди инструкцията Sub:

123 Публичен под HelloWorld ()MsgBox "Здравей свят"End Sub

Ако не дефинирате процедурата като публична, тя ще се счита за публична.

За да обявите процедура като частна, просто добавете „частна“ преди подраздела на процедурата:

123 Private Sub HelloEveryone ()MsgBox "Здравейте на всички"End Sub

Втората процедура няма да бъде видима в прозореца на макроса за потребителите на Excel, но все пак може да се използва във вашия VBA код.

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

Подпроцедурите могат да имат аргументи. Аргументите са входни данни за подпроцедурата:

123 Sub Hello (strName като низ)MsgBox "Здравей" & strNameEnd Sub

Ако подпроцедурата има аргументи, тя никога няма да се появи в макро прозореца, независимо дали е обявена за публична, защото няма начин да се декларират аргументите.

Функциите също никога няма да се появят в макро прозореца, независимо дали са обявени за публични.

Публичните функции в Excel могат да се използват директно в работен лист като „Потребителска функция“ (UDF). Това е основно персонализирана формула, която може да бъде извикана директно в работен лист. Те могат да бъдат намерени в категорията „Дефинирани от потребителя“ в прозореца „Вмъкване на функция“ или могат да бъдат въведени директно в клетка.

VBA програмиране | Code Generator работи за вас!

Използване на процедури между модули във вашия VBA проект

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

Опитът за извикване на частна процедура от различен модул ще доведе до грешка (Забележка: вижте долната част на тази статия за заобикаляне).

Забележка: Публичните процедури и променливи в модулите на класа се държат малко по -различно и са извън обхвата на тази статия.

Различни модули могат да съхраняват процедури със същото име, при условие че и двата са частни.

Ако две или повече процедури имат едно и също име и са обявени за публични, ще получите грешка при компилация „Открито е двусмислено име“ при стартиране на кода.

Частни модули

По подразбиране модулите са публични.

За да направите модула частен, поставете следната ключова дума в горната част на модула.

1 Опция Частен модул

Ако декларирате модул като частен, тогава процедурите в модула няма да бъдат видими за потребителите на Excel. Процедурите за функции няма да се появят в прозореца Вмъкване на функция, но все пак могат да се използват в листа на Excel, стига потребителят да знае името на функцията!

Подпроцедурите няма да се появят в макро прозореца, но все пак ще бъдат достъпни за използване в рамките на проекта VBA.

Достъп до частна процедура от различен модул

Както бе споменато по -горе, частните процедури са недостъпни в други кодови модули чрез „нормални“ методи. Можете обаче да получите достъп до частни процедури, като използвате Application.Run команда, налична във VBA.

Помислете за следните 3 модула.

Модул 2 е a Частни Модул с a Обществен Подпроцедура, докато модул 3 е Обществен модул с a Частни Подпроцедура.

В Module1 можем да наречем Hello World - Опция Частен модул в горната част не ни пречи да извикаме подпроцедурата - всичко, което трябва да направите, е да скриете подпроцедурата в макро прозореца.

Ние също не се нуждаем от оператора Call - той е там, за да направи кода по -лесен за четене.

Кодът също може да изглежда така по -долу:

1234 Sub CallHelloFromPrivate ()'извикайте подводница от частен модулЗдравей святEnd Sub

Можем също да стартираме подпроцедурата HelloWorld, като използваме VBA Application.Run команда.

В модул 3 обаче процедурата GoodMorningWorld е обявена за частна. Не можете да го извикате от друг модул, използвайки „нормални“ средства, т.е. оператора Call.

Трябва да използвате Application.RunCommand за да стартирате Private Sub от друг модул.

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

Забележете кога използвате Application.RunCommand команда, трябва да поставите името на подпроцедурата в обърнати запетаи.

Ако се опитаме да използваме оператора Call за изпълнение на подпроцедурата GoodMorningWorld, ще възникне грешка.

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave