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.