Hvad er forskellen mellem Sub og Private Sub i Excel VBA?


Bedste svar

Underprogrammer har en række synligheder. I VBA kan du få adgang til en offentlig sub ( kaldet ) fra ethvert kodemodul. En privat sub kan kun kaldes fra det modul, den ligger i.

Dette koncept hedder Omfang. Objekter og variabler har også rækkevidde .

Der er en kort introduktion her: Forståelse af omfang og synlighed

Vi laver en sub-privat, når vi ved at intet uden for det aktuelle modul nogensinde skal gøre, hvad denne kode er designet til; vi bygger noget opgave- og kontekstspecifikt. På den anden side skal vi tænke hårdt, når vi offentliggør en underpublikum.

Når du skriver VBA til andre end dig selv, vil du sandsynligvis ikke have dem til at ringe direkte til din kode. Enhver offentlig sub, forudsat at den ikke har nogen parametre, er synlig på brugerens “Makro” -liste. (Alt-F8)

Skjuler offentlige underordninger for brugeren (skal) normalt tage sig af sig selv; Når du ringer til en Sub i et andet modul, skal du generelt fortælle den, hvad den har brug for at vide, ved at sende den passende parametre, og Offentlige Subs med parametre vises ikke på brugerens liste.

Men nogle gange det er praktisk at have et hjælpeprogram, der kan ringes fra hvor som helst og ikke kræver parametre; sig fra en knap i et regneark, der kalder startkode i et offentligt modul. Du ønsker IKKE, at dit startmodul skal være synligt for brugerne.

Så giv din sub en parameter, som du aldrig bruger. Bedre endnu, giv det en parameter, som du ikke behøver at nævne. Se den valgfri parameter i det 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

Brugeren kan se og kalde sub Synlig . Kun kode i det samme modul kan kalde sub Usynlig . Tricky kan kaldes fra hvor som helst og kræver ikke en parameter, men brugeren kan ikke “se” den.

Opkald til Synlig resulterer i:

Ved fejlretning kan du ringe til offentlige underordninger fra det øjeblikkelige vindue, og du kan gøre det når som helst, når koden ikke allerede kører.

Men du kan kun ringe til private underordninger fra det øjeblikkelige vindue, når du har nået et brudpunkt eller har stoppet et eller andet sted i dets værtsmodul .

Svar

Privat og (Offentlig) Sub bruges til at erklære omfanget af en rutine .

Privat under: gør, at rutinen kun kan kaldes inden for det samme modul af en anden rutine.

Lad os sige, at du har et modul kaldet Modul A og inden for dette modul har du to rutiner kaldet:

  • Privat sub Hello\_World ()
  • Undermeddelelse ()

Public Sub Message()

Call Hello\_World()

End Sub

Private Sub Hello\_World()

MsgBox “Hello World”

End Sub

Besked rutine kaldet Hello\_World . Dette var muligt, fordi begge rutiner var i det samme modul (modul A).

Lad os sige, at du har Modul B med følgende rutine :

Sub Message2()

Call Hello\_World()

End Sub

Dette returnerer en kompileringsfejl: “Under eller funktion ikke defineret”.

Hvorfor?

Fordi den kaldte en privat rutine ( Hello\_World ) fra et andet modul. Ikke muligt.

Public Sub: din rutine kan også kaldes af andre rutiner i forskellige moduler. Alle rutiner er offentlige som standard, så det er ikke nødvendigt at erklære verden “offentlig” før. Bare Sub er nok.

Sub ThisIsEnough()

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *