VBA Private vs Public Procedures (Subs and Functions)

Acest tutorial va explica diferența dintre declarațiile publice și private în VBA și cum să specificați modulele ca private.

Sub proceduri publice vs. private

Procedurile (sub și funcții) pot fi declarate private sau publice în VBA. Dacă sunt publice, înseamnă că le-ați putea vedea din fereastra Macro Excel și pot fi apelate de oriunde din proiectul dvs. VBA. Dacă sunt private, nu pot fi văzute în fereastra Macro Excel și sunt disponibile numai pentru a fi utilizate în modulul în care sunt declarate (folosind metode normale, consultați partea de jos a acestui articol pentru modalități de accesare a procedurilor private din alte module) .

Funcțiile publice pot fi numite ca funcțiile Excel încorporate în foaia de lucru Excel.

Notă: Variabilele și constantele pot fi, de asemenea, publice sau private.

Fereastra Macro Excel

În mod implicit, Macro-urile Excel (majoritatea procedurilor VBA) sunt vizibile pentru utilizatorii de cărți de lucru în fereastra Macro:

Acestea sunt luate în considerare Public proceduri. Puteți defini explicit procedurile ca publice adăugând „Public” înainte de declarația Sub:

123 Sub public HelloWorld ()MsgBox „Hello World”Sfârșitul Sub

Dacă nu definiți procedura ca fiind publică, aceasta va fi considerată publică.

Pentru a declara o procedură ca Privată, pur și simplu adăugați „Privat” înainte de subinstrucțiunea procedurii:

123 Sub privat HelloEveryone ()MsgBox „Bună ziua tuturor”Sfârșitul Sub

A doua procedură nu va fi vizibilă în fereastra Macro pentru utilizatorii Excel, dar poate fi utilizată în codul VBA.

Proceduri cu argumente

Subprocedurile pot avea argumente. Argumentele sunt elemente de intrare în procedura secundară:

123 Sub Hello (strName ca șir)MsgBox „Bună ziua” & strNameSfârșitul Sub

Dacă o procedură secundară are argumente, aceasta nu va apărea niciodată în fereastra Macro, indiferent dacă este declarată publică, deoarece nu există nicio modalitate de a declara argumentele.

De asemenea, funcțiile nu vor apărea niciodată în fereastra Macro, indiferent dacă sunt declarate publice.

Funcțiile publice din Excel pot fi utilizate direct într-o foaie de lucru ca „Funcție definită de utilizator” (UDF). Aceasta este practic o formulă personalizată care poate fi apelată direct într-o foaie de lucru. Acestea pot fi găsite în categoria „Definit de utilizator” din fereastra „Insert Function” sau pot fi tastate direct într-o celulă.

Programare VBA | Generatorul de coduri funcționează pentru dvs.!

Utilizarea procedurilor între module în proiectul dvs. VBA

Procedurile publice pot fi apelate din orice modul sau formular din cadrul Proiectului dvs. VBA.

Încercarea de a apela o procedură privată dintr-un alt modul va duce la o eroare (Notă: consultați partea de jos a acestui articol pentru o rezolvare).

Notă: Procedurile și variabilele publice din modulele de clasă se comportă ușor diferit și sunt în afara scopului acestui articol.

Module diferite, pot stoca proceduri cu același nume, cu condiția ca ambele să fie private.

Dacă două sau mai multe proceduri au același nume și sunt declarate publice, veți primi o eroare de compilare „Numele ambigu detectat” atunci când rulați codul.

Module private

În mod implicit, modulele sunt publice.

Pentru a face privat un modul, puneți următorul cuvânt cheie în partea de sus a modulului.

1 Opțiune Modul privat

Dacă declarați un modul ca fiind privat, atunci orice procedură din modul nu va fi vizibilă pentru utilizatorii Excel. Procedurile de funcționare nu vor apărea în fereastra Inserare funcție, dar pot fi utilizate în continuare în foaia Excel atâta timp cât utilizatorul știe numele funcției!

Subprocedurile nu vor apărea în fereastra Macro, dar vor fi disponibile pentru a fi utilizate în cadrul proiectului VBA.

Accesarea unei proceduri private dintr-un alt modul

După cum sa menționat mai sus, procedurile private sunt inaccesibile în alte module de cod prin metode „normale”. Cu toate acestea, puteți accesa proceduri private utilizând Aplicație.Run comandă disponibilă în VBA.

Luați în considerare următoarele 3 module.

Modulul 2 este un Privat Modul cu a Public Sub procedură, în timp ce modulul 3 este Public modul cu un Privat Sub procedură.

În Modulul 1, putem apela Hello World - Opțiune Modul privat în partea de sus nu ne împiedică să apelăm la procedura secundară - tot ce servește este să ascundem procedura secundară în fereastra macro.

De asemenea, nu avem nevoie de declarația de apel - este acolo pentru a face codul mai ușor de citit.

Codul ar putea arăta, de asemenea, astfel:

1234 Sub CallHelloFromPrivate ()'sunați un sub dintr-un modul privatSalut LumeSfârșitul Sub

Putem rula, de asemenea, HelloWorld Sub Procedură folosind VBA Aplicație.Run comanda.

Cu toate acestea, în modulul 3, procedura GoodMorningWorld a fost declarată privată. Nu îl puteți apela dintr-un alt modul folosind „normal” înseamnă adică declarația de apel.

Trebuie să folosești Application.RunCommand pentru a rula un sub privat dintr-un alt modul.

1234 Sub CallBoodMorning ()'rulați un sub privat dintr-un modul publicApplication.Run („GoodMorningWorld”)Sfârșitul Sub

Observați când utilizați Application.RunCommand comanda, trebuie să puneți numele subprocedurii în virgule inversate.

Dacă încercăm să folosim declarația Call pentru a rula procedura GoodMorningWorld Sub, s-ar produce o eroare.

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave