Sunteți pe pagina 1din 45

@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

www.formare.ro 1/45



C U P R I N S




C U P R I N S---------------------------------------------------------------------------------------------------------------------------- 1
1. INTRODUCERE--------------------------------------------------------------------------------------------------------------------- 2
2. Elemente de programare n VBA pentru EXCEL ------------------------------------------------------------------------------ 2
2.1. Variabile si tipuri de date folosite n VBA--------------------------------------------------------------------------------- 3
2.2. Descrierea unui obiect --------------------------------------------------------------------------------------------------------- 5
2.3. Bara de controale standard ---------------------------------------------------------------------------------------------------- 8
2.4. Editorul VBA------------------------------------------------------------------------------------------------------------------ 14
2.5. Foaia de calcul, proprieti, metode, evenimente------------------------------------------------------------------------ 15
2.6. Proceduri i funcii predefinite --------------------------------------------------------------------------------------------- 17
2.6.1. InputBox ------------------------------------------------------------------------------------------------------------------ 17
2.6.2. MsgBox ------------------------------------------------------------------------------------------------------------------- 18
2.7. Afiarea valorii unei celule-------------------------------------------------------------------------------------------------- 18
2.8. Copierea unei zone de celule cu ajutorul unui buton de comand---------------------------------------------------- 20
3. Instruciuni VBA------------------------------------------------------------------------------------------------------------------- 22
3.1. Instruciunea de decizie If ..Then...Else (Dac.Atunci..In caz contrar)---------------------------------------- 22
3.2. Instruciunea de decizie Select Case End Select --------------------------------------------------------------------- 24
3.3. Instruciunea repetitiv For Next (pentru.........urmatorul) --------------------------------------------------------- 25
3.4. Instruciunea repetitiv Do While Loop------------------------------------------------------------------------------- 26
3.5. Instruciunea repetitiv Do Until Loop-------------------------------------------------------------------------------- 27
4. Proceduri i funcii ----------------------------------------------------------------------------------------------------------------- 28
4.1. Proceduri ----------------------------------------------------------------------------------------------------------------------- 28
4.2. Funcii -------------------------------------------------------------------------------------------------------------------------- 30
5. Aplicaii VBA ---------------------------------------------------------------------------------------------------------------------- 32
5.1. Aplicaia 1 Afiarea valorii i adresei celulei curente ---------------------------------------------------------------- 32
5.2. Aplicaia 2 Calcularea numrului nregistrrilor nevide dintr-o foaie de calcul --------------------------------- 33
5.3. Aplicaia 3 Cutarea automat a unui cuvnt citit de la tastatur--------------------------------------------------- 34
5.4. Aplicaia 4 Folosirea casetei list si controlului de tip list derulant. -------------------------------------------- 36
5.5. Aplicaia 5 Actualizarea dinamic a unui grafic ---------------------------------------------------------------------- 37
5.6. Aplicaia 6 Crearea unui configurator automat ------------------------------------------------------------------------ 38
5.7. Aplicaia 7 Crearea unui formular i completarea automat a acestuia ------------------------------------------- 41
5.8. Aplicaia 8. -Crearea unui tabel pivot. ------------------------------------------------------------------------------------ 43
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 2/45
1. INTRODUCERE

Acest curs i propune s v familiarizeze cu opiunile avansate ale MS EXCEL, ce includ:
definirea i editarea de macrocomenzi elemente de programare n Visual Basic for Application;
crearea de formulare;
Manipularea tabelelor Pivot
Toate aceste informaii vor completa cunotinele deja acumulate privind lucrul cu foile de calcul
tabelar MS Excel, astfel nct s fac din acesta un instrument puternic care s preia mare parte
din sarcinile dumneavoastr de serviciu.


2. Elemente de programare n VBA pentru EXCEL
Firma Microsoft a implementat pentru programul Excel un editor VBA (Visual Basic for
Applications) care s extind funcionalitatea Excel. Visual Basic for Aplications poate fi utilizat
pentru dezvoltarea de functii specializate pentru foaia de lucru. Cu ajutorul acestuia se pot scrie
programe sau modifica macrouri complexe care pot fi folosite de ctre utilizator pentru a
automatiza unele activiti i a extinde capabilitatea Excel.

Ideea de limbaj de programare si program.
Un program reprezinta un set de instructiuni ce spun calculatorului sa faca ceva anume.
Cel mai simplu tip de program este o secventa de instuctiuni pe care calculatorul o implementeaza
in mod automat. Aceste instructiuni sunt adesea numite si declaratii. De exemplu in limbajul de
programare Visual BASIC putem avea :
Sub Adunare()
a = 10
b = 33
c = a + b
Msgbox c
End Sub

Desi unele din cuvintele folosite mai sus pot prea fr sens, nu este greu de presupus ca
aplicaia va spune calculatorului s adune doua numere si apoi s afieze rezultatul. In acest caz,
va fi utilizat comanda MsgBox message box pentru a afisa rezultatul n foaia de lucru
curent.
Setul de instructiuni nu trebuie sa fie ambiguu, iar ordinea instructiunilor trebuie sa aiba
logica. In caz contrar programul nu va rula asa cum se doreste. De exemplu, la programul de mai
sus simpla inversare a doua declaratii (rndul 4 cu rndul 5) va face ca programul sa nu afiseze
rezultatul, deoarece afisarea se face inaintea adunarii propriu-zise.

@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 3/45
Un alt exemlu de program util in Excel este un program ce face ca, intr-o lista de nume,
numele care incep cu A sa fie scrise cu font ingrosat (bold).




Pentru a efectua aceasta operatie calculatorul trebuie sa cunoasca urmatoarele informatii:
Unde incepe lista.
Unde se termina lista.
Cum se parcurg itemii (articolele) din lista.
Care este caracteristica distinctiva a itemilor ce trebuie modificati.
Cum se vor modifica itemii.
Aceste informatii trebuie sa fie similare cu urmatoarele:
1. Se va lucra cu foaia de lucru Sheet1 (sau Feuil1).
2. Se incepe cu celula B3 si se continua pana se intalneste o celula goala,
3. Se verifica prima litera a cuvntului din celula curenta.
4. Daca valoarea este A, continutul celulei se va scrie ingrosat (bold). In caz contrar se lasa asa
cum este.
5. Se trece la celula urmatoare.
Acest exemplu va fi realizat efectiv n cadrul unei lecii ulterioare.

2.1. Variabile si tipuri de date folosite n VBA
Variabilele reprezinta elementele cu care interactioneaza programul

Codul este compus din variabile, operatori (+,-, etc) si declaratii. Conceptual vorbind
variabilele reprezinta obiectele cu care lucreaza programul. De exemplu, o variabila poate
reprezenta un numar cu care se vor efectua calcule matematice, un sir de caractere ce trebuie
editat, o foaie de lucru, etc. In cadrul unui program se poate manipula orice din cadrul Excel.
Pentru a interationa cu acesti itemi trebuie:

Creata o variabila de tipul potrivit.
S i se dea o valoare initiala variabilei.
Sa se efectueze operatii sau sa se execute declaratii pentru a modifica variabila sau pentru a
interactioana cu ea.





@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 4/45
Tipuri de date
La declararea sau crearea unei variabile, se va tine cont de tipul de date ce va fi pstrat de
variabil. Variabilelor li se pot atribui anumite valori in functie de tipul de date ce a fost declarat .
La variabile se face referire in functie de tipul de date retinut; spre exemplu o variabil poate fi de
tip ntreg, respectiv va retine valori intregi (Integer). Daca nu se stie sigur tipul de date pe care il
va retine variabila poate fi declarata ca Variant. Acest tip de variabile pot reprezenta orice.
Tipurile de date cele mai uzuale sunt reprezentate in tabelul de mai jos:


Principalele tipuri de date folosite n cadrul VBA sunt prezentate n tabelul urmtor:


Tip dat Interval de valori
Boolean

Adevarat (True) sau fals(False)
Byte

0255.

Currency

922,337,203,685,477.5808 la 922,337,203,685,477.5807.

Date

1 Ianuarie 100 la 31 Decembrie 9999 si timp de la 0:00:00 la 23:59:59.

Double


1.79769313486231 la 4.94065645841247E-324 pentru valori negative; si de la
4.94065645841247E-324 pana la 1.79769313486232E308 pentru valori pozitive.

Integer

32,768 la 32,767.

Long 2,147,483,648 la 2,147,483,647.
Object

