Care este diferența dintre Sub și Private Sub în Excel VBA?


Cel mai bun răspuns

Subprogramele au o gamă de vizibilitate. În VBA, un Sub public poate fi accesat ( numit ) din orice modul de cod. Un Sub privat poate fi apelat numai din modulul în care se află.

Acest concept este denumit Domeniu de aplicare. Obiectele și variabilele au, de asemenea, domeniu .

Există o scurtă prezentare aici: Înțelegerea domeniului de aplicare și a vizibilității

Facem un sub privat când știm că nimic din afara modulului curent nu ar trebui să vreodată să facă ceea ce este conceput pentru acest cod; construim ceva specific sarcinii și contextului. Pe de altă parte, ar trebui să ne gândim bine când facem un Sub Public.

Când scrieți VBA pentru alți utilizatori decât dvs., probabil că nu doriți ca aceștia să vă apeleze codul direct. Orice Sub Public, cu condiția să nu aibă parametri, este vizibil în lista „Macro” a utilizatorilor. (Alt-F8)

Ascunderea de subiecte publice de la utilizator (ar trebui) să aibă de obicei grijă de sine; atunci când apelați un Sub într-un alt modul, trebuie, în general, să-i spuneți ce trebuie să știe, trimițându-i parametrii adecvați, iar Sub Publics cu parametri nu apar în lista utilizatorului.

Dar uneori este la îndemână să ai un utilitar Sub care poate fi apelat de oriunde și nu necesită parametri; spuneți dintr-un buton dintr-o foaie de lucru care apelează codul de pornire într-un modul public. NU doriți ca modulul dvs. de pornire să fie vizibil pentru utilizatori.

Deci, dați sub-parametrului un parametru pe care nu îl utilizați niciodată. Mai bine, dați-i un parametru de care nu nu aveți nevoie de menționat. Consultați parametrul opțional din al treilea sub mai jos.

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

Utilizatorul poate vedea și apela sub Vizibil . Numai codul din același modul poate apela sub Invizibil . Tricksy poate fi apelat de oriunde și nu necesită un parametru, dar utilizatorul nu îl poate „vedea”.

Apelarea Vizibil are ca rezultat:

La depanare, puteți apela Subs din fereastra Immediate și puteți face acest lucru în orice moment când codul nu rulează deja.

Dar puteți apela Subs privat din fereastra Immediate numai atunci când ați atins un punct de întrerupere sau ați făcut o pauză undeva în modulul său gazdă. .

Răspuns

Privat și (public) Sub sunt utilizate pentru a declara domeniul de aplicare al unei rutine .

Private Sub: face ca rutina să poată fi apelată numai în același modul printr-o altă rutină.

Să presupunem că aveți un modul numit Modulul A și în cadrul acestui modul aveți două rutine numite:

  • Private Sub Hello\_World ()
  • Mesaj secundar ()

Public Sub Message()

Call Hello\_World()

End Sub

Private Sub Hello\_World()

MsgBox “Hello World”

End Sub

Rutina Mesaj numită Hello\_World . Acest lucru a fost posibil deoarece ambele rutine se aflau în același modul (Modulul A).

Să spunem că aveți Modulul B cu următoarea rutină :

Sub Message2()

Call Hello\_World()

End Sub

Aceasta va returna o eroare de compilare: „Sub sau Funcție nedefinită”.

De ce?

Deoarece apelează o rutină privată ( Hello\_World ) dintr-un alt modul. Nu este posibil.

Public Sub: rutina dvs. poate fi apelată și de alte rutine din diferite module. Toate rutinele sunt publice în mod implicit, deci nu este necesar să declarați lumea „Publică” înainte. Doar Sub este suficient.

Sub ThisIsEnough()

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *