Beste svaret
Underprogrammer har en rekke synligheter. I VBA kan du få tilgang til en offentlig sub ( kalt ) fra hvilken som helst kodemodul. En privat sub kan bare ringes fra modulen den ligger i.
Dette konseptet heter Omfang. Objekter og variabler har også omfang .
Det er en kort intro her: Forstå omfang og synlighet
Vi gjør en underprivat når vi vet at ingenting utenfor den nåværende modulen noensinne skal gjøre hva denne koden er designet for; vi bygger noe oppgave- og kontekstspesifikt. På den annen side bør vi tenke hardt når vi lager en Sub Public.
Når du skriver VBA for andre enn deg selv, vil du sannsynligvis ikke at de skal ringe koden din direkte. Enhver offentlig sub, forutsatt at den ikke har noen parametere, er synlig i brukerens «Makro» -liste. (Alt-F8)
Skjuling av offentlige underordninger fra brukeren (bør) pleier å ta vare på seg selv; når du ringer en Sub i en annen modul, må du generelt fortelle den hva den trenger å vite ved å sende den passende parametere, og Offentlige Subs med parametere vises ikke i brukerens liste.
Men noen ganger det er praktisk å ha et verktøy Sub som kan ringes fra hvor som helst og ikke krever parametere; si fra en knapp i et regneark som kaller oppstartskode i en offentlig modul. Du vil IKKE at oppstartsmodulen skal være synlig for brukerne.
Så gi suben din en parameter som du aldri bruker. Enda bedre, gi den en parameter som du ikke trenger å nevne. Se den valgfrie parameteren i tredje under nedenfor.
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
Brukeren kan se og ringe sub Synlig . Bare koden i samme modul kan ringe sub Usynlig . Tricky kan ringes fra hvor som helst og krever ingen parameter, men brukeren kan ikke «se» den.
Ringer Synlig resulterer i:
Når du feilsøker, kan du ringe offentlige underordnede fra det øyeblikkelige vinduet, og du kan gjøre det når som helst når koden ikke allerede kjører.
Men du kan bare ringe private underordninger fra øyeblikkelig vindu når du har nådd et bruddpunkt eller stoppet et sted i vertsmodulen. .
Svar
Privat og (Offentlig) Sub brukes til å erklære omfanget av en rutine .
Private Sub: gjør at rutinen bare kan kalles i samme modul av en annen rutine.
La oss si at du har en modul kalt Modul A og i denne modulen har du to rutiner kalt:
- Privat sub Hello\_World ()
- Undermelding ()
Public Sub Message()
Call Hello\_World()
End Sub
Private Sub Hello\_World()
MsgBox “Hello World”
End Sub
Melding rutine kalt Hello\_World . Dette var mulig fordi begge rutinene var i samme modul (modul A).
La oss si at du har Modul B med følgende rutine :
Sub Message2()
Call Hello\_World()
End Sub
Dette vil gi en kompileringsfeil: «Sub eller Funksjon ikke definert».
Hvorfor?
Fordi den ringte en privat rutine ( Hello\_World ) fra en annen modul. Ikke mulig.
Offentlig under: rutinen din kan også kalles av andre rutiner i forskjellige moduler. Alle rutiner er offentlige som standard, så det er ikke nødvendig å erklære verden «offentlig» før. Bare Sub er nok.
Sub ThisIsEnough()