Proceduri

O procedură în VBA este numită și unitate de cod care conține o secvență de instrucțiuni care vor fi executate ca și grup. Procedurile pot fi scrise de către utilizator (subrutine sau funcții) sau poate fi folosită biblioteca de proceduri din VBA.

De exemplu, VBA conține o funcție (un tip de procedură) numită Left, care returnează partea stângă a unui șir de text specificat. De exemplu, salut este un șir de text de cinci caractere.

Instrucțiunea Left("salut", 3) returnează cele trei caractere din stânga ale șirului: sal. (Apoi acest șir de trei caractere poate fi afișat într-o casetă de mesaje sau îl poate fi folosit în cod.) Numele atribuit procedurii vă oferă o modalitate de referire la procedura din codul.

Când se scrie o macrocomandă, este scrisă o procedură proprie (spre deosebire de o procedură deja construită în VBA).

Macrocomanda din VBA trebuie să fie conținută într-o procedură (între un Sub și un End Sub) sau în cadrul unei funcții. Dacă nu, VBA nu o poate executa și apare o eroare.

(Face excepție declarația executată în fereastra Immediate, care are loc în afara unei proceduri, dar conținutul ferestrei Imediate există doar în timpul sesiunii de editare a VBA și este folosită pentru testarea codului; ea nu poate fi executată de aplicația gazdă folosind butoane, meniu sau comenzi rapide de la tastatură și nu se poate folosi la repornirea aplicației.)

Altfel zis, o macrocomandă sau codul dintre Sub și End Sub este o procedură. Procedurile sunt conținute în module, care, la rândul lor, sunt conținute în fișiere de proiect, șabloane sau alte obiecte gazdă VBA, cum ar fi formulare de utilizatori.

Există două tipuri de proceduri: funcții și subproceduri (de obicei numite doar subs).

Funcții

O funcție în VBA este una dintre cele două tipuri de proceduri. Ca și sub, o funcție este o procedură concepută pentru a îndeplini o sarcină specifică și limitată. De exemplu, funcția Left încorporată în VBA returnează partea din stânga a unui șir de text, iar funcția Right, omologul său, returnează partea din dreapta a unui șir de text. Fiecare funcție are o sarcină clară pentru care este folosită și nu face nimic altceva.

Pot fi create propriile proceduri de funcționare (în plus față de subprocedurile normale de tip macrocomandă). Ele încep cu o instrucțiune Function și se încheie cu instrucțiunea End Function.

Fiecare funcție întoarce o valoare. De exemplu, funcția Left întoarce partea din sânga șirului de caractere. Alte funcții întorc alt tip de rezultate. Unele, de exemplu, doar testează o condiție și întorc ca rezultat True atunci când condiția este îndeplinită și False în caz contrar. De reținut că funcțiile întorc ca rezultat o valoare. Subprocedurile nu întorc nimic.

Subproceduri

O subprocedură (numită și subrutină), ca și funcția, este o procedură completă destinată să realizeze o anumită sarcină, dar spre deosebire de funcție, subprocedura nu întoarce nicio valoare.

Multe sarcini nu trebuie să returneze un rezultat. De exemplu, macrocomenzile Muta_paragraf descrise anterior doar comută paragrafe într-un document. Nu este nevoie ca nici o valoare să fie returnată la VBA pentru utilizare ulterioară. Pe de altă parte, dacă procedura calculează impozitul pe vânzări, există un rezultat (valoarea impozitului), astfel încât cifra trebuie returnată prin procedura de afișare către utilizator sau poate avea alte utilizări în codul VBA.

Toate macrocomenzile înregistrate utilizând Macro Recorder sunt subproceduri.

Fiecare subprocedură începe cu o instrucțiune Sub și se termină cu o instrucțiune End Sub.

Funcțiile nu sunt afișate în caseta de dialog Macros

Doar subprocedurile apar în caseta de dialog Macros. Funcțiile scrise nu apar în această casetă de dialog.