VBA Privát vs Nyilvános Eljárások (Előfizetések és Funkciók)

Ez az oktatóanyag elmagyarázza a különbséget a VBA nyilvános és magán deklarációi között, valamint a modulok privátként való megadásának módját.

Nyilvános és privát részeljárások

Az eljárások (al- és funkciók) a VBA -ban privátnak vagy nyilvánosnak nyilváníthatók. Ha nyilvánosak, ez azt jelenti, hogy az Excel makróablakából láthatja őket, és bárhonnan meghívható a VBA -projekten belül. Ha magántulajdonúak, akkor nem láthatók az Excel makróablakában, és csak abban a modulban használhatók, amelyben deklarálták őket (normál módszerekkel, lásd a cikk alján, hogyan lehet más modulokból privát eljárásokat elérni) .

A nyilvános függvények az Excel munkalap beépített Excel függvényeihez hasonlóan hívhatók.

Jegyzet: A változók és az állandók lehetnek nyilvánosak vagy magánjellegűek is.

Excel makró ablak

Alapértelmezés szerint az Excel makrók (a legtöbb VBA eljárás) a munkafüzet felhasználói számára láthatók a makróablakban:

Ezeket figyelembe veszik Nyilvános eljárásokat. Kifejezetten nyilvánosként határozhatja meg az eljárásokat, ha a Sub utasítás elé írja a „Public” -t:

123 Nyilvános alvilág HelloWorld ()MsgBox "Hello World"End Sub

Ha nem határozza meg az eljárást nyilvánosként, akkor azt nyilvánosnak kell tekinteni.

Az eljárás magánjellegűvé nyilvánításához egyszerűen adja hozzá a „Privát” kifejezést az eljárás alnyilatkozata előtt:

123 Private Hello HelloEveryone ()MsgBox "Hello mindenkinek"End Sub

A második eljárás nem lenne látható a Macro ablakban az Excel felhasználók számára, de továbbra is használható a VBA -kódban.

Eljárások érvekkel

Az alfolyamatoknak lehetnek érveik. Az érvek bemenetek az alfolyamatba:

123 Sub Hello (strName mint karakterlánc)MsgBox "Hello" & strNameEnd Sub

Ha egy alfolyamatnak vannak érvei, akkor soha nem fog megjelenni a makróablakban, függetlenül attól, hogy nyilvános -e, mert nincs mód az érvek deklarálására.

A funkciók soha nem fognak megjelenni a makróablakban, függetlenül attól, hogy nyilvánosnak nyilvánítják -e őket.

Az Excel nyilvános függvényei közvetlenül használhatók a munkalapon „Felhasználó által definiált függvényként” (UDF). Ez alapvetően egy egyéni képlet, amely közvetlenül meghívható a munkalapon. Ezek megtalálhatók a „Funkció beszúrása ablak” „Felhasználó által meghatározott” kategóriájában, vagy közvetlenül beírhatók egy cellába.

VBA programozás | A kódgenerátor működik az Ön számára!

A modulok közötti eljárások használata a VBA projektben

A nyilvános eljárásokat a VBA -projekt bármely moduljáról vagy űrlapjáról meg lehet hívni.

Ha egy privát eljárást egy másik modulból próbál meghívni, az hibát eredményez (Megjegyzés: lásd a cikk alján található megoldást).

Jegyzet: Az osztálymodulok nyilvános eljárásai és változói kissé eltérően viselkednek, és nem tartoznak a cikk hatálya alá.

Különböző modulok tárolhatják az azonos nevű eljárásokat, feltéve, hogy mindkettő privát.

Ha két vagy több eljárás azonos névvel rendelkezik, és nyilvánossá nyilvánítják őket, akkor a „Félreérthető név észlelve” fordítási hibát kap a kód futtatásakor.

Privát modulok

Alapértelmezés szerint a modulok nyilvánosak.

A modul privátivá tételéhez helyezze a következő kulcsszót a modul tetejére.

1 Opció Privát modul

Ha egy modult magánjellegűnek nyilvánít, akkor a modulban lévő eljárások nem lesznek láthatók az Excel felhasználók számára. A függvényeljárások nem jelennek meg a Funkció beszúrása ablakban, de továbbra is használhatók az Excel lapon, amennyiben a felhasználó ismeri a funkció nevét!

Az alfolyamatok nem jelennek meg a makróablakban, de továbbra is rendelkezésre állnak a VBA projekten belül.

Privát eljárás elérése egy másik modulból

Amint fentebb említettük, a privát eljárások más kódmodulokban nem érhetők el „normál” módszerekkel. A privát eljárásokhoz azonban hozzáférhet a Alkalmazás. Futtatás parancs elérhető a VBA -ban.

Tekintsük a következő 3 modult.

A 2. modul a Magán Modul a Nyilvános Al eljárás, míg a 3. modul az Nyilvános modul a Magán Részeljárás.

A 1. modulban hívhatjuk a Hello World -t Opció Privát modul a tetején nem akadályozza meg, hogy meghívjuk az alrendszert - mindössze annyit kell tennie, hogy elrejti az aleljárást a makróablakban.

Nincs szükségünk a hívásnyilatkozatra sem - azért van, hogy megkönnyítse a kód olvasását.

A kód a következőképpen is nézhet ki:

1234 Sub CallHelloFromPrivate ()'hívjon egy almodult egy privát modulbólHelló VilágEnd Sub

A HelloWorld alfolyamatot is futtathatjuk a VBA használatával Alkalmazás. Futtatás parancs.

A 3. modulban azonban a GoodMorningWorld eljárást privátnak nyilvánították. Nem hívhatja másik modulból a „normál” eszközzel, azaz a Call utasítással.

Használnia kell Application.RunCommand egy privát alfuttatáshoz egy másik modulból.

1234 Sub CallGoodMorning ()'fuss egy privát alprogramot egy nyilvános modulbólApplication.Run ("GoodMorningWorld")End Sub

Vegye figyelembe, amikor használja a Application.RunCommand parancsot, akkor az alfolyamat nevét fordított vesszőbe kell írnia.

Ha megpróbáljuk használni a Hívás utasítást a GoodMorningWorld alfolyamat futtatásához, akkor hiba lép fel.

Segít a fejlesztés a helyszínen, megosztva az oldalt a barátaiddal

wave wave wave wave wave