De cele mai multe ori procedurile şi funcţiile trebuie să schimbe informaţii cu programele care le apelează. Procedurile pot primi date de la programul apelant şi pot returna date programului apelant prin intermediul parametrilor formali ai procedurii. Parametrii formali se caracterizează prin:
parametrii formali declaraţi într-o procedură sunt cunoscuţi în întregul text al procedurii şi necunoscuţi în afară;
în cadrul procedurii parametrii formali se manifestă ca nişte variabile de tipul respectiv;
dacă lista parametrilor formali este vidă, atunci nu există schimb de informaţii cu restul programului sau acesta se realizează prin intermediul variabilelor globale.
În Visual Basic se pot defini mai multe tipuri de parametri formali:
parametri transmişi prin valoare;
parametri transmişi prin referinţă;
parametri opţionali;
listă cu număr nedefinit de parametri.
Elementele transmise ca parametru pot fi variabile sau invariabile. Pentru parametrii invariabili nu se vor propaga modificările în blocul apelant, chiar dacă se specifică transmisia prin referință. Adică, parametrii sunt preluați în procedura lansată, se pot modifica, dar acele modificări sunt vizibile doar local (în procedura lansată cu acei parametrii) și dispar odată cu încheierea procedurii. Tabelul următor prezintă elementele variabile și invariabile din Visual Basic.
Parametri transmişi prin valoare sunt parametri impliciţi pe care îi foloseşte Visual Basic. Pentru o mai bună lizibilitate a programului se poate folosi cuvântul cheie ByVal înaintea unui parametru pe care dorim să-l transmitem prin valoare. Aceşti parametri pot fi modificaţi în interiorul procedurii, dar valorile noi nu se transmit către blocul apelant, sunt doar parametri de intrare.
Parametri transmişi prin referinţă sunt precedaţi de cuvântul cheie ByRef. Aceşti parametri sunt elemente variabile. Ei pot fi modificaţi în interiorul procedurii, rezultatul răsfrângându-se și asupra variabilelor din blocul apelant. Nu sunt transmişi prin valoare, ci se transmit prin adresa lor.
O mențiune privind modul de transmisie a valorilor și performanța procedurilor: la transmiterea prin referință se copiază doar un pointer de 4 bytes către variabilă sau către începutul tabloului, structurii sau obiectului. În contrast, la transmiterea prin valoare, se copiază întreg conținutul obiectului trimis ca parametru.
Modul de tratare a tipurilor de date atunci când sunt transmise ca argumente prin referință și valoare este prezentat în următorul tabel:
Tipul de dată
Argument ByVal
Argument ByRef
Variabilă care stochează o singură valoare
Procedura nu poate schimba variabila sau oricare din membrii săi
Procedura poate schimba variabila și membrii săi
Variabilă de tip referențial (conține un pointer către o instanță de clasă, un tablou sau un pointer către o instanță de tip structură.
Procedura nu poate schimba variabila, dar poate schimba membrii instanței indicate de pointer. Pentru o variabilă tablou(array), poate fi modificată valoarea elementelor din tablou, dar nu se modifică variabila tablou, de exemplu, prin redeclarare sau atribuirea unui alt tablou.
Procedura poate schimba variabila și membrii săi.
Parametrii opţionali sunt precedaţi de cuvântul cheie Optional. Dacă vom declara un parametru opţional, atunci toţi parametri din sublista de parametri formali care urmează după acel parametru trebuie să fie declaraţi ca opţionali. Dacă vom declara un parametru ca opţional în momentul în care programul apelează procedura, nu este necesar să se transmită o valoare parametrului declarat opţional.
Există situaţii în care nu se ştie exact numărul de parametri care se transmit procedurii. Folosind cuvântul cheie ParamArray se pot transmite procedurii apelate un număr nedefinit de parametri.
Ieşirea dintr-o procedură sau funcţie
Există situaţii în care procedurile şi funcţiile îşi îndeplinesc sarcina pe care o au fără să execute toate instrucţiunile din corpul procedurii sau funcţiei respective. Pentru astfel de situaţii se pot utiliza instrucţiunile Exit Sub şi Exit Function care determină terminarea forţată a execuţiei procedurii sau funcţiei, chiar dacă nu s-a executat ultima linie de instrucţiune a acesteia.