Soukromé a veřejné postupy VBA (Subs & Functions)

Tento tutoriál vysvětlí rozdíl mezi veřejnými a soukromými deklaracemi ve VBA a jak zadat moduly jako soukromé.

Veřejné vs. soukromé dílčí postupy

Procedury (dílčí a funkce) lze ve VBA deklarovat jako soukromé nebo veřejné. Pokud jsou veřejné, znamená to, že je můžete vidět z okna makra aplikace Excel a lze je volat odkudkoli z vašeho projektu VBA. Pokud jsou soukromé, nelze je zobrazit v okně makra aplikace Excel a lze je použít pouze v rámci modulu, ve kterém jsou deklarovány (pomocí běžných metod najdete způsoby přístupu k soukromým procedurám z jiných modulů) .

Veřejné funkce lze volat jako vestavěné funkce Excelu v listu Excelu.

Poznámka: Proměnné a konstanty mohou být také veřejné nebo soukromé.

Okno makra aplikace Excel

Ve výchozím nastavení jsou makra aplikace Excel (většina procedur VBA) viditelná pro uživatele sešitu v okně Makro:

Ty jsou brány v úvahu Veřejnost postupy. Postupy můžete explicitně definovat jako veřejné přidáním „Veřejné“ před příkaz Sub:

123 Public Sub HelloWorld ()MsgBox „Hello World“End Sub

Pokud nedefinujete postup jako Veřejný, bude považován za Veřejný.

Chcete -li deklarovat proceduru jako soukromou, jednoduše přidejte „Soukromé“ před dílčí příkaz procedury:

123 Private Sub HelloEveryone ()MsgBox „Ahoj všichni“End Sub

Druhý postup by nebyl viditelný v okně Makro uživatelům aplikace Excel, ale stále jej lze použít v kódu VBA.

Postupy s argumenty

Dílčí procedury mohou mít argumenty. Argumenty jsou vstupy do dílčí procedury:

123 Sub Hello (strName jako řetězec)MsgBox „Dobrý den“ & strNameEnd Sub

Pokud má dílčí procedura argumenty, nikdy se nezobrazí v okně Makro bez ohledu na to, zda je deklarována jako veřejná, protože neexistuje způsob, jak argumenty deklarovat.

Funkce se také nikdy nezobrazí v okně Makro, bez ohledu na to, zda jsou prohlášeny za veřejné.

Veřejné funkce v Excelu lze použít přímo v listu jako „uživatelem definovanou funkci“ (UDF). Toto je v podstatě vlastní vzorec, který lze volat přímo v listu. Lze je nalézt v kategorii „Definováno uživatelem“ v okně „Vložit funkci“ nebo je lze zadat přímo do buňky.

Programování VBA | Generátor kódu pracuje pro vás!

Použití procedur mezi moduly ve vašem projektu VBA

Veřejné postupy lze volat z jakéhokoli modulu nebo formuláře v rámci vašeho projektu VBA.

Pokus o volání soukromé procedury z jiného modulu bude mít za následek chybu (Poznámka: obejít se můžete v dolní části tohoto článku).

Poznámka: Veřejné postupy a proměnné v modulech třídy se chovají mírně odlišně a jsou mimo rozsah tohoto článku.

Různé moduly mohou ukládat procedury se stejným názvem za předpokladu, že jsou oba soukromé.

Pokud mají dva nebo více postupů stejný název a jsou prohlášeny za veřejné, při spuštění kódu se zobrazí chyba kompilace „Zjištěno nejednoznačné jméno“.

Soukromé moduly

Ve výchozím nastavení jsou moduly veřejné.

Aby byl modul soukromý, umístíte následující klíčové slovo do horní části modulu.

1 Volitelný soukromý modul

Pokud modul deklarujete jako soukromý, pak všechny procedury v modulu nebudou pro uživatele Excelu viditelné. Procedury funkcí se nezobrazí v okně Vložit funkci, ale lze je stále použít v listu aplikace Excel, pokud uživatel zná název funkce!

Dílčí postupy se nezobrazí v okně Makro, ale budou stále k dispozici pro použití v rámci projektu VBA.

Přístup k soukromé proceduře z jiného modulu

Jak bylo uvedeno výše, soukromé procedury jsou v jiných modulech kódu nedostupné „normálními“ metodami. K soukromým procedurám však můžete přistupovat pomocí Spusťte aplikaci příkaz dostupný ve VBA.

Zvažte následující 3 moduly.

Modul 2 je a Soukromý Modul s a Veřejnost Dílčí postup, zatímco Module3 je Veřejnost modul s a Soukromý Dílčí postup.

V Module1 můžeme nazvat Hello World - Volitelný soukromý modul nahoře nám nebrání zavolat dílčí proceduru - vše, k čemu slouží, je skrytí dílčí procedury v okně makra.

Rovněž nepotřebujeme příkaz Call - je tam proto, aby byl kód čitelnější.

Kód by také mohl vypadat takto níže:

1234 Sub CallHelloFromPrivate ()'zavolejte sub ze soukromého moduluAhoj světeEnd Sub

Můžeme také spustit dílčí proceduru HelloWorld pomocí VBA Spusťte aplikaci příkaz.

V modulu 3 však byla procedura GoodMorningWorld prohlášena za soukromou. Nelze jej volat z jiného modulu pomocí „normálních“ prostředků, tj. Příkazu Call.

Musíte použít Application.RunCommand spustit Private Sub z jiného modulu.

1234 Sub CallDobré ráno ()'spusťte soukromý sub z veřejného moduluApplication.Run („GoodMorningWorld“)End Sub

Všimněte si, když používáte Application.RunCommand musíte do obrácených čárek vložit název dílčí procedury.

Pokud se pokusíme použít příkaz Call ke spuštění dílčí procedury GoodMorningWorld, dojde k chybě.

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave