Nejlepší odpověď
Podprogramy mají rozsah viditelnosti. Ve VBA je veřejný sub přístup ( nazvaný ) přístupný z libovolného modulu kódu. Soukromý sub lze volat pouze z modulu, ve kterém je umístěn.
Tento koncept se jmenuje Rozsah. Objekty a proměnné mají také rozsah .
Zde je krátké úvodní slovo: Porozumění rozsahu a viditelnosti
Děláme sub privát, když víme že nic mimo aktuální modul by nemělo nikdy dělat to, k čemu je tento kód určen; vytváříme něco konkrétního pro daný úkol a kontext. Na druhou stranu bychom měli přemýšlet, když uděláme Sub Public.
Když píšete VBA pro jiné uživatele než pro sebe, pravděpodobně nechcete, aby volali přímo na váš kód. Jakýkoli veřejný sub, pokud nemá žádné parametry, je viditelný v seznamu uživatelů „Makro“. (Alt-F8)
Skrytí veřejných odběrů před uživatelem (mělo by se) o sebe obvykle postarat; když voláte Sub v jiném modulu, musíte mu obvykle říct, co potřebuje vědět, předáním příslušných parametrů a Public Subs s parametry se v seznamu uživatelů neobjeví.
Ale někdy je užitečné mít nástroj Sub, který lze volat odkudkoli a nevyžaduje parametry; řekněme z tlačítka v listu, které volá spouštěcí kód ve veřejném modulu. Nechcete, aby váš spouštěcí modul byl viditelný pro uživatele.
Takže dejte svému sub parametru, který nikdy nepoužíváte. Ještě lépe, dejte mu parametr, který nepotřebujete zmínit. Podívejte se na volitelný parametr ve třetím pododstavci níže.
Option Explicit
Sub Visible()
" Can call this guy from anywhere;
" from any module or directly by the user.
" Sub (on it"s own) is lazy shorthand for "Public Sub"
Invisible
End Sub
Private Sub Invisible()
" This Sub can ONLY be called from inside its module.
" It is not shown in the Macro list available to the user.
Tricksy
End Sub
Public Sub Tricksy(Optional pIgnore As Boolean = True)
" This sub can be called from anywhere.
" It does not require a parameter (pIgnore).
" BUT, because it has a parameter, it does not appear
" in the user"s list of available "macros".
MsgBox "Hi there", vbExclamation, "Greetings from Tricksy"
End Sub
Uživatel může zobrazit a volat sub Viditelné . Pouze kód ve stejném modulu může volat sub Neviditelný . Tricksy lze volat odkudkoli a nevyžaduje parametr, ale uživatel jej „nevidí“.
Volání Viditelné má za následek:
Při ladění můžete volat Public Subs z Okamžitého okna a můžete tak učinit kdykoli, když kód ještě není spuštěn.
Soukromé odběratele však můžete volat pouze z Okamžitého okna, když jste dosáhli bodu přerušení nebo se pozastavili někde v jeho hostitelském modulu .
Odpověď
Soukromý a (veřejný) sub se používají k deklaraci rozsahu rutiny .
Soukromý sub: zajišťuje, že rutinu lze v rámci stejného modulu volat pouze jinou rutinou.
Řekněme, že máte modul s názvem Modul A a v rámci tohoto modulu máte dvě volané rutiny:
- Soukromý sub Hello\_World ()
- Dílčí zpráva ()
Public Sub Message()
Call Hello\_World()
End Sub
Private Sub Hello\_World()
MsgBox “Hello World”
End Sub
Zpráva s názvem Hello\_World . To bylo možné, protože obě rutiny byly ve stejném modulu (modul A).
Řekněme, že máte modul B s následující rutinou :
Sub Message2()
Call Hello\_World()
End Sub
Vrátí chybu kompilace: „Sub nebo funkce není definována“.
Proč?
Protože volala soukromá rutina ( Hello\_World ) z jiného modulu. Není možné.
Veřejný sub: lze vaši rutinu volat i jinými rutinami v různých modulech. Všechny rutiny jsou ve výchozím nastavení veřejné, takže není nutné dříve deklarovat svět jako „veřejný“. Stačí pouze Sub.
Sub ThisIsEnough()