Legjobb válasz
Az alprogramok láthatósági tartományban vannak. A VBA-ban egy Nyilvános alállomány elérhető ( ) bármely kódmodulból. Privát alállomást csak abból a modulból lehet meghívni, amelyben található.
Ennek a koncepciónak a neve: Scope. Az objektumok és változók hatókörrel is rendelkeznek .
Itt található egy rövid bevezető: A hatókör és a láthatóság megértése
Egy al-privátot készítünk, ha tudjuk hogy az aktuális modulon kívül semmi sem soha ne tegye azt, amire ez a kód hivatott; valami feladat- és kontextus-specifikus dolgot építünk. Másrészt alaposan át kell gondolkodnunk, amikor Sub-nyilvánosságot hozunk létre.
Amikor a VBA-t más felhasználóknak írod, nem magadnak, valószínűleg nem akarod, hogy közvetlenül hívják a kódodat. Bármely Nyilvános alállomás, feltéve, hogy nincs paramétere, látható a felhasználók „Makró” listájában. (Alt-F8)
A nyilvános előfizetők elrejtése a felhasználó elől (általában) önmagáról gondoskodik; ha egy másik modult hívsz egy Sub-be, akkor általában meg kell mondanod neki, hogy mit kell tudnia a megfelelő paraméterek megadásával, és a nyilvános Subs paraméterekkel nem jelennek meg a felhasználó listájában.
De néha hasznos, ha van egy segédprogram, amely bárhonnan meghívható és nem igényel paramétereket; mondjuk egy munkalap egyik gombjáról, amely elindítási kódot hív meg egy Nyilvános modulban. NEM akarja, hogy az indítási modul látható legyen a felhasználók számára.
Adjon meg egy olyan paramétert, amelyet soha nem használ. Még jobb, ha megadsz neki egy olyan paramétert, amelyet nem kell megemlítenie . Lásd az Opcionális paramétert az alábbi harmadik alrészben.
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
A felhasználó láthatja és hívhatja az al Látható . Csak az ugyanabban a modulban található kód hívhatja meg a sub Láthatatlan -t. A Trükkös bárhonnan meghívható és nem igényel paramétert, de a felhasználó nem „láthatja”.
Hívás Látható eredmények:
Hibakereséskor felhívhatja a nyilvános előfizetőket az Azonnali ablakból, és bármikor megteheti, amikor a kód még nem fut.
De a Közvetlen ablakból csak akkor hívhatja meg a Privát előfizetőket, ha elérte a töréspontot vagy szünetelt valahol a gazdagép moduljában. .
Válasz
A Privát és a (Nyilvános) alcsoport a rutin hatókörének deklarálására szolgál .
Private Sub: lehetővé teszi, hogy a rutint ugyanabban a modulban csak egy másik rutin hívhassa meg.
Tegyük fel, hogy van egy modulja, az úgynevezett A modul , és ezen a modulon belül két rutinja van:
- Private Sub Hello\_World ()
- alüzenet ()
Public Sub Message()
Call Hello\_World()
End Sub
Private Sub Hello\_World()
MsgBox “Hello World”
End Sub
A üzenet rutin Hello\_World . Ez azért volt lehetséges, mert mindkét rutin ugyanabban a modulban volt (A modul).
Tegyük fel, hogy van B modulod a következő rutinnal. :
Sub Message2()
Call Hello\_World()
End Sub
Ez egy fordítási hibát eredményez: „Al- vagy függvény nincs meghatározva”.
Miért?
Mivel hívott egy privát rutin ( Hello\_World ) egy másik modultól. Nem lehetséges.
Nyilvános al: a rutinodat más rutinok is meghívhatják a különböző modulokban. Alapértelmezés szerint minden rutin nyilvános, ezért nem szükséges korábban a világot „Nyilvánosnak” nyilvánítani. Csak a Sub elég.
Sub ThisIsEnough()