Componentele unei funcții

Pentru a crea o funcție, se folosește comanda Function. Acest lucru este asemănător cu crearea unei proceduri - Sub: se tastează Function urmat de numele care se dă funcției.

Sintaxa pentru instrucțiunea Function este:

[Public | Private] [Static] Function nume_functie [(lista_de_argumente)] [As tip] [instructiuni]
    [nume_functie = expresie]
 [Exit Function]
    [instructiuni]
    [nume_functie = expresie]
End Function

Această sintaxă, în care unele părți sunt opționale, este compusă din:

  • Public este un cuvânt cheie opțional care se folosește pentru a declara funcția publică – accesibilă altor proceduri din toate modulele încărcate. (Dacă funcția este necesară doar la proiectul care o conține, se poate înlocui disponibilitatea publică, introducând o declarație Option Private Module în modulul care conține funcția.)
  • Private este un cuvânt cheie opțional care se folosește pentru a face ca funcția să fie accesibilă doar procedurilor din modulul în care se află. Funcția este ascunsă / nu poate fi accesată de procedurile din alte module.
  • Static este un cuvânt cheie opțional care se folosește pentru a face ca variabilele locale din funcție să își păstreze valoarea între apelurile către funcție.
  • nume_functie este obligatoriu. Este numele funcției care poate fi apelat oriunde în proiect pentru a fi executată. Numele date funcțiilor urmează aceleași reguli ca și alte elemente VBA, de exemplu ca și regulile de denumire a variabilelor: pot fi folosite caractere alfanumerice și underscore, dar fără spații, simboluri sau semne de punctuație. O funcție transmite datele înapoi la orice procedură numită (executată) funcției.

Transmite datele înapoi prin atribuirea unei valori numelui ei (funcției). Dacă numele funcției este AdaugTVA, după ce se fac calcule pentru a adăuga taxa, rezultatul se alocă numelui funcției:

Function AddStateTax(SubTotal)
  AdaugTVA = SubTotal * 1.09 'se fac calcule matematice si rezultatul se atribuie 
      'numelui functiei pentru a fi returnat
End Function
  • Apoi codul dinafara funcției apelează funcția și poate folosi informația returnată de funcție.
  • Lista_argumente este un argument opțional care furnizează lista de variabile care reprezintă argumente transmise funcției atunci când este invocată. Lista_argumente are sintaxa următoare:
[Optional] [ByRef | ByVal] [ParamArray] variable_name[( )] [As type]
[= default_value]

Iată o descriere a elementelor din lista_argumente:

  • Optional este un cuvânt cheie opțional care se poate folosi pentru a indica faptul că un argument este opțional – altfel zis, că nu este obligatoriu. După ce se folosește cuvântul Optional pentru a declara un argument opțional, toate argumentele ulterioare din lista_argumente trebuie să fie, de asemenea, opționale. Aceasta înseamnă că toate argumentele obligatorii trebuie puse înainte de argumentele opționale, la fel cum face VBA cu listele de argumente ale funcțiilor sale integrate. De asemenea, este o idee bună ca argumentelor opționale să li se atribuie o valoare implicită.
  • ByRef este un cuvânt cheie opțional care poate fi folosit pentru a specifica că un argument este transmis prin referință (passed by reference); ByVal este un cuvânt cheie opțional care se poate folosi pentru a specifica că un argument este transmis prin valoare (by value). Un argument poate fi transmis fie prin referință, fie prin valoare.
  • ParamArray este un cuvânt cheie opțional care poate fi folosit ca ultim argument în lista_argumente pentru a indica un șir opțional de variabile tip Variant. Nu se poate folosi ParamArray împreună cu ByVal, ByRef, sau Optional.

Către o funcție se poate transmite fie adresa unei valori, fie o copie a valorii actuale

Când o procedură (o funcție sau o subrutină) transmite un argument unei funcții prin referință, procedura destinatarului primește accesul la locația de memorie reală unde este stocată variabila inițială și poate modifica astfel valoarea reținută în variabila inițială. În schimb, atunci când un argument este trecut prin valoare, funcția primește doar o copie a informațiilor din variabilă și, prin urmare, nu poate modifica valoarea reținută în variabila inițială (procedura destinatar nu știe care este locația variabilei originale). Modalitatea implicită de a transmite un argument este prin referință și rareori sunt motive de a-l transmite prin valoare, deci de obicei se folosește transmiterea implicită.

    • variable_name este numele variabilei care va fi folosită pentru acest argument. Când funcția este apelată și este furnizată o valoare pentru acest argument, această variabilă poate fi utilizată în cod.
    • type este un cuvânt cheie opțional care furnizează tipul de dată al argumentului (Byte, Boolean, Currency, Date, Decimal, Double, Integer, Long, Object, Single, String de lungime variabilă sau Variant). Pentru argumente obligatorii, se poate specifica, de asemenea, un tip de obiect (de exemplu, un obiect de lucru) sau un obiect personalizat (unul care a fost creat).
    • default_value este constantă literală opțională (valoarea exprimată în sine, se exemplu "Sibiu"), sau o expresie constantă folosită pentru a specifica o valoare implicită pentru parametri opționali. Mai jos este descrisă metoda de furnizare a unei valori implicite.
  • type este un argument opțional care specifică tipul de dată al valorii întoarse de funcție: Byte, Boolean, Currency, Date, Decimal, Double, Integer, Long, Object, Single, String de lungime variabilă, Variant sau un tip particularizat.
  • instructiuni (statements) reprezintă instrucțiuni sau instrucțiunile din funcție (codul care se execută în funcție). Teoretic, instructiunile sunt opționale, dar în practică, majoritatea funcțiilor folosesc cel puțin o instrucțiune.
  • expresie reprezintă valoarea returnată de funcție. expresia este opțională.