Organizarea generala a unei proceduri de tip Sub este
[Private | Public] [Static] Sub name ([arglist])
[instructiuni]
[Exit Sub]
[instructiuni]
End Sub
Public, Private, Static — determina vizibilitatea procedurii. Public = vizibila pentru toate procedurile si toate module 333b18d le (în functie de Option Private se defineste vizibilitatea pentru alte proiecte). Private = vizibila doar pentru procedurile din modulul unde procedura este declarata. Static = arata ca toate variabilele locale îsi pastreaza valorile între apeluri.
name — numele procedurii.
arglist — lista de argumente, separate prin virgule.
Prin instructiunea Exit Sub se poate iesi din procedura si altminteri decât prin linia finala.
Argumentele se definesc dupa sintaxa:
[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]
Optional — arata ca parametrul nu este obligatoriu. Parametrii optionali trebuie sa fie grupati la sfârsitul listei (aparitia clauzei Optional cere ca toti parametrii care urmeaza sa aiba aceeasi clauza).
ByVal — arata ca apelul paramatrului se face prin valoare (orice modificare a valorii transmise nu este regasita dupa parasirea procedurii, calculele efectuându-se pe o copie a parametrului).
ByRef — arata ca apelul paramatrului se face prin referinta (orice modificare a valorii transmise este regasita dupa parasirea procedurii). Acesta este modul implicit de transmitere a parametrilor.
ParamArray — folosit doar ca ultim argument în lista, denota un tablou Optional de elemente de tip Variant. Clauza ParamArray permite definirea unui numar arbitrar de parametri. ParamArray nu poate fi utilizat împreuna cu ByVal, ByRef, sau Optional.
varname — numele argumentului. Daca este tablou se vor indica parantezele.
type — tipul parametrului transmis: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal, Date, String (doar lungime variabila), Object, Variant. Pentru parametrii obligatorii (fara Optional) poate fi si un tip definit sau de obiect.
defaultvalue — defineste valoarea implicita pentru argumentele optionale. Poate fi orice expresie, dar pentru tipul Object se admite doar Nothing.
Pentru a executa o procedura de tip Sub din alta procedura (vezi si discutia privind vizibilitatea) se mentioneaza, pe o linie separata, numele procedurii urmat sau nu de parametri. Daca este necesar, datorita apelarii unui alt proiect sau modul, atunci apelul este dupa modelul:
Nume_proiect.Nume_modul.Nume_procedura lista de argumente
unde lista de argumente poate sau nu sa fie inclusa între paranteze. Argumentele efective sunt separate în lista prin virgule si trebuie sa respecte ordinea (si tipul) argumentelor din definitia procedurii. În cazul procedurilor cu multe argumente, dintre care multe optionale, transferul poate provoca erori de scriere a codului (un argument optional necesita totusi virgula sa, de unde o numarare atenta a virgulelor etc.). Pentru asemenea situatii (în special) se permite si transferul valorilor prin intermediul tehnicii de argumente denumite. Aceasta se realizeaza alcatuind lista de argumente, la apelul procedurii, din intrari de forma
nume_argument:=valoare_argument
separate prin virgule si la care nu mai conteaza ordinea initiala a argumentelor. Se vor specifica doar parametrii care se transmit efectiv (adica valorile optionale dorite si toate valorile neoptionale).
Pentru apelul unei proceduri se va studia si instructiunea Call.
|