Tip de data complex

Single

3.402823E38 la 1.401298E-45 pentru valori negative; si de la 1.401298E-45 pana la
3.402823E38 for pentru valori pozitive.

String

Sir de caractere.
Variant Tip de dat care le include pe toate celalalte


Declararea variabilelor

De obiei, in cadrul orcarui limbaj de programare, pentru a putea folosi o variabila, aceasta
trebuie declarata la inceputul programului. Dupa ce se va decide tipul de data potrivit pentru
variabila, declararea are sintaxa:

Dim NumeVariabila [As TipData]

Exemple:

Dim Contor As Integer
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 5/45
Dim NumeFoaieLucru As String
Dim ValoareCelula As Variant
Dim Salariu As Currency

Variabilele sunt de dou tipuri:
- globale (sunt recunoscute n tot programul);
- locale (sunt recunoscute doar n interiorul unei proceduri sau funcii);
In cazul in care nu se specific tipul variabilei, acesteia i se atribuie tipul de data Variant.
Asadar variabila ValoareCelula poate fi declarata mai simplu astfel:

Dim ValoareCelula


2.2. Descrierea unui obiect

Obiectele sunt acei itemi ce pot fi manipulati in cod. Practic obiectele permit
utilizatorului sa gandeasca si sa dezvolte aplicatii folosind termenii pe care i intalneste in viata de
zi cu zi. In Excel exista un obiect Workbook (registrul de lucru), un obiect Worksheet (foaie de
lucru), un obiect Range (grup de celule), un obiect Cell (o celula) sau un un obiect PivotTable
(tabel pivot), sau chiar un obiect Comment (comentariu). Orice item cu care se poate interactioana
folosind meniurile Excel poate fi considerat un obiect.
Obiectele VBA se pot caracteriza cu ajutorul a trei elemente : proprieti, metode i
evenimente.
Proprietati si metode
Proprietatile sunt caracteristicile ce descriu un obiect iar metodele sunt operatii ce pot fi
efectuate de acel obiect. Iata un exemplu pentru a explica diferenta dintre acestea. Se considera
o locuinta. Acesta poate fi considerate un obiect cu numele Resedinta. Acest obiect poate avea o
proprietate numita Tip, ce poate indica daca locuinta este un apartament sau o casa. Poate avea
de asemnea o proprietate numita Inchiriat ce va avea valoarea adevarat daca locuinta este
inchiriata sau fals daca aceasta este proprietate personal. Lista de mai jos reprezinta alte
proprietati pe care le poate avea obiectul Resedinta.
- Culoare zugraveli
- Nr. dormitoare
- Nr. bi
- Suprafaa
- Temperatura (ambientala)
Obiecul Resedinta poate avea o metoda de racire (folosind un obiect Aer Conditionat) si
o metoda de incalzire (folosind un obiect Centrala Termica). In multe cazuri, dar nu intotdeauna,
folosirea unei metode modifica una sau mai multe proprietati. In cazul curent , metodele de
incalzire si racire vor modifica proprietatea Temperatura.

a) Proprietile reprezint caracteristicile obiectului respectiv, putnd fi de orice tip,
inclusiv Object (obiect). Aceste proprieti pot fi modificate. Modificarea unui parametru se face
altfel :

@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 6/45
numeObiect.numeProprietate = Valoare
In tabelul de mai jos sunt prezentate sintetic principalele proprieti ale unui obiect VBA:

Nume proprietate/parametru Descriere
Color Acest parametru indic culoarea obiectului; de obicei culoarea
este stabilit cu ajutorul tabelei de proprieti, care pune la
dispoziia utilizatorului o serie de culori standard.
Caption Reprezint textul care este afiat pe obiect i este un parametru
de tip String (ir de caractere).
Enabled Acest parametru indic dac obiectul este activ sau nu i este de
tipul Boolean. Dac parametrul are valoarea True, atunci
obiectul este activ. Dac parametrul are valoarea False atunci
obiectul este inactiv.
Font Acest parametru este folosit pentru stabilirea caracteristicilor
fontului folosit pentru scrierea textului de pe obiect.
ForeColor Prin acest parametru se poate stabili culoarea fontului pentru
scrierea textului de pe obiect.
Height Reprezint nlimea obiectului i este un parametru de tipul
Single.
Left Reprezint coordonata (de pe axa X) a colului stnga sus a
obiectului; Acest parametru este de tipul Single.
PrintObject Stabilete dac obiectul este printabil sau nu i este un parametru
de tip Boolean; Dac valoarea este True atunci obiectul este
printabil; Dac valoarea este False atunci obiectul nu este
printabil (nu apare la imprimant).
Top Reprezint coordonata (de pe axa Y) a colului stnga sus a
obiectului; Acest parametru este de tipul Single.
Width Reprezint lungimea obiectului i este un parametru de tipul
Single.
Visible Stabilete dac obiectul este vizibil sau nu; Acest parametru este
de tipul Boolean; Dac valoarea parametrului este True, atunci
obiectul este vizibil; Dac valoarea parametrului este False, atunci
obiectul nu este vizibil n foaia de calcul.

@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 7/45

Exemplu 1:

CommandButton.Caption = START

unde CommandButton reprezint numele obiectului, iar Caption este un parametru care reprezint
textul ce va fi afiat pe obiect.
Dup cum se poate observa, ntre obiect i parametru se include un punct separator.


b) Metodele sunt proceduri sau funcii care pot s aib un numr diferit de parametri i
reprezint operaiile care se pot efectua asupra unui obiect. Apelarea unei metode o vom ilustra
prin cteva exemple :

Exemplu 1 :

Foaie2.Activate

unde Foaie2 reprezint un obiect de tip foaie de calcul Excel, iar Activate este o metod prin care
se realizeaz activarea foii de calcul Foaie2.

Exemplu 2:

Foaie1.Move Sheets(2)

unde Foaie1 reprezint un obiect de tip foaie de calcul Excel, iar Move este o metod cu ajutorul
creia se mut obiectul Foaie1 pe poziia a doua n registrul de calcul.

Observaie: Metodele obiectelor pot fi doar apelate nu i modificate.

c) Evenimentele sunt proceduri care pot s aib un numr diferit de parametri i reprezint
reacia obiectului la diferite aciuni ale utilizatorului; procedura se apeleaz automat la o aciune a
utilizatorului asupra unui obiect. Un eveniment trebuie declarat, iar declararea unui eveniment se
face ntr-o procedur special generat automat de VBA. Sintaxa unui eveniment este urmtoarea:
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 8/45

Private Sub numeObiect_numeEveniment(lista as tipDat)
Bloc_instructiuni
End Sub
Principalele evenimente ale unui obiect sunt sintetizate n tabelul de mai jos:
Nume eveniment Descriere
Click Acest eveniment este declanat n momentul care se efectueaz
un click pe obiect.
DoubleClick Acest eveniment este declanat n momentul n care se
efectueaz un dubluclick pe obiect.
MouseDown Acest eveniment este declanat n momentul n care butonul
stng/drept al mous-ului este apsat iar cursorul mous-ului se
afl pe obiect .
MouseMove Acest eveniment este declanat n momentul n care mous-ul
este micat pe obiect.
MouseUp Acest eveniment este declanat n momentul n care butonul
stng/drept al mous-ului nu mai este apsat iar cursorul mous-
ului se afl pe obiect .


Folosirea controalelor
Adaugarea unui control

Pentru a adauga un control intr-o foaie de lucru, trebuie mai intai afisata bara de controale
standard, iar apoi de pe aceasta se va selecta controlul dorit. Conturul acesteia se va desena cu
mouse-ul pe foaia de lucru. Pozitia, dimensiunea si proprietatile controlului nu sunt importante
initial deoarece acestea pot fi modificate oricand. Acestor controale li se vor asocia mai tarziu
coduri VBA.


2.3. Bara de controale standard

Bara de controale standard se afieaz pe ecran astfel:
din meniul Outils se alege opiunea Personaliser;
va aprea o fereastr cu trei butoane din care se alege opiunea Barres doutils i se bifeaz
opiunea Commandes;


@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 9/45
Bara de controale este ilustrat n figura de mai jos.





Aceast bar este format din trei pri distincte i anume: prima parte este format din
butoane funcionale (1, 2 i 3) utile pentru conceperea programului n VBA; a doua parte este
format din butoanele 4 14, corespunztoare tipurilor de controale uzuale (obiectelor fizice din
program) i a treia parte cuprinde doar butonul 15 care este folosit pentru a aduga noi controale.
Butonul 1 este folosit pentru intrarea/ieirea din modul de proiectare. Dac acest buton
este activat, n foaia de calcul pot fi adugate noi controale (obiecte fizice). n acest caz
controalele de pe foaia de calcul nu sunt active. n cazul n care butonul nu este apsat controalele
sunt active, iar programul poate fi rulat.
Butonul 2 este folosit pentru afiarea unui tabel cu ajutorul cruia se pot vizualiza
principalele proprieti (parametri) ale controlului activ din foaia de calcul sau chiar al foii de
calcul.









Butonul 3 este folosit pentru activarea editorului
de cod VBA.
Observaie: Pentru inserarea unei control pe foaia de calcul se apas pe butonul corespunztor
controlului (unul dintre butoanele 4 14), dup care, cu ajutorul mous-ului, se insereaz controlul
pe foaia de calcul (procedeu identic cu inserarea unei imagini).



Numele i tipul obiectului pentru
care sunt afiate proprietile
Valoarea unui
parametru(proprietate)
Numele parametrului
( proprietii )
1 2 3
4
5 6
7 8 9 11 12 13
14 15
10
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 10/45
Descrierea controalelor

Butonul 4 reprezint un control de tipul csu de selectare (CheckBox) i are dou stri
selectat sau deselectat. Se utilizeaz atunci cnd este necesar selectarea uneia sau mai multor
opiuni dintr-o list.
Butonul 5 reprezint un control de tipul caset de text (TextBox) i este folosit pentru
introducerea de la tastatur a unor date.
Butonul 6 reprezint un control de tipul buton de comand (CommandButton) i este
folosit pentru executarea unor comenzi (blocuri de instruciuni). Este unul dintre cele mai folosite
controale.
Butonul 7 este un control de tipul buton radio (OptionButton ) i are dou stri
selectat/neselectat. Dac pe o foaie de calcul se gsesc mai multe astfel de controale,
numai unul dintre ele poate s fie n starea selectat.
Butonul 8 reprezint un control de tipul caset list(ListBox) i este folosit pentru
afiarea unor valori.
Butonul 9 reprezint un control de tipul list derulant(ComboBox) i este folosit pentru
alegerea unei valori dintr-o list derulant.
Cea mai important metod a controalelor ListBox i ComboBox este AddItem. Metoda AddItem
are un parametru de tip Variant i este folosit pentru a aduga o nou valoare n list.
Exemplu:
Private Sub CommandButton1_Click()
Dim nume_nou As String
Dim nr As Integer
nr = Int(20 * Rnd) + 1 genereaz un nr. ntreg aleator ntre 1 i 20
nume_nou = "Model" + CStr(nr) CStr convertete variabilele numerice n variabile de tip ir
ComboBox1.AddItem nume_nou
ListBox1.AddItem nume_nou
End Sub

Not: Apostroful reprezint un comentariu. Comentariile nu influeneaz logica programului,
avnd rol exclusiv de informare. Este indicat s folosim ct mai multe comentarii explicative,
astfel nct la o modificare ulterioar a aplicaiei s ne putem aduce aminte uor logica de care
ne-am folosit la programarea iniial.
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 11/45
n acest exemplu, prin evenimentul click corespunztor controlului CommandButton1,
variabilei nume_nou i se atribuie valoarea Modelxx (unde xx este un nr.aleator cuprins ntre 1 i
20), dup care aceasta este adugat n lista derulant (ComboBox1) i n lista simpl (ListBox1).

Butonul 10 reprezint un control de tipul buton comutator (ToggleButton), care are dou
stri: apsat i neapsat.
Butonul 11 reprezint un control de tipul buton de incrementare/decrementare
(SpinButton) i incrementeaz(crete)/decrementeaz(descrete) valoarea parametrului Value de
cte ori este apsat una din cele dou sgei(n sus sau n jos).
Butonul 12 reprezint un control de tipul bar derulant (ScrollBar) i poate fi folosit
pentru defilarea unor controale sau foi de calcul. Aceasta bar de defilare poate s fie vertical sau
orizontal. Orientarea barei de defilare se stabilete cu ajutorul parametrului Orientation; dac
acest parametru are valoarea 0 atunci bara este orizontal, iar dac este 1 atunci bara este
vertical.
Butonul 13 reprezint un control de tip etichet (Label) i de obicei este folosit pentru
etichetarea altor controale sau afiarea unor valori nemodificabile.
Butonul 14 este folosit pentru a insera n foaia de calcul un control de imagine (Image).
Cel mai important parametru al acestui control este Picture. Acest parametru este folosit pentru a
stabili ce imagine va conine acest control.
Butonul 15 (More controls) este folosit pentru a aduga noi controale care nu se
gsesc n bara standard. Dup ce se apas click pe buton va aprea o list derulant din care se
poate alege controlul dorit.








2.Exemplu: In continuare este
ilustrat folosirea controalelor ntr-o foaie de calcul Excel. Se observ obiecte de tip: buton de
comand, etichete (label), butoane de validare (check box), butoane de incrementare, list
derulant etc.
Butonul More controls
Un control din list
Lista derulant
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 12/45

















Functia MsgBox

Functia MsgBox este folosita pentru a afisa informatii pentru utilizatorii programului,
sau pentru a colecta date de intare de tipul Da/Nu/Inchide. Sintaxa de baza a acestei functii este :

MsgBox(text[, butoane] [, titlu] )

Parametrul text reprezinta textul ce va fi afisat, parametrul butoane controleaza ce
butoane sunt afisate. Daca nu se da nici o valoare pentru acest parametru, cea implicit este 0
(Doar OK). Titlul este textul afisat in bara de titlu a casetei de dialog.

Aceasta functie poate afisa mesaje simple ca cel de mai jos:

MsgBox "Aceasta este o functie utila."

-Butonul de comanda este exemplul perfect pentru a demonstra avantajele oferite de
controale.

1. Daca bara de controale nu este vizibila, se poate afisa selectand View>Toolbars>Control
Toolbox
2. Se executa click pe butonul Command Button de pe bara de controale.
3. Se executa apoi click in locatia din foaia de lucru unde va fi plasat coltul stanga-sus al
butonului de comanda. Daca se execta doar click, butonul de comanda va avea dimensiunea
implicita. Pentru a da dimensiunea dorita, se va desena conturul butonului cu butonul click apasat.
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 13/45

4. Se executa click dreapta pe buton si se selecteaza Proprieties. Va aparea o fereastra cu
proprietati ca in figura de mai sus.
Se vor seta proprietatile dupa cum urmeaza:


5. Se executa click dreapta pe buton si apoi se va selecta View Code. Va fi pornit editorul VBA.
Implicit cursorul va fi plasat in procedura asociata butonului.
6. Se executa click pe sageata casetei combo din partea de sus a ferestrei codului. Vor fi afisate
toate evenimetele la care va raspunde butonul.
7. In procedura numita cmdExemplu_Click, se introduce declaratia:

MsgBox Ati executat click!

8. Se revine in Excel si se executa click pe butonul Exit Design Mode de pe bara de controale.
9. Se inchide fereastra de proprietati si bara de controale.
10. Se testeaza butonul. Rezultatul este afisat in figura de mai jos.

cmdExemplu
Exemplu

@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 14/45


2.4. Editorul VBA
Dup inserarea controalelor n foaia de calcul, urmtorul pas l constituie scrierea codului
VBA pentru fiecare control (obiect) n parte.
Editorul VBA se acceseaz prin apsarea combinaiei de taste Alt + F11. Fereastra de
vizualizare conine: o bar de titlu, o bar de meniuri, o bar standard i dou cadrane. n cadranul
din partea stng sunt afiate foile de lucru.
Cadranul foilor de
calcul
Cadran de editare
cod VBA
Lista cu obiecte
Lista
evenimentelor
obiectului
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 15/45
Dac dorim s accesm codul corespunztor unei anumite foi de lucru se execut dublu-
click pe iconia foii respective. n cadranul din partea dreapt se scrie codul corespunztor foii
respective.

2.5. Foaia de calcul, proprieti, metode, evenimente

Foaia de calcul este principalul obiect de lucru n programarea scripturilor Excel.
Principalele proprieti ale unei foi de calcul sunt prezentate n tabelul de mai jos:

Nume proprietate Descriere
Name Acest parametru indic numele foi respective;
Cells(i , j) Acest parametru indic valoarea celulei de pe rndul i coloana j; j
poate fi att de tip integer ct i string
Range("celul1:celul2") Este un parametru de tip obiect, prin care se face o referire la o
zon de celule.

n editorul VBA proprietile foii de calcul sunt afiate automat ntr-o list derulant dup ce este
scris numele foii de calcul urmat de delimitatorul punct, ca n exemplul ce urmeaz:

Dup ce apare aceast list derulant se efectueaz dublu-click pe parametrul dorit i acesta este
inserat automat.
Exemple:
MsgBox Feuil1.Name
' afieaz numele primei foi de calcul

Feuil1.Name = " Foaie1 "
' numele primei foi de calcul este schimbat cu Foaie1

Proprietate a
foii de calcul
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 16/45
MsgBox Feuil1.Cells(2, "A")
' afieaz coninutul celulei de pe rndul 2, coloana A

Feuil1.Cells(4, 2)= "100"
' Valoarea celulei de pe rndul 4, coloana 2 (adic B) devine egal cu 100

Feuil1.Range("A1:D10").Font.Italic = True
' n domeniul celulelor A1:D10, fontul devine de tip nclinat (italic)
Feuil1.Cells (1, "A").Interior.Color = vbBlue
' Celula A1 va fi colorat n albastru
Principalele metode ale unei foi de calcul sunt prezentate n tabelul ce urmeaz:
Nume metod Descriere
Activate Realizeaz activarea unei foi de calcul;
Select Realizeaz selectarea unei foi de calcul; (similar cu Activate)
Delete Realizeaz tergerea unei foi de calcul;
PrintOut From,
To, Copies
Realizeaz tiprirea foii de calcul la care se face referire;
Aceast metod are 3 parametri de tip ntreg; From indic numrul pagini de
la care se ncepe printarea; To indic numrul pagini pn la care se printeaz;
Copies reprezint numrul de copii de tiprit;

n editorul VBA metodele foii de calcul sunt afiate automat ntr-o list derulant dup ce este
scris numele foii de calcul urmat de delimitatorul punct.
Exemple:
Feuil1.Activate
' realizeaz activarea foii de calcul Feuil1
Feuil2.Delete
' realizeaz tergerea foii de calcul Feuil2
Metod a foii
de calcul
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 17/45

Feuil3.Move Sheets(2)
' realizeaz mutarea foii de calcul Feuil3 naintea foii de calcul Feuil2
Feuil1.PrintOut 1,2,1
' realizeaz printarea primelor dou pagini ale foii de calcul ntr-un singur exemplar
Principalele evenimente ce pot fi atribuite unei foi de calcul sunt prezentate n tabelul de mai jos:
Nume eveniment Descriere
Activate Se realizeaz activarea unei foi de calcul;
Change Se schimb foaia activ;
SelectChange Realizeaz schimbarea celulei sau zonei curente cu alt celul
sau zon (range)

2.6. Proceduri i funcii predefinite
2.6.1. InputBox
Unele proceduri sau funcii nu mai trebuie s fie definite deoarece ele sunt recunoscute implicit de
calculator. Principalele funcii i proceduri predefinite sunt : InputBox i MsgBox.
Funcia predefinit InputBox : este o funcie cu ajutorul creia se introduc date de la tastatura ( se citete
de la tastatur). Vom prezenta n cele ce urmeaz un exemplu prin care vom ilustra modul n care se poate
apela funcia MsgBox:
Dim nume as String
------------------------------
nume = InputBox(Introduceti numele :) -> ne solicita sa atribuim o valoare variabilei nume
-------------------------------
Apelarea funciei va afia pe ecran o fereastr de dialog , ca n figura de mai jos. n aceast fereastr se gsete o caset n
care se introduce datele.






Butonul pe care se apas
pentru acceptarea datelor
Butonul pe care se apas
pentru anularea datelor
Caseta pentru
introducerea datelor
Mesajul pentru
introducerea datelor
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 18/45
Dup ce aceasta fereastr apare pe ecran, se introduc datele, dup care se apas butonul Ok. Altfel variabilei nume i
se atribuie valoarea citit de la tastatur (n cazul de mai sus Popescu).
2.6.2. MsgBox
Procedura standard MsgBox este folosit pentru afiare intr-o fereastr de dialog special a unei text (numere).
Vom exemplifica folosirea acestei proceduri printr-un exemplu.
Dim textul as String
Private Sub CommandButton1_Click()
textul = Am apelat procedura MsgBox
MsgBox textul
End Sub
n acest caz apelarea acestei proceduri are ca efect afiarea pe ecran a ferestrei de mai jos:





2.7. Afiarea valorii unei celule

Vom realiza o prim aplicaie care va afia pe ecran valoarea unei celule din alt foaie de
calcul dect cea care este activ.
Pentru acesta vom crea un nou fiier Excel, iar n prima foaie de calcul vom insera un
buton de comand, cruia i vom schimba parametrul Caption (din cel implicit CommandButton1
n Afieaz) cu ajutorul tabelei de proprieti (parametri).


Textul afiat
Butonul pe care se apas pentru
ca aceast fereastr s se nchid
Tabela de proprieti
(parametri)
Butonul de comand cu
parametrul Caption
schimbat
Parametrul Caption al
butonului de comand a fost
schimbat din
CommandButton1 n Afiseaz
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 19/45


Dup aceasta vom activa editorul de cod VBA (apsnd pe al treilea buton) i din lista
derulant cu obiecte de pe prima foaie de calcul vom alege CommandButton1, iar din lista de
evenimente corespunztoare lui vom alege evenimentul Click.



Codul corespunztor evenimentului Click este urmtorul:

Private Sub CommandButton1_Click()
Dim continut_celula As Variant
continut_celula = Feuil2.Cells(1, "A")
MsgBox continut_celula
End Sub

n aceast secven de cod variabila coninut_celula se declar ca fiind de tip Variant
deoarece n ea se reine coninutul celulei (care poate fi de orice tip), iar Feuil2 este numele celei
de-a doua foi de calcul din care vom afia valoarea celulei aflat pe primul rnd i prima coloan
Dup scrierea codului se nchide editorul de cod VBA i se iese din modul de proiectare (se apas
pe primul buton de pe bara de controale standard). Acum poate fi folosit butonul de pe prima
foaie de calcul. Dac se efectueaz un click pe buton atunci coninutul primei celule din a doua
foaie de calcul va fi afiat pe ecran.

Controlul CommandButton1
Lista derulant cu obiectele care
se afl pe prima foaie de calcul
Declararea evenimentului Click
corespunztor controlului
CommandButton1
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 20/45



2.8. Copierea unei zone de celule cu ajutorul unui buton de comand

n a doua aplicaie vom realiza copierea unei zone de celule dintr-o foaie de calcul n alta cu
ajutorul unui buton de comand. Stabilim parametrul name pentru primele dou foi de calcul
dintr-un fiier Excel astfel: prima foaie se va numi Foaie1 (cea n care se va copia), iar cea de-a
doua se va numi Foaie2 (cea din care se va copia). Dup aceasta vom insera un buton de comand
pe prima foaie de calcul i vom edita codul pentru evenimentul Click al butonului:

Private Sub CommandButton1_Click()
Foaie2.Range("A1:B2").Value = Foaie1.Range("A1:B2").Value
End Sub
Parametrul Range este de tip obiect i reprezint o zon de celule. Zona de celule la care
parametrul Range face referire se scrie ntre paranteze rotunde i ghilimele astfel: se scrie adresa
celulei aflate n colul stnga sus, urmat de :, dup care se scrie adresa celulei aflate n colul
dreapta jos al zonei de celule. Parametrul Range fiind de tip Object are i el la rndul lui mai
muli parametri, ntre care i parametrul Value. Acest parametru face referire la coninutul
celulelor din zona de memorie respectiv.

Butonul CommadButton1 din
prima foaie de calcul
Modul de proiectare este inactiv
Afiarea pe ecran a coninutului
primei celule din cea de-a doua
foaie de calcul cu ajutorul
funciei MsgBox
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 21/45


Exemple:
Exemplul 1.
Private Sub Worksheet_Activate()
MsgBox "a fost activat foaia de calcul"
End Sub
n acest exemplu este afiat un mesaj atunci cnd este activat o foaie de calcul.

Exemplul 2
Dim linie As Integer
Dim coloana As Integer
Dim continut As String
Private Sub Afisare_Click()
linie = InputBox("introduceti rindul :") ' introduceti randul de pe care se face citirea.
coloana = InputBox("introduceti coloana:") 'introduceti coloana de pe care se face citirea.
Feuil2.Cells(1, 1) = Feuil1.Cells(linie, coloana) ' muta continutul randului si coloanei cerute
in alta pagina.
Feuil2.Activate
End Sub
Acest exemplu copiaza o zona de celula de la o alta locatie.
TEMA: -Sa se introduca de la tastatura randul si coloana de unde se face citirea.
-sa se coloreze in galben scrisul si in albastru fundalul in celula unde se afiseza
valoarea celulei




Zona de celule din prima
foaie de calcul n care a fost
copiat coninutul unei zone de
celule din cea de-a doua foaie
de calcul
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 22/45
3. Instruciuni VBA

ntr-un program datele sunt prelucrate cu ajutorul instruciunilor.
Instruciunile se mpart n dou categorii: instruciuni de decizie i instruciuni repetitive;
3.1. Instruciunea de decizie If ..Then...Else (Dac.Atunci..In caz contrar)

Instruciunea If ..Then...Else are urmtoarea sintax:
If cond1 then
Bloc_instruciuni (a)
End If
sau
If cond1 then
Bloc_instruciuni1
Else (b)
Bloc_instruciuni2
End If

n cazul (a) instruciunea evalueaz condiia cond1 i dac este adevrat execut blocul de
instruciuni Bloc_instruciuni, iar dac este fals atunci instruciunea nu execut nimic.
n cazul (b) instruciunea evalueaz condiia cond1 i dac este adevrat execut blocul de
instruciuni Bloc_instruciuni1, iar dac este fals execut blocul de instruciuni
Bloc_instruciuni2.
Exemplu1 :

Dim i as Integer , j as Integer , k as Integer
Dim u as String
Private Sub CommandButton1_Click()
i = 9
j = 100
k = 0
If i < 100 then
u = a
k = k + 1
else
u = b
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 23/45
j = j- 2
End If
End Sub

Tema: -Depanare cu F8
-Introduceti etichete pentru i,j si k
-Introduceti caseta de unde sa il citeasca pe i
-Introducerea unei etichete pentru a nota ce afiseaza alta eticheta (vizibil sau nu)
-Preluarea variabilelor j si k din celule
-Colorarea butoanelor in funtie de valori


n cele ce urmeaz vom prezenta modul de executare al acestei secvene de cod. Iniial se
atribuie valorile i=9, j=100 i k=0, apoi se execut instruciunea If n modul urmtor : se verific
dac i<100 i cum aceast condiie este adevrat se face u=a i k=1 ( se execut prima ramur
a instruciuni If ).

Exemplu2 :

Dim i as Integer
Dim u as String
Private Sub CommandButton1_Click()
i = 5
If i < 3 then
u = "a
else
u = b
End If
If u = a then i = 1
End Sub
n cele ce urmeaz vom prezenta modul de executare al acestei secvene de cod. Se face i=5, apoi
se execut prima instruciune If dup cum urmeaz : se verific dac i <3 i cum aceast condiie
nu este ndeplinit se face u = b ( se execut a doua ramur a instruciuni If). A doua
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 24/45
instruciune If nu se execut deoarece u = b i condiia nu este ndeplinit (iar aceast
instruciune If nu are ramura Else).



3.2. Instruciunea de decizie Select Case End Select
Instruciunea Select Case .. End Select are urmtoarea sintax:

Select Case val
Case val1 , val2 , : Bloc_instructiuni1
Case lis1 , lis2 , : Bloc_instructiuni2
Case str1 , str2 , : Bloc_instructiuni3
Case Else
Bloc_instructiuni4
End Select
unde val este o variabil iar val1, val2, ., lis1,lis2, .., str1, str2 reprezint valori
de acelai tip cu cel al variabilei val sau expresii care returneaz un rezultat de acelai tip cu cel al
variabilei val.
Aceast instruciune se execut astfel: dac val se gsete n lista sau intervalul de valori sau
expresii val1, val2, atunci se execut Bloc_instruciuni1; dac val se gsete n lista sau
intervalul de valori sau expresii lis1, lis2, atunci se execut Bloc_instruciuni2 etc.; dac val
nu se gsete n nici una dintre aceste liste de valori instruciunea Select Case nu execut nimic.

Exemplu :

Dim i as Integer
Dim p as Boolean
Dim u as String
Dim v as String
Private Sub CommandButton1_Click()
i = 35
Select Case i
Case 10 , 20 : p = True
Case 30 to 50 : u = abcd `verific dac i [30,50]
Case 60 , 70 : v = False
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 25/45
Case Else
End Select
End Sub
TEMA: -Sa se schimbe numele butonului in Select Case.
-Sa se introduca de la tastatura valoarea lui i.
- Sa se afiseze cu MsgBox daca i a indeplinit sau nu conditia.
-Butonul Select Case sa isi schimbe culoarea in functie de rezultat.

Modul de executare al secvenei de cod l vom prezenta n cele ce urmeaz. Se face i = 35 apoi
se execut instruciunea Select Case altfel: se verific dac variabila i este egal cu 10 sau cu 20,
dar cum i = 35 se continu executarea instruciuni verificnduse dac variabila i aparine
intervalului (30,50]; cum i este egal cu 35 se face u = abcd. Similar se execut instruciunea
CASE pn la capt.

3.3. Instruciunea repetitiv For Next (pentru.........urmatorul)
Instruciunea For . Next are urmtoarea sintax :

For contor = val1 To val2
Bloc_instruciuni
Next
unde contor, val1, val2 sunt toate de acelai tip. Aceast instruciune realizeaz executarea
Bloc_instruciuni de val2 val1 ori; instruciunea are astfel un numr cunoscut de repetri.
Observaie:
val2 trebuie s fie mai mare dect val1 pentru ca instruciunea s se execute; dac val2 este mai
mic dect val1 atunci Bloc_instruciuni nu se va executa.

Exemplu 1:
Dim i as Integer , k as Integer
Dim m as Long
Private Sub CommandButton1_Click()
k = 0
m = 0
For i = 1 To 5
k = k +1
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 26/45
m = m+i
Next
End Sub
Aceast secven de cod se execut de cinci ori astfel : prima execuie face k = 1 i m = 0 + 1;
a doua execuie face k = 2 i m = 1 + 2; a treia execuie face k = 3 i m = 3 +3; a patra execuie
face k = 4 i m = 3 + 4; a cincea execuie face k = 5 i m = 7 + 5.

Pentru al doilea exemplu se va folosi o variabila de tipul de date ir (array). O variabila
array este o variabila ce poate stoca mai multe valori de acelasi tip. Declararea array se face dupa
sintaxa:

Dim NumeSir(numar elemente) As Tip

Exemplu 2 :
Dim I As Integer
Dim sir(10) As Integer
Private Sub CommandButton1_Click()
For I = 0 To 9
sir(I) = Cells(I + 1, A).Value
Next I
For I = 0 To 9
Cells(I + 1, B).Value = sir(I)^2
Next I
End Sub
Aceasta secventa de cod insereaza valorile primelor zece randuri ale coloanei A intr-un
sir, iar apoi plaseaz patratul acestor valori in primele zece randuri ale coloanei B.
TEMA: - Depanare cu F8.
-Sa se introduca de la tastatura k si m (InputBox)
-Sa se afiseze valorile lui k si m pe doua coloane.
- Sa se puna un buton pe foaia de calcul care sa faca patratul val lui k si sa le afiseze in
col B
3.4. Instruciunea repetitiv Do While Loop
Instruciunea Do While Loop are urmtoarea sintax:

Do While condiie
Bloc_instrucini
Loop
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 27/45

Aceast instruciune execut Bloc_instrucini atta timp ct este ndeplinit condiia.

Exemplu :

Dim i as Integer
Private Sub CommandButton1_Click()
i = 0
Do While i <= 3
i =i + 1
Loop
End Sub
TEMA: -Valoarea lui i sa fie afisata pe coloana A de la randul 1 in jos.
- Sa se introduca variabila (ntr-un TextBox) pana unde se executa i .
Secvena este executat atta timp ct variabila i este mai mic sau egal dect trei i anume:
la prima execuie, cnd i=0, se verific dac este i <=3 i cum condiia este ndeplinit se face
i=1; la a doua execuie i=1 se verific dac i<=3 i cum este adevrat se face i =2;la a treia
execuie i=2, se verific dac i<=3 i cum este adevrat se face i=3; la a patra execuie i=3, se
verific dac i<=3 i cum condiia este adevrat se face i=4. Deoarece variabila i a luat valoarea
4 aceast instruciune nu mai este executat;


3.5. Instruciunea repetitiv Do Until Loop
Instruciunea Do Until Loop are urmtoarea sintax:

Do Until condiie
Bloc_instruciune
Loop

Aceast instruciune execut Bloc_instrucini pn cnd este ndeplinit condiia.

Exemplu :

Dim j as Integer
Private Sub CommandButton1_Click()
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 28/45
j = 0
Do Until j >=2
j =j + 1
Loop
End Sub
TEMA: -Valoarea lui j sa fie afisata pe coloana B de la randul 1 in jos
- Sa se introduca variabila (Text Box) pana unde se executa j

Aceast secven este executat pn cnd condiia este ndeplinit i anume:
La prima execuie i=0, se verific dac i >=2 i cum nu este adevrat, se incrementeaz i cu o
unitate (i=i+1) => i=1; la a doua execuie i=1, se verific dac i>=2 i cum nu este adevrat se
face i=2. Cum variabila i devine egal cu 2 aceast instruciune nu mai este executat.

4. Proceduri i funcii

n general un program este format din proceduri (evenimente) i funcii. De multe ori ntr-
un program sunt secvene de cod care se repet. Pentru a evita scrierea repetat a acestor secvene,
se utilizeaz funciile i procedurile, care se scriu o singur dat i apoi se apeleaz dup nume de
cte ori este nevoie.

4.1. Proceduri

O procedur este un subprogram care efectueaz anumite operaii solicitate de programul
apelant, putnd returna anumite valori.
O procedur are urmtoarea sintax:

Private Sub numeProcedur ( Lista_de_parametri as tipData )
Bloc_instruciuni
End Sub

Exemplu 1 :

___________________________________
Private Sub mesaj (cuvant as String)
Dim msj as String
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 29/45
msj = Mesajul este : + cuvant
MsgBox msj
End Sub
__________________________________

Pe aceast procedur am numit-o mesaj i are un singur parametru cuvant de tipul String (ir).
Variabila msj este local i poate fi folosit doar n procedura mesaj. n procedura mesaj variabilei
msj i se atribuie valoarea Mesajul este : concatenat cu valoarea variabilei cuvant, care apoi este
afiat pe ecran cu procedura predefinit MsgBox.
Apelarea unei proceduri se face prin numele su urmat de lista de parametri efectivi. Spre
exemplu apelarea proceduri mesaj se face altfel :

Dim pm as String
Private Sub CommandButton1_Click()
pm = prima procedur
mesaj pm apelarea proceduri mesaj
End Sub
Apelarea proceduri mesaj cu parametru efectiv pm are ca efect afiarea pe ecran a textului:

Mesajul este: prima procedur
Observaie :
Variabila cuvant este un parametru formal, deoarece de la un apel la altul aceast variabila i
schimb valoarea ;
Variabila pm este parametru efectiv deoarece reprezint valoarea cu care programul lucreaz
efectiv;
Parametrul formal i parametrul efectiv trebuie, obligatoriu, s fie de acelai tip.

Exemplu 2 :

______________________________________________________
Private Sub mesaje ( cuvant1 as String , cuvant2 as String )
Dim msj1 as String , msj2 as String
msj1 = Primul mesaj este : + cuvant1
msj2 = Al doilea mesaj este : + cuvant2
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 30/45
MsgBox msj1
MsgBox msj2
End Sub
_______________________________________________________
Procedura mesaje are doi parametri i anume cuvant1 i cuvant2. Variabilele msj1 i msj2 sunt
locale i pot fi folosite doar n aceast procedur. n procedur variabilei msj1 i se atribuie
valoarea Primul mesaj este concatenat cu valoarea parametrului cuvant1, iar variabilei msj2 i
se atribuie valoarea Al doilea mesaj este concatenat cu valoarea parametrului formal msj2.
Dup aceasta, valorile variabilelor msj1 i msj2 sunt afiate pe ecran cu procedura predefinit
MsgBox.
Apelarea acestei proceduri se face in modul urmtor :

Dim pm1 as String , pm2 as String
Private Sub CommandButton1_Click()
pm1 = prima procedur
pm2 = a doua procedur
mesaje pm1 , pm2 apelarea procedurii mesaje
End Sub

Apelarea procedurii mesaje cu parametri efectivi pm1, pm2 are ca efect afiarea pe ecran :
Primul mesaj este : prima procedur
Al doilea mesaj este : a doua procedur

4.2. Funcii

O funcie este un subprogram care calculeaz i returneaz programului apelant o singur
valoare. Aceast valoare este asociat numelui funciei.
Sintaxa unei funcii este urmtoarea :

Private Function numeFuncie(lista_parametri as tipDat1) as tipDat2
Bloc_instruciuni
NumeFuncie = val
End Function

@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 31/45
Unde numeFuncie reprezint numele propriu-zis al funciei, lista_parametri reprezint o list de parametri
de tipul tipDat1 iar val este o valoare de tipul tipDat2 pe care funcia o ntoarce n programul apelant.

Exemplu :

______________________________________________________________________
Private Function salariu(nr_ore as Integer , impozit as Single) as Single
Dim sal as Single
sal = nr_ore * 20
sal = sal impozit
salariu = sal
End Function

Aceast funcie are doi parametri: nr_ore de tipul Integer i impozit de tipul Single.
Ea returneaz un rezultat de tipul Single - salariu. Variabila local sal este folosit pentru a calcula un
salariu. Dup ce s-a calculat salariul, se asociaz valoarea salariului cu numele funciei (salariu = sal).
Apelarea unei funcii se face prin numele funciei urmat n parantez de lista de parametri efectivi.

Exemplu :

Dim n_ore as Integer
Dim imp as Single
Dim valoare_sal as Integer
Private Sub CommandButton1_Click()
n_ore = 200
imp = 900
valoare_sal = salariu(n_ore , imp) > apelul funciei salariu
MsgBox valoare_sal
End Sub
TEMA: -Sa se introduca de la tastatura nr . de ore lucrate.
-Sa se introduca de la tastaura tariful orar.
-Sa se imparta impozitul in trei grupe de impozitare, iar acesta s fie citit din celule.
-Numarul de ore sa fie citit dintr-un tabel cu zilele lucrate si nr. de ore pe ziua respectiva.
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 32/45
Prin apelul funciei salariu s-a reinut n variabila valoare_sal valoarea returnat de funcia salariu pentru parametri
efectivi n_ore i imp. Dup aceasta, valoare_sal va fi afiat pe ecran cu ajutorul procedurii speciale MsgBox.

Observaie :
apelarea unei funcii se poate face numai n membrul drept al unei operaii de atribuire.

5. Aplicaii VBA

In acest capitol vom realiza o serie de aplicaii ce se pot constitui n puncte de plecare
pentru realizarea unor aplicaii personalizate, n funcie de necesitile fiecrui utilizator n parte.


5.1. Aplicaia 1 Afiarea valorii i adresei celulei curente

Aceast aplicaie va afia noua valoare i adresa unei celule ori de cte ori este modificat.
Pentru acesta vom apela la evenimentul Change al foii de lucru curente (WorkSheet). Acest
eveniment este declanat dup ce valoarea unei celule a fost modificat.

Observaie:
ntotdeauna obiectul care desemneaz foaia de lucru activ din lista derulant cu controale
indiferent de numele acesteia este WorkSheet.
Pentru realizarea acestei aplicaii nu este nevoie de nici un control, ci trebuie doar editat un cod
pentru evenimentul Change al foii de calcul.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim adresa_cel As Variant
Dim continut_cel As Variant
Dim mesaj As String
adresa_cel = Target.Address
continut_cel = Target.Value
mesaj = "Valoarea celulei " + Cstr(adresa_cel) + " este acum " + Cstr(continut_cel)
MsgBox mesaj
End Sub
Dac modificm valoarea unei celule va fi afiat un mesaj care conine adresa i noua valoare a
celulei.
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 33/45



5.2. Aplicaia 2 Calcularea numrului nregistrrilor nevide dintr-o foaie de calcul

Vom realiza o aplicaie care va afia numrul de nregistrri nevide ale unei foi de calcul
presupunnd c acestea sunt aezate n ordine. Numrul de nregistrri va fi afiat folosind un
buton de comand. Pentru a afla numrul de nregistrri nevide construim o funcie care
returneaz acest numr.

Private Function numar_inr() As Integer
Dim inc as Integer
inc = 1
Do While Feuil1.Cells(inc, 1) <> ""
inc = inc + 1
Loop
numar_inr = inc - 1
End Function
Aceast funcie folosete o variabil inc care se incrementeaz atta timp ct coninutul celulei
din linia inc i coloana 1, nu este nul. Dup ce instruciunea While este executat valoarea
returnat de funcie este egal cu valoarea variabilei inc-1.

Observaie:
Valoarea returnat de funcie este inc-1 deoarece incrementarea s-a nceput de la 1 i nu de la
zero.
Incrementarea se ncepe de la unu deoarece celula cu adresa (0, 1) nu exist.
n continuare vom scrie codul pentru evenimentul Click al butonului de comand.
Valoarea celulei A1 a fost schimbat
din celula1 n aaaa
Dup ce celula A1 nu mai este celula
activ , va fi afiat acest mesaj.
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 34/45

Private Sub CommandButton1_Click()
Dim nr as Integer
nr = numar_inr
MsgBox nr
End Sub

Valoarea returnat prin apelarea funciei numar_inr este reinut n variabila nr, care va fi afiat
pe ecran.



5.3. Aplicaia 3 Cutarea automat a unui cuvnt citit de la tastatur

Vom realiza o aplicaie care va cuta ntr-o foaie de calcul un cuvnt (citit de la tastatur)
i va returna un mesaj dac acest cuvnt este gsit sau un alt mesaj dac nu este gsit. Afiarea
rezultatelor se va face cu ajutorul unui buton de comand. Pentru realizarea acestei aplicaii vom
folosi funcia din aplicaia 4 numar_inr.
Dim nume_c As String
Dim apar As Integer
Dim msj As String
Dim k As Integer
Private Sub CommandButton1_Click()
nume_c = InputBox("Introduceti numele : ")
For k = 1 To numar_inr
Ultima nregistrare
Numrul de nregistrri
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 35/45
If ActiveSheet.Cells(k, 1) = nume_c Then
apar = apar + 1
ActiveSheet.Cells(k, 1).Interior.Color = vbGreen
End If
Next k
If apar <> 0 Then
msj = "Numele " + nume_c + " a fost gasit de " + CStr(apar) + " ori"
MsgBox msj
Else
msj = "Numele " + nume_c + " nu a fost gasit"
MsgBox msj
End If
End Sub
_______________________________________
Private Function numar_inr() As Integer
Dim inc As Integer
inc = 1
Do While ActiveSheet.Cells(inc, 1) <> ""
inc = inc + 1
Loop
numar_inr = inc - 1
End Function
TEMA: -Inserarea a inc 2 coloane si cautarea dupa oricare dintre ele.
-Folosirea functiilor Ucase si Lcase.
-Introducerea unor butoane radio in functie de care sa se coloreze rezultatele.
-Afisarea in etichete a rezultatului gasit si de cate ori a fost gasit.
n variabila nume_c este reinut valoarea citit de la tastatur, iar n variabila apar sunt reinute
numrul de apariii al numelui cutat nume_c. Dac valoarea lui apar este diferit de zero
atunci nseamn c numele a fost gsit de un numr de ori, iar celulele unde apare acest nume vor
fi colorate n rou i este afiat un mesaj. Dac valoarea variabilei apar este zero atunci numele nu
a fost gsit i este afiat un alt mesaj.

@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 36/45


5.4. Aplicaia 4 Folosirea casetei list si controlului de tip list derulant.
Caseta lista (list box) si controlul de tipul list derulant (combo box) ofera utilizatorilor
posibilitatea de a alege obiecte dintr-o lista. Exista doua diferente majore intre un combo box si
un list box. Prina diferenta o constituie faptul ca lista derulanta arata continutul numai atunci
cand este desfasurata (click pe sageata din dreapta listei). A doua diferenta este ca din caseta
lista se pot selecta mai multe obiecte, in timp ce folosind controlul de tipul list derulant se
poate selecta un singur obiect.
Pentru a ilustra lucrul cu liste vom crea un exemplu ce va conine urmtoarele obiecte:
Un formular UserForm1, un buton de comand CommandButton1, o list combo
ComboBox1 i o list simpl ListBox1, ca n figura de mai jos:



Aplicaia va funciona astfel:
La deschiderea fiierului Excel va fi afiat formularul UserForm1.
La fiecare apsare de buton va fi ncrcat n cele dou liste ComboBox1 i ListBox1 un
ir de caractere de forma modelXX, unde XX este un numr generat aleator cuprins ntre 1 i
20.
Codul este urmtorul:
Private Sub Workbook_Open()
UserForm1.Show
End Sub

Dim nume_nou As String
Dim msg As String
Dim nr As Integer
Numele cutat
Mesajul afiat
UserForm1
ComboBox1
ListBox1
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 37/45

Private Sub CommandButton1_Click()
nr = Int(20 * Rnd) + 1 ' genereaz un nr. ntreg aleator ntre 1 i 20
nume_nou = "Model" + CStr(nr) ' CStr convertete variabilele numerice n variabile de
tip ir
ComboBox1.AddItem nume_nou

ListBox1.AddItem nume_nou

End Sub

TEMA: -Sa se introduca in foaua de calcul un firmular.
-Introducere de butoane in acesta (ComboBox , ListBox , ComandButon....)
-Apelarea formularului in alta foaie de calcul cu ajutorul unui buton.

5.5. Aplicaia 5 Actualizarea dinamic a unui grafic
Vom concepe o aplicaie care realizeaz actualizarea dinamic a unui grafic. Aceast
aplicaie este util n cazul graficelor care sunt des modificate (sunt inserate rnduri/nregistrri i
coloane/cmpuri noi).
Aplicaia cuprinde o singur foaie de calcul pe care se afl 3 serii de date i un buton Command1
numit Actualizare.
Codul corespunztor aplicaiei este urmtorul.:
Private Sub CommandButton1_Click()

Call cauta(nr_c, nr_r) ' determina cte rnduri i coloane avem ocupate
zona = "A1:" + Chr(64 + nr_c) + CStr(nr_r) ' Stabilete zona de date, iar chr(64) = "A",
chr(65)="B" ... etc.
Call grafic(zona) ' apeleaza funcia de trasare a graficului

End Sub


Function cauta(c, r)
r = 1
Do Until Me.Cells(r, 1) = ""
r = r + 1
Loop
r = r - 1
c = 1
Do Until Me.Cells(1, c) = ""
c = c + 1
Loop
c = c - 1
End Function

Function grafic(z)
Range(z).Select selecteaz zona de date

@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 38/45
On Error Resume Next 'in caz de eroare merge mai departe
Me.ChartObjects.Delete ' sterge toate graficele din foaia activ
Charts.Add 'creaz un grafic nou
Observaie: Liniile de cod urmtoare au fost generate printr-un macro, iar dup ce am observat
logica lor am operat asupra lor modificrile dorite

With ActiveChart

.HasTitle = True
.ChartTitle.Characters.Text = "Grafic productie" ' titlul graficului
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Zile" 'explicaia de pe abcis
(categorie)
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Buc." ' explicaie pentru ordonat
(valoare)
.ChartType = xlLineMarkers ' indicm tipul graficului
.SetSourceData Source:=Sheets("Foaie1").Range(z), PlotBy:=xlColumns 'indicm sursa de
date
.SeriesCollection(1).Name = "=""Depart.1""" ' Legenda
.SeriesCollection(2).Name = "=""Depart.2"""
.SeriesCollection(3).Name = "=""Depart.3"""
.Location Where:=xlLocationAsObject, Name:="Foaie1" ' indicm locaia graficului

'Observaie: Trebuie pstrat aceast ordine n interiorul lui with ... end with
End With
End Function

TEMA: -Creati un tabel asemanator (din exemplu dat) cu actualizare automata.
-Pe graficul initial din exemplu; la zile sa scrie data si sa afiseze data din ziua resptiva.
-Titlul sa fie inserat dintr-o caseta text.

5.6. Aplicaia 6 Crearea unui configurator automat

Vom concepe o aplicaie care realizeaz completarea unei liste de componente a cror valoare va
fi nsumat. Aplicaia este util n realizarea de configuraii specifice pentru un echipament
(automobil, calculator etc.) i calcularea preului acestuia.
Aplicaia cuprinde dou foi de calcul. Prima foaie conine lista componentelor i preurile
acestora, iar n foaia a doua se realizeaz calculul listei particularizate.
In prima foaie de calcul sunt dou butoane: unul pentru adugare elemente, iar cellalt pentru
reiniializare.
Codul corespunztor aplicaiei este:
1. Pentru prima foaie de calcul
Dim cnt As Integer
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 39/45

Private Sub Adauga_Click() 'procedura se activeaz prin click pe butonul "Adauga" (evenimentul
click)

Dim x As Integer, y As Integer
Dim reper As String, valoare As Single 'Declarare variabile

cnt = cnt + 1 ' cnt= numr nregistrri adugate n foaia "Vizualizare"

x = ActiveCell.Row ' x = rndul celulei active
y = ActiveCell.Column ' y = coloana celulei active
If y <> 1 Then
y = 1 aduce celula activ n coloana 1
End If
reper = Feuil1.Cells(x, y) ' reper = numele reperului selectat
valoare = Feuil1.Cells(x, y + 1) ' valoare = valoarea reperului selectat
Feuil2.Cells(cnt, 1) = reper ' se adaug numele reperului n
foaia 2 "Vizualizare" pe poziia cnt
Feuil2.Cells(cnt, 2) = valoare ' se adaug valoarea reperului n foaia 2
"Vizualizare" pe poziia cnt
Feuil2.Cells(1, 3) = cnt ' se retine numrul de nregistrri din list
End Sub
Private Sub Terminare_Click() 'procedura se activeaz prin click pe butonul
"Terminare" (evenimentul click)
cnt = 0 'se initializeaz contorul ce retine nr.de nregistrri
Feuil2.Activate ' este activat foaia 2 "Vizualizare"
Feuil2.Cells.Select 'sunt selectate toate celulele din foaia 2
Selection.ClearContents ' terge coninutul zonei selectate
Feuil2.Cells(1, 1).Select ' selecteaz prima celul
Feuil1.Activate ' revenire n foaia 1 "Introducere"
End Sub
2. Pentru a doua foaie de calcul
Dim cnt As Integer
Private Sub Worksheet_Activate() 'Procedura se execut prin activarea foii 2
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 40/45
"Vizualizare"
Dim adresa As String, sel As String 'Declararea variabilelor
If Feuil2.Cells(1, 3) <> "" Then
cnt = Feuil2.Cells(1, 3) + 1
Else
Exit Sub
End If
'se verific dac exist nregistrri n foaia 2; dac sunt se adaug o linie pt.TOTAL; dac nu
sunt nregistrri se iese din procedur

Feuil2.Cells(cnt, 1) = "TOTAL" 'In foaia 2 pe rndul cnt, coloana 1 se scrie
"TOTAL"
adresa = "B" + CStr(cnt) ' se calculeaz poziia celulei ce va conine valoarea
total
sel = "B1:B" + CStr(cnt - 1) ' variabila sel conine adresa zonei de celule ce
vor fi totalizate
Range(sel).Select ' este selectat zona de celule dup care se va face totalul
Range(adresa).Activate 'Se activeaz celula unde va fi scris totalul
ActiveCell.Formula = "=SUM(" + sel + ")" ' n celula activ se insereaz
formula sum(sel)
Columns("A:A").EntireColumn.AutoFit ' se potrivete ntreaga coloan la
mrimea coninutului
Columns("B:B").EntireColumn.AutoFit
End Sub
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 41/45


Tema: -Depanare program cu F8.
-Modificarea configuratorului prin adaugarea altor doua coloane (cantitate si valoare)
si a capatului de tabel.

5.7. Aplicaia 7 Crearea unui formular i completarea automat a acestuia

Vom crea o aplicaie care realizeaz completarea automat a unei cereri, n funcie de un nume
care este citit de la tastatur. Aceast aplicaie va folosi dou foi de calcul. n cea de-a doua foaie
de calcul se introduc datele care sunt completate n cerere. n prima foaie de calcul este realizat
ablonul care va fi completat. Acest ablon este format dintr-un antet i dou butoane de
comand. Primul buton va fi utilizat pentru completarea automat a datelor, iar cel de-al doilea
pentru printarea acestei cereri. Pentru realizarea acestei aplicaii vom utiliza funciile numar_inr i
gsete din aplicaiile anterioare.
Codul corespunztor primei foi de calcul este urmtorul:

' Declar variabilele nrinreg - numar inregistrari si zona - zona cu date
Dim nrinreg As Integer: Dim zona As String
Private Sub Worksheet_Activate()
ListBox1.ColumnCount = 3
Call numar_inr(nrinreg)
zona = ("a1:c" & CStr(nrinreg))
ListBox1.List() = Foaie2.Range(zona).Value
Foaie1.Select
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 42/45
End Sub

Private Sub CommandButton1_Click()
'citirea datelor se face din list box, coloana 1, 2 sau 3
ListBox1.BoundColumn = 1
LbNume.Caption = ListBox1.Value
ListBox1.BoundColumn = 2
Lbsectia.Caption = ListBox1.Value
ListBox1.BoundColumn = 3
LbSalariu.Caption = ListBox1.Value

End Sub

Private Sub CommandButton2_Click()
Foaie1.PrintOut 1, 1, 1
End Sub
Private Function numar_inr(n) As Integer
Dim inc As Integer
inc = 1
Do While Foaie2.Cells(inc, 1) <> ""
inc = inc + 1
Loop
n = inc - 1
End Function
n evenimentul Click al butonului CommandButton2 este apelat metoda PrintOut a
primei foi de calcul. Aceast metod are trei parametri: primul parametru(From) indic numrul
pagini de la care ncepe printarea, al doilea parametru(To) indic numrul pagini pn la se
printeaz, iar cel de-al treilea reprezint numrul de copii care este printat. n aceast aplicaie
este printat o singur pagin, ntr-un singur exemplar. Prima foaie de calcul este prezentat in
imaginea de mai jos:

@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 43/45


TEMA: -Depanare program cu F8.
-Adaugarea in formular a unei functii pentru a afisa intr-o celula colana INDEX
a listei cu angajati (nr de ordine al inregistrarii).
-introducera in baza de date a inca 2 coloane -CNP si -MARCA (Generate aleator).
-Completarea formularului prin dubluclick pe lista.
-Modificati proprietatile PrintObject.
-Crearea unui buton pentru completarea automata a formularului , pentru toate
inregistrarile din baza de date.
5.8. Aplicaia 8. -Crearea unui tabel pivot.
Una din problemele des ntlnite n activitatea curent este necesitatea crerii de tabele
pivot.
Pentru a uura lucrul cu aceste tipuri de tabele vom imagina o aplicaie care ne va permite
cu uurin modificarea cmpurilor tabelului pivot.

Codul aplicaiei este urmtorul:

Dim campPag As String, campRow1 As String
Dim campCol1 As String, campDta As String
Dim camp
Cmpuri care vor fi
completate(celule care vor fi
completate)
Butonul CommandButton1
Butonul CommandButton2
@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 44/45
Dim Myarray(10)
Dim i As Integer, r As Integer

Private Sub Workbook_Open()
PivotFrm.pivotBtn.Enabled = False
i = 1
'Stabilim nr.de coloane nevide din foaia de lucru
camp = ActiveSheet.Cells(2, i)
Do While camp <> ""
camp = ActiveSheet.Cells(2, i)
i = i + 1
Loop
r = i - 3
'Stabilim nr.de coloane pentru listBox
PivotFrm.PivotLst.ColumnCount = 1
'Incarcam listBoxul cu date (aceste date sunt cele din capul de tabel)
For k = 0 To r
PivotFrm.PivotLst.AddItem (ActiveSheet.Cells(2, k + 1))
Next k

'Initializam campurile formularului
PivotFrm.PagTxt.Value = campPag
PivotFrm.RandTxt.Value = campRow1
PivotFrm.ColTxt.Value = campCol1
PivotFrm.DateTxt.Value = campDta

'Selectam primul element din listBox
PivotFrm.PivotLst.ListIndex = 0

'PivotFrm.PivotLst.List(k) = Myarray()

PivotFrm.Show
'PivotFrm.Visible = True

End Sub

@2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340
www.formare.ro 45/45







Tabelul pivot obtinut va arata asemanator cu cel din imaginea de mai jos:

S-ar putea să vă placă și