Sunteți pe pagina 1din 37

Proceduri Visual Basic

1. Modulele de cod Aplicatiile simple constau dintr-o singura forma, codul ntregii aplicatii aflndu-se n acea form. Pe masura ce se creeaza aplicatii mai mari i sofisticate, se adauga forme aditionale. Deoarece ntr-o forma nu se pot invoca procedurile altei forme se creeaza module de cod separate, care contin proceduri care implementeaza codul comun, acestea putand fi invocate din fiecare forma a aplicatiei. Fiecare modul de cod sau forma poate contine : Declaratii - constante, tipuri de date, variabile, declaratii de proceduri (n aceste sectiuni nu poate fi plasat cod executabil) Proceduri eveniment - proceduri Sub care sunt executate n raspuns la actiuni declanate de utilizator sau evenimente sistem. Aceste proceduri pot aparea numai n modulele form. Proceduri generale - proceduri care nu sunt asociate direct cu un eveniment. Procedurile generale ale unei forme sunt locale, nu pot fi apelate din alte module. Procedurile generale din modulele cod - care pot ti proceduri Sub sau Function - sunt genera1e, e1e putnd fi invocate din orice cod sau form.

2. Proceduri eveniment Cnd un obiect Visual Basic recunoate aparitia unui eveniment, ape1eaza automat procedura eveniment cu numele corespunzator evenimentului. Deoarece numele stabilete o asociaie ntre obiect i cod, se spune c procedurile eveniment sunt ataate formei sau controalelor. O procedura eveniment pentru un control combin numele controlului (speciticat de proprietatea Name), o liniuta de subliniere ( _) i un nume de eveniment. Spre exemplu, sa consideram un buton de comanda numit cmdGo i evenimentul Click: procedura asociat va fi cmdGo_Click.

3. Proceduri generale Procedurite generate nu sunt invocate la aparitia unui eveniment ci la apelul explicit al unei pri a codului aplicatiei. Scopul crerii acestor proceduri rezid n aceea c evenimente diferite pot solicita tratari similare. Plasarea instructiunilor necesare elimina, astfel, duplicarea. Spre exemplu, setarea culorii poate fi comuna mai multor evenimente, astfel nct plasarea unui cod corespunztor ntr-o procedur general este o idee bun.

3. Proceduri Sub O procedura Sub permite implementarea unui cod executabil. Apelul procedurii Sub este realizat de instructiunea Call, care transfera controlul programului procedurii: Call nume[(lista_argumente)] sau prin simplul apel: nume [lista_argumente]
Sintaxa unei functii este:[Static] [Private] Sub nume [(argumente)]

[bloc instructiuni] [Exit Sub] [bloc_instruciuni] End Sub O procedura Sub poate fi declarata: Static - care indica faptul c variabilele locale ale procedurii Sub trebuie salvate (prezervate) intre apeluri. Private - indica faptul ca procedura Sub este accesibila numai altor proceduri din modulul n care se afla, procedurile altor module neputand sa o acceseze.

Sub - marcheaza inceputul unei proceduri Sub. nume -. precizeaza numele procedurii. Numele procedurilor respecta regulile generale pentru identificatori. Datorita faptului ca numele Sub sunt recunoscute de toate procedurile modulelor, nume nu poate fi identic cu un alt nume global din program. argumente - reprezinta lista de variabile, reprezentand argumente, transmise procedurii Sub la apel, Daca apar mai multe variabile, acestea sunt separate prin virgule. Cu exceplia situatiilor in care sunt identificate prin cuvntul rezervat ByVal, care indica faptul ca argumentele sunt transmise prin valoare, argumentele sunt transmise prin referinta, astfel incat schimbandu-i valoarea in interiorul procedurii Sub, valoarea sa este modificata i in procedura apelanta. bloc instructiuni - grupul instructiunilor care vor fi executate la fiecare apel al procedurii. Exit Sub - permite parasirea imediata a procedurii Sub, executia programului continund cu instructiunea care urmeaza instructiunii care a apelat procedura Sub. End Sub - marcheaza sfritul procedurii Sub.

EXEMPLU DE PROCEDURA

4. Proceduri Function Asemenea unei proceduri Sub, procedurile Function pot executa o serie de instructiuni, eventual bazate pe argumentele transmise. Spre deosebire de acestea, procedurile Function returneaza o valoare. Sintaxa:[Static] [Private] Function nume_functie [(argumente)] [As tip] [bloc instructiuni] [nume functie= expresie] [Exit Function] [bloc_instructiuni] [nume functie = expresie] End Function Deoarece aspectele prezentate la procedura Sub sunt similare i pentru procedura Function, ne marginim la a evidentia faptul ca tipul specificat cu clauza As determina tipul rezultatului retumat de procedura Function. Exemplu: Function nr( ) As Integer Pentru a obine o valoare Function, asignai valoarea numelui functiei: Function Fct (...) Fct = valoare End Function

EXEMPLU FUNCTIE

4.1. Lucrul cu proceduri Pentru a crea o procedur general, activai fereastra Developer, apoi selectati icoanaVisual Basic, Insert dupa care se selecteaza mai intii un modul ,daca nu a fost creat anterior,urmata de Procedure. Antetul procedurii poate fi pur i simplu Sub sau Function, urmat de numele procedurii, spre exemplu: Sub Trasare ( ) Function Calcul ( )

5. Controlul execuiei Instructiunile care controleaza deciziile i buclele sunt numite structuri de control (control structures). Cele mai folosite structuri de control sunt: If Then Else Select Case Do For 5.1. Structuri de decizie Structurile de decizie testeaza condiia instruciunii i, in funcie de rezultatul testului, executa diferite operaii. Cele trei structuri de decizie disponibile in Visual Basic sunt: If.. .Then If... Then...Else Select Case

5.1.1. If... Then Blocurile If. . . . Then sunt folosite pentru a executa una sau mai multe instruciuni daca o condiie specificata este indeplinita. Sintaxa blocul If. . .Then permite folosirea sa atat ntr-o singura linie, cat i in mai multe linii: If conditie Then instructiune If conditie Then instructiune End If Condiia blocului If. . .Then este, de obicei, o comparaie, dar ea poate fi orice expresie evaluabila la o valoare numerica. Visual Basic interpreteaza aceasta valoare ca True sau False; o valoare numerica zero este echivalenta cu False, in timp ce o valoare numerica unu este echivalenta cu True. Exemple: If Nr > 9 Then Admis = Date () If Nr > 9 Then Admis = Date() End If

5.1.2. If... Then...Else Blocurile If. . .Then. . .Else sunt folosite pentru a defini mai multe instruciuni (blocuri de instruciuni), una (unul) dintre acestea urmand a fi executata. Sintaxa blocului If. . . Then. . .Else este urmatoarea: If conditia1 Then bloc_instructiuni1 [ElseIf conditia2 Then [bloc_instructiuni2] ] . . . [Else [bloc instructiuni n]] End If Visual Basic testeaza condiia 1; daca aceasta este evaluata la False, se testeaza conditia2, .a.m.d., pana cand se gasete o condiie adevarata. La gasirea unei condiii adevarate, Visual Basic executa blocul de instruciuni corespunzator i apoi trece la codul care urmeaza dupa End If.

Optional, se poate include un bloc de instructiuni Else, care va fi executat daca niciuna dintre condiii nu a fost evaluata la True. Exemple: If Nr > 9 Admis = Date () Else Msg = "Respins" End If If Nr > 7 Then Msg = "OK" ElseIf Nr > 5 Msg = "Slab" Else Msg = "Ko" End If

5.1.3. Select Case Structura Select Case este o altemativa la If. . . The. . .Else pentru executarea selectiva a unui bloc de instructiuni din mai multe blocuri de instructiuni. Dei efectul este similar cu cel al structurii If. . . The. . . Else, codul implementat cu Select Case este mai eficient i lizibil. Exemplu: Select Case Case 0 Msg = "Nul" Case 1 Msg = "Impar" Case 2 Msg = "Par" Case Else Msg = "Out of range" End Select

5.2.1. Do...Loop Do. . . Loop este folosita pentru a repeta un bloc de instructiuni cand o conditie este adevarata sau pana cand o conditie devine adevarata. Sintaxa 1: Do [{While I Until} conditie] [bloc_instruciuni] [Exit Do] bloc_instruciuni Loop Sintaxa 2: Do [bloc instructiuni] [Exit Do] [bloc_instrucfiuni] Loop [{While I Until} condiie] Partea Do trebuie sa fie prima instructiune a structurii; While indica faptul ca bucla este executata cand conditia este adevarata; partea Until indica faptul ca bucla este executata panii cand conditia este adevarata.

Conditia condiie este o expresie numerica sau ir de caractere evaluabila la adevarat (1) sau fals (o sau Null). Instructiunea Exit Do, folosita numai in interiorul buclei Do. . .Loop, reprezinta o cale altemativa de prasire a buclei. Este posibila existenta unor instructiuni Do. . .Loop imbricate, ca in urmatorul exemplu: Dim Nrl, Nr2 As Integer Do Do Beep Nr2 = Nr2 + 1 LoopWhile (Nr2 <10) Nr1 =Nr1 + 1 Loop Until (Nr1 > 10)

5.2.2. For...Next Instructiunea For. . .Next executa un grup de instructiuni de un numar specificat de ori Sintaxa: For contor = start To stop[ Step increment] [bloc_instrucfiuni] [Exit For] [bloc instructiuni] Next [contor [, contor] [, ...]] Clauza Step indica faptul ca incrementul este fixat explicit. Instruqiunea Exit For permite parasirea buclei For. . . Next forat. Buclele For. . . Next pot fi imbricate, dupa cum rezulta din urmatorul exemplu: For I = 1 To 10 For J = 1 To 10 For K = 1 To 10 Print i,j,k Next K Next J Next I Daca variabila instruciunii Next este omisa, valoarea incrementului Step este adaugata la variabila asociata cu cea mai recenta instruciune For. Daca o instruciune Next este intalnita inaintea instruciunii corespunzatoare, este generata o eroare

5.3. Parasirea unei proceduri Sub sau Function Instructiunile Exit Sub i Exit Function permit parasirea unei proceduri Sub, respectiv Function. Aceste instructiuni sunt utile in situatiile in care procedura a efectuat tot ceea ce era necesar i se dorete parasirea imediata a rutinei. Exemplu: Sub ForIn_Load() Exit Sub End Sub

7. Variabile O variabili este un identificator folosit pentru stocarea unor valori in timpul executarii programului. Numele variabilelor respecta specificatiile valabile pentru toti identificatorii Visual Basic. 7.1. Declararea variabilelor n interiorul unei proceduri, variabilele se declara cu instructiunea Dim: Dim nume_variabila [As tip] , Clauza optionala As permite definirea tipului de data al variabilei declarate. Daca aceasta clauza este omisa, tipul variabilei va fi cel implicit - Variant (cu exceptia situatiilor in care acesta este schimbat cu instructiunea Deftip). Declararea implicit Declararea variabilelor nu este obligatorie, putandu-se folosi rutine de genul: Function Cub (Nr) VCub = Nr * Nr * Nr End Function Daca variabilele nu sunt declarate inainte de prima folosire, acestea sunt create automat de Visual Basic

7.2. Domeniul unei variabile Variabilele declarate intr-o procedura pot fi folosite (accesate) numai in interiorul acelei proceduri. Domeniul de valabilitate este local. In functie de modul de declarare, o variabila poate avea urmatoarele domenii: Domeniu Declarare Local Dim, Static sau ReDim (intr-o procedura) Modul Dim (in sectiunea de declaratii a unei forme sau modul) Global Global (in sectiunea de declaratii a unui modul) Variabile locale Variabilele locale (local variables) sunt recunoscute numai in procedura in care apar, acest tip de variabila reprezinta o bun optiune in situatiile in care sunt necesare calcule temporare. Mai multe proceduri pot avea o variabil numit Temp, asignarea unei valori variabilei Temp a unei proceduri nealterand valorile celorlalte variabile Temp.

O procedur se poate autoapela - tehnic numit recursivitate -, la fiecare invocare a procedurii o nou copie a variabilei locale este creat. Variabilele locale declarate cu Dim exista doar pe perioada executrii procedurii, in timp ce variabilele declarate cu Static ( Variabile statice) exist pe tot timpul rulrii aplicatiei. Variabile la nivel de modul O variabila la nivel de modul (module-level) este disponibil pentru toate procedurile din form sau cod, nu i pentru codul altor forme sau module de cod. Variabilele la nivel de modul sunt active pe toate durata aplicatiei i ii pstreaza valorile chiar atunci cand forma este inactiva (unloaded). Variabile globale O variabila globala (global variable) are cel mai intins domeniu. Valorile variabilelor globale sunt disponibile pentru toate formele i modulele de cod ale aplicatiei, pe toat durata acesteia. Variabilele globale nu pot fi declarate in proceduri i nici in modulele form

8. Tipuri de date fundamentale Toate variabilele au un tip de data. Un tip de data precizeaza un domeniu de valori impreuna cu operatiile care pot fi executate asupra acelor valori. 8.1. Tipul Variant Tipul de data Variant poate stoca multe tipuri de date - numere, texte, valori calendaristice sau orare. O variabila Variant nu este o variabila fr tip, ci mai degraba o variabila al carei tip poate fi modificat liber. 8.2. Alte tipuri de date fundamentale In Visual Basic exist apte tipuri de date fundamentale, incluzand Variant, dup cum rezult din urmtorul tabel: Nume tip Descriere Caracter declaraie Domeniu Integer Intreg 2-octeti % -32.768 la 32.767 Intreg 4-octeti & Long 2.147.483.648 la 2.147.483.64 Single Virgul mnobil ! -3.402823E-45 la -1.402823E38 4-octeti (valori negative) 1.401298E-45 la 3.402823E38 (valori pozitive) Double Virgul mobil # -1.79769313486232E308 la 8-octeti 4.94065645841247E-324 (valorinegative) 4.94065645841247E-324 la 1.79769313486232E308 (valori pozitive) Currency Numar 8-octe!i cu @ 922,337,203,685,477.5808 la virgula zecimala fixa 922,337,203,685,477.5807 String ir de caractere4 $ 0 la aprox. 65.500 caractere Variant Date/Time, ir de (Fara) Date: January 1, 0000 la caractere sau virgula December 31,9999 mobil Numeric: Similar cu Double ir:

9.1. Masive multidimensionale Visual Basic permite crearea de masive care au pan la 60 de dimensiui. Pentru a declara un masiv bidimensional se procedeaz astfel: Dim Matrice (1 To 10, 1 To 10) As Integer iar o matrice tridimensional se declar, spre exemplu, astfel: Dim Masiv (10, 1 To 20, 10) As Integer Asignarea de valori elementelor unui masiv multidimensional se face astfel: Masiv(l, 1, 1) = 1 " Pentru a calcula suma elementelor de pe diagonala principal a unei matrici (un masiv bidimensional), spre exemplu, folosim urmtorul cod: Suma = 0 For i = 1 To N Suma = Suma + Matr(i, i) Next

EXCEL CALCUL TABELAR