Sunteți pe pagina 1din 45

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

CUPRINS

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, propriet i, metode, evenimente------------------------------------------------------------------------ 15
2.6. Proceduri i func ii predefinite --------------------------------------------------------------------------------------------- 17
2.6.1. InputBox ------------------------------------------------------------------------------------------------------------------ 17
2.6.2. MsgBox ------------------------------------------------------------------------------------------------------------------- 18
2.7. Afi area valorii unei celule-------------------------------------------------------------------------------------------------- 18
2.8. Copierea unei zone de celule cu ajutorul unui buton de comand ---------------------------------------------------- 20
3. Instruc iuni VBA ------------------------------------------------------------------------------------------------------------------- 22
3.1. Instruc iunea de decizie If ..Then...Else (Dac ….Atunci…..In caz contrar)---------------------------------------- 22
3.2. Instruc iunea de decizie Select Case … End Select --------------------------------------------------------------------- 24
3.3. Instruc iunea repetitiv For … Next (pentru.........urmatorul) --------------------------------------------------------- 25
3.4. Instruc iunea repetitiv Do While … Loop------------------------------------------------------------------------------- 26
3.5. Instruc iunea repetitiv Do Until … Loop -------------------------------------------------------------------------------- 27
4. Proceduri i func ii ----------------------------------------------------------------------------------------------------------------- 28
4.1. Proceduri ----------------------------------------------------------------------------------------------------------------------- 28
4.2. Func ii -------------------------------------------------------------------------------------------------------------------------- 30
5. Aplica ii VBA ---------------------------------------------------------------------------------------------------------------------- 32
5.1. Aplica ia 1 – Afi area valorii i adresei celulei curente ---------------------------------------------------------------- 32
5.2. Aplica ia 2 – Calcularea num rului înregistr rilor nevide dintr-o foaie de calcul --------------------------------- 33
5.3. Aplica ia 3 – C utarea automat a unui cuvânt citit de la tastatur --------------------------------------------------- 34
5.4. Aplica ia 4 – Folosirea casetei list si controlului de tip list derulant . -------------------------------------------- 36
5.5. Aplica ia 5 – Actualizarea dinamic a unui grafic ---------------------------------------------------------------------- 37
5.6. Aplica ia 6 – Crearea unui configurator automat ------------------------------------------------------------------------ 38
5.7. Aplica ia 7 – Crearea unui formular i completarea automat a acestuia ------------------------------------------- 41
5.8. Aplica ia 8. -Crearea unui tabel pivot. ------------------------------------------------------------------------------------ 43

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

1. INTRODUCERE

Acest curs î i propune s v familiarizeze cu op iunile 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 informa ii vor completa cuno tin ele deja acumulate privind lucrul cu foile de calcul
tabelar MS Excel, astfel încât 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 func ionalitatea 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 c tre utilizator pentru a
automatiza unele activit i 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 p rea f r sens, nu este greu de presupus ca
aplica ia va spune calculatorului s adune doua numere si apoi s afi eze 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 (rândul 4 cu rândul 5) va face ca programul sa nu afiseze
rezultatul, deoarece afisarea se face inaintea adunarii propriu-zise.

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

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 cuvântului 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 lec ii 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.

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

Tipuri de date
La declararea sau crearea unei variabile, se va tine cont de tipul de date ce va fi p strat 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 urm tor:

Tip dat Interval de valori

Boolean Adevarat (True) sau fals(False)

Byte 0–255.

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

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

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 func ii);
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 : propriet i, 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. b i
- Suprafa a
- 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) Propriet ile reprezint caracteristicile obiectului respectiv, putând fi de orice tip,


inclusiv Object (obiect). Aceste propriet i pot fi modificate. Modificarea unui parametru se face
altfel :

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

numeObiect.numeProprietate = Valoare
In tabelul de mai jos sunt prezentate sintetic principalele propriet i ale unui obiect VBA:

Nume proprietate/parametru Descriere


Color Acest parametru indic culoarea obiectului; de obicei culoarea
este stabilit cu ajutorul tabelei de propriet i, care pune la
dispozi ia utilizatorului o serie de culori standard.
Caption Reprezint textul care este afi at 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 în l imea obiectului i este un parametru de tipul
Single.
Left Reprezint coordonata (de pe axa X) a col ului stânga sus a
obiectului; Acest parametru este de tipul Single.
PrintObject Stabile te 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 col ului stânga sus a
obiectului; Acest parametru este de tipul Single.
Width Reprezint lungimea obiectului i este un parametru de tipul
Single.
Visible Stabile te 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.

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

Exemplu 1:

CommandButton.Caption = „START”

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

b) Metodele sunt proceduri sau func ii care pot s aib un num r diferit de parametri i
reprezint opera iile care se pot efectua asupra unui obiect. Apelarea unei metode o vom ilustra
prin câteva 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
c reia se mut obiectul Foaie1 pe pozi ia a doua în registrul de calcul.

Observa ie: Metodele obiectelor pot fi doar apelate nu i modificate.

c) Evenimentele sunt proceduri care pot s aib un num r diferit de parametri i reprezint
reac ia obiectului la diferite ac iuni ale utilizatorului; procedura se apeleaz automat la o ac iune 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 urm toarea:

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

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 declan at în momentul care se efectueaz
un click pe obiect.
DoubleClick Acest eveniment este declan at în momentul în care se
efectueaz un dubluclick pe obiect.
MouseDown Acest eveniment este declan at în momentul în care butonul
stâng/drept al mous-ului este ap sat iar cursorul mous-ului se
afl pe obiect .
MouseMove Acest eveniment este declan at în momentul în care mous-ul
este mi cat pe obiect.
MouseUp Acest eveniment este declan at în momentul în care butonul
stâng/drept al mous-ului nu mai este ap sat 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 afi eaz pe ecran astfel:


– din meniul Outils se alege op iunea Personaliser;
– va ap rea o fereastr cu trei butoane din care se alege op iunea Barres d’outils i se bifeaz
op iunea Commandes;

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

Bara de controale este ilustrat în figura de mai jos.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Aceast bar este format din trei p r i distincte i anume: prima parte este format din
butoane func ionale (1, 2 i 3) utile pentru conceperea programului în VBA; a doua parte este
format din butoanele 4 – 14, corespunz toare tipurilor de controale uzuale (obiectelor fizice din
program) i a treia parte cuprinde doar butonul 15 care este folosit pentru a ad uga noi controale.
Butonul 1 este folosit pentru intrarea/ie irea din modul de proiectare. Dac acest buton
este activat, în foaia de calcul pot fi ad ugate noi controale (obiecte fizice). În acest caz
controalele de pe foaia de calcul nu sunt active. În cazul în care butonul nu este ap sat controalele
sunt active, iar programul poate fi rulat.
Butonul 2 este folosit pentru afi area unui tabel cu ajutorul c ruia se pot vizualiza
principalele propriet i (parametri) ale controlului activ din foaia de calcul sau chiar al foii de
calcul.

Numele i tipul obiectului pentru


care sunt afi ate propriet ile

Valoarea unui
parametru(proprietate)

Numele parametrului
( propriet ii )

Butonul 3 este folosit pentru activarea editorului


de cod VBA.
Observa ie: Pentru inserarea unei control pe foaia de calcul se apas pe butonul corespunz tor
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).

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

Descrierea controalelor

Butonul 4 reprezint un control de tipul c su de selectare (CheckBox) i are dou st ri


selectat sau deselectat. Se utilizeaz atunci când este necesar selectarea uneia sau mai multor
op iuni 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 instruc iuni). Este unul dintre cele mai folosite
controale.
Butonul 7 este un control de tipul buton radio (OptionButton ) i are dou st ri
selectat/neselectat. Dac pe o foaie de calcul se g sesc 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
afi area 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 ad uga 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 converte te variabilele numerice în variabile de tip ir
ComboBox1.AddItem nume_nou
ListBox1.AddItem nume_nou
End Sub

Not : Apostroful ‘ reprezint un comentariu. Comentariile nu influen eaz logica programului,


având rol exclusiv de informare. Este indicat s folosim cât mai multe comentarii explicative,
astfel încât la o modificare ulterioar a aplica iei s ne putem aduce aminte u or logica de care
ne-am folosit la programarea ini ial .

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

În acest exemplu, prin evenimentul click corespunz tor 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 ad ugat în lista derulant (ComboBox1) i în lista simpl (ListBox1).

Butonul 10 reprezint un control de tipul buton comutator (ToggleButton), care are dou
st ri: ap sat i neap sat.
Butonul 11 reprezint un control de tipul buton de incrementare/decrementare
(SpinButton) i incrementeaz (cre te)/decrementeaz (descre te) valoarea parametrului Value de
câte ori este ap sat una din cele dou s ge i(î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 stabile te 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 afi area 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 con ine acest control.
Butonul 15 (More controls) este folosit pentru a ad uga noi controale care nu se
g sesc în bara standard. Dup ce se apas click pe buton va ap rea o list derulant din care se
poate alege controlul dorit.

Butonul More controls

Un control din list

Lista derulant

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.

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

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.

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

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:

cmdExemplu

Exemplu

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.

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

2.4. Editorul VBA


Dup inserarea controalelor în foaia de calcul, urm torul pas îl constituie scrierea codului
VBA pentru fiecare control (obiect) în parte.
Editorul VBA se acceseaz prin ap sarea combina iei de taste Alt + F11. Fereastra de
vizualizare con ine: o bar de titlu, o bar de meniuri, o bar standard i dou cadrane. În cadranul
din partea stâng sunt afi ate foile de lucru.

Lista
evenimentelor
obiectului

Lista cu obiecte
Cadranul foilor de Cadran de editare
calcul cod VBA

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

Dac dorim s acces m codul corespunz tor unei anumite foi de lucru se execut dublu-
click pe iconi a foii respective. În cadranul din partea dreapt se scrie codul corespunz tor foii
respective.

2.5. Foaia de calcul, propriet i, metode, evenimente

Foaia de calcul este principalul obiect de lucru în programarea scripturilor Excel.


Principalele propriet i 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 rândul i coloana j; j
poate fi atât de tip integer cât i string
Range("celul 1:celul 2") Este un parametru de tip obiect, prin care se face o referire la o
zon de celule.

În editorul VBA propriet ile foii de calcul sunt afi ate automat într-o list derulant dup ce este
scris numele foii de calcul urmat de delimitatorul punct, ca în exemplul ce urmeaz :

Proprietate a
foii de calcul

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

Feuil1.Name = " Foaie1 "


' numele primei foi de calcul este schimbat cu Foaie1

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

MsgBox Feuil1.Cells(2, "A")


' afi eaz con inutul celulei de pe rândul 2, coloana A

Feuil1.Cells(4, 2)= "100"


' Valoarea celulei de pe rândul 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, Realizeaz tip rirea foii de calcul la care se face referire;
To, Copies
Aceast metod are 3 parametri de tip întreg; From indic num rul pagini de
la care se începe printarea; To indic num rul pagini pân la care se printeaz ;
Copies reprezint num rul de copii de tip rit;

În editorul VBA metodele foii de calcul sunt afi ate automat într-o list derulant dup ce este
scris numele foii de calcul urmat de delimitatorul punct.

Metod a foii
de calcul

Exemple:
Feuil1.Activate
' realizeaz activarea foii de calcul Feuil1
Feuil2.Delete
' realizeaz tergerea foii de calcul Feuil2

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

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 func ii predefinite


2.6.1. InputBox
Unele proceduri sau func ii nu mai trebuie s fie definite deoarece ele sunt recunoscute implicit de
calculator. Principalele func ii i proceduri predefinite sunt : InputBox i MsgBox.
Func ia predefinit InputBox : este o func ie cu ajutorul c reia se introduc date de la tastatura ( se cite te
de la tastatur ). Vom prezenta în cele ce urmeaz un exemplu prin care vom ilustra modul în care se poate
apela func ia MsgBox:
Dim nume as String
------------------------------
nume = InputBox(“Introduceti numele :”) ‘-> ne solicita sa atribuim o valoare variabilei nume
-------------------------------
Apelarea func iei va afi a pe ecran o fereastr de dialog , ca în figura de mai jos. În aceast fereastr se g se te o caset în
care se introduce datele.

Mesajul pentru Butonul pe care se apas


introducerea datelor pentru acceptarea datelor

Butonul pe care se apas


pentru anularea datelor

Caseta pentru
introducerea datelor

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

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 afi are 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 afi area pe ecran a ferestrei de mai jos:

Textul afi at

Butonul pe care se apas pentru


ca aceast fereastr s se închid

2.7. Afi area valorii unei celule

Vom realiza o prim aplica ie care va afi a pe ecran valoarea unei celule din alt foaie de
calcul decât cea care este activ .
Pentru acesta vom crea un nou fi ier Excel, iar în prima foaie de calcul vom insera un
buton de comand , c ruia îi vom schimba parametrul Caption (din cel implicit CommandButton1
în „ Afi eaz ” ) cu ajutorul tabelei de propriet i (parametri).

Tabela de propriet i
(parametri)

Butonul de comand cu
parametrul Caption
schimbat

Parametrul Caption al
butonului de comand a fost
schimbat din
CommandButton1 în Afiseaz

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

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

Controlul CommandButton1

Lista derulant cu obiectele care


se afl pe prima foaie de calcul

Declararea evenimentului Click


corespunz tor controlului
CommandButton1

Codul corespunz tor evenimentului Click este urm torul:

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 con inut_celula se declar ca fiind de tip Variant
deoarece în ea se re ine con inutul celulei (care poate fi de orice tip), iar Feuil2 este numele celei
de-a doua foi de calcul din care vom afi a valoarea celulei aflat pe primul rând 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 con inutul primei celule din a doua
foaie de calcul va fi afi at pe ecran.

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

Modul de proiectare este inactiv

Butonul CommadButton1 din


prima foaie de calcul

Afi area pe ecran a con inutului


primei celule din cea de-a doua
foaie de calcul cu ajutorul
func iei MsgBox

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

În a doua aplica ie 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 fi ier 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 col ul stânga sus, urmat de “ :” , dup care se scrie adresa celulei aflate în col ul
dreapta jos al zonei de celule. Parametrul Range fiind de tip Object are i el la rândul lui mai
mul i parametri, între care i parametrul Value. Acest parametru face referire la con inutul
celulelor din zona de memorie respectiv .

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

Zona de celule din prima


foaie de calcul în care a fost
copiat con inutul unei zone de
celule din cea de-a doua foaie
de calcul

Exemple:
Exemplul 1.
Private Sub Worksheet_Activate()
MsgBox "a fost activat foaia de calcul"
End Sub
În acest exemplu este afi at un mesaj atunci când 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

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

3. Instruc iuni VBA

Într-un program datele sunt prelucrate cu ajutorul instruc iunilor.


Instruc iunile se împart în dou categorii: instruc iuni de decizie i instruc iuni repetitive;
3.1. Instruc iunea de decizie If ..Then...Else (Dac ….Atunci…..In caz contrar)

Instruc iunea If ..Then...Else are urm toarea sintax :


If cond1 then
Bloc_instruc iuni (a)
End If
sau
If cond1 then
Bloc_instruc iuni1
Else (b)
Bloc_instruc iuni2
End If

În cazul (a) instruc iunea evalueaz condi ia cond1 i dac este adev rat execut blocul de
instruc iuni Bloc_instruc iuni, iar dac este fals atunci instruc iunea nu execut nimic.
În cazul (b) instruc iunea evalueaz condi ia cond1 i dac este adev rat execut blocul de
instruc iuni Bloc_instruc iuni1, iar dac este fals execut blocul de instruc iuni
Bloc_instruc iuni2.
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”

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

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 secven e de cod. Ini ial se
atribuie valorile i=9, j=100 i k=0, apoi se execut instruc iunea If în modul urm tor : se verific
dac i<100 i cum aceast condi ie este adev rat se face u=” a” i k=1 ( se execut prima ramur
a instruc iuni 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 secven e de cod. Se face i=5, apoi
se execut prima instruc iune If dup cum urmeaz : se verific dac i <3 i cum aceast condi ie
nu este îndeplinit se face u = “ b” ( se execut a doua ramur a instruc iuni If). A doua

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

instruc iune If nu se execut deoarece u = “ b” i condi ia nu este îndeplinit (iar aceast


instruc iune If nu are ramura Else).

3.2. Instruc iunea de decizie Select Case … End Select


Instruc iunea Select Case ….. End Select are urm toarea 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 acela i tip cu cel al variabilei val sau expresii care returneaz un rezultat de acela i tip cu cel al
variabilei val.
Aceast instruc iune se execut astfel: dac val se g se te în lista sau intervalul de valori sau
expresii val1, val2, … atunci se execut Bloc_instruc iuni1; dac val se g se te în lista sau
intervalul de valori sau expresii lis1, lis2, … atunci se execut Bloc_instruc iuni2 etc.; dac val
nu se g se te în nici una dintre aceste liste de valori instruc iunea 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

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

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 secven ei de cod îl vom prezenta în cele ce urmeaz . Se face i = 35 apoi
se execut instruc iunea Select Case altfel: se verific dac variabila i este egal cu 10 sau cu 20,
dar cum i = 35 se continu executarea instruc iuni verificându–se dac variabila i apar ine
intervalului (30,50]; cum i este egal cu 35 se face u = ” abcd” . Similar se execut instruc iunea
CASE pân la cap t.

3.3. Instruc iunea repetitiv For … Next (pentru.........urmatorul)


Instruc iunea For … . Next are urm toarea sintax :

For contor = val1 To val2


Bloc_instruc iuni
Next
unde contor, val1, val2 sunt toate de acela i tip. Aceast instruc iune realizeaz executarea
Bloc_instruc iuni de val2 – val1 ori; instruc iunea are astfel un num r cunoscut de repet ri.
Observa ie:
val2 trebuie s fie mai mare decât val1 pentru ca instruc iunea s se execute; dac val2 este mai
mic decât val1 atunci Bloc_instruc iuni 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

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

m = m+i
Next
End Sub
Aceast secven de cod se execut de cinci ori astfel : prima execu ie face k = 1 i m = 0 + 1;
a doua execu ie face k = 2 i m = 1 + 2; a treia execu ie face k = 3 i m = 3 +3; a patra execu ie
face k = 4 i m = 3 + 4; a cincea execu ie 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. Instruc iunea repetitiv Do While … Loop
Instruc iunea Do While … Loop are urm toarea sintax :

Do While condi ie
Bloc_instruc ini
Loop

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

Aceast instruc iune execut Bloc_instruc ini atâta timp cât este îndeplinit condi ia.

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 .
Secven a este executat atâta timp cât variabila i este mai mic sau egal decât trei i anume:
la prima execu ie, când i=0, se verific dac este i <=3 i cum condi ia este îndeplinit se face
i=1; la a doua execu ie i=1 se verific dac i<=3 i cum este adev rat se face i =2;la a treia
execu ie i=2, se verific dac i<=3 i cum este adev rat se face i=3; la a patra execu ie i=3, se
verific dac i<=3 i cum condi ia este adev rat se face i=4. Deoarece variabila i a luat valoarea
4 aceast instruc iune nu mai este executat ;

3.5. Instruc iunea repetitiv Do Until … Loop


Instruc iunea Do Until … Loop are urm toarea sintax :

Do Until condi ie
Bloc_instruc iune
Loop

Aceast instruc iune execut Bloc_instruc ini pân când este îndeplinit condi ia.

Exemplu :

Dim j as Integer
Private Sub CommandButton1_Click()

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

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 pân când condi ia este îndeplinit i anume:
La prima execu ie i=0, se verific dac i >=2 i cum nu este adev rat , se incrementeaz i cu o
unitate (i=i+1) => i=1; la a doua execu ie i=1, se verific dac i>=2 i cum nu este adev rat se
face i=2. Cum variabila i devine egal cu 2 aceast instruc iune nu mai este executat .

4. Proceduri i func ii

În general un program este format din proceduri (evenimente) i func ii. De multe ori într-
un program sunt secven e de cod care se repet . Pentru a evita scrierea repetat a acestor secven e,
se utilizeaz func iile i procedurile, care se scriu o singur dat i apoi se apeleaz dup nume de
câte ori este nevoie.

4.1. Proceduri

O procedur este un subprogram care efectueaz anumite opera ii solicitate de programul


apelant, putând returna anumite valori.
O procedur are urm toarea sintax :

Private Sub numeProcedur ( Lista_de_parametri as tipData )


Bloc_instruc iuni
End Sub

Exemplu 1 :

___________________________________
Private Sub mesaj (cuvant as String)
Dim msj as String

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

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
afi at pe ecran cu procedura predefinit MsgBox.
Apelarea unei proceduri se face prin numele s u 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 afi area pe ecran a textului:

Mesajul este: prima procedur


Observa ie :
– 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 acela i 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

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

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 afi ate pe ecran cu procedura predefinit
MsgBox.
Apelarea acestei proceduri se face in modul urm tor :

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 afi area pe ecran :
Primul mesaj este : prima procedur
Al doilea mesaj este : a doua procedur

4.2. Func ii

O func ie este un subprogram care calculeaz i returneaz programului apelant o singur


valoare. Aceast valoare este asociat numelui func iei.
Sintaxa unei func ii este urm toarea :

Private Function numeFunc ie(lista_parametri as tipDat 1) as tipDat 2


Bloc_instruc iuni
NumeFunc ie = val
End Function

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

Unde numeFunc ie reprezint numele propriu-zis al func iei, lista_parametri reprezint o list de parametri
de tipul tipDat 1 iar val este o valoare de tipul tipDat 2 pe care func ia 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 func ie 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 func iei (salariu = sal).
Apelarea unei func ii se face prin numele func iei 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 func iei 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.

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

Prin apelul func iei salariu s-a re inut în variabila valoare_sal valoarea returnat de func ia salariu pentru parametri
efectivi n_ore i imp. Dup aceasta, valoare_sal va fi afi at pe ecran cu ajutorul procedurii speciale MsgBox.

Observa ie :
– apelarea unei func ii se poate face numai în membrul drept al unei opera ii de atribuire.

5. Aplica ii VBA

In acest capitol vom realiza o serie de aplica ii ce se pot constitui în puncte de plecare
pentru realizarea unor aplica ii personalizate, în func ie de necesit ile fiec rui utilizator în parte.

5.1. Aplica ia 1 – Afi area valorii i adresei celulei curente

Aceast aplica ie va afi a noua valoare i adresa unei celule ori de câte ori este modificat .
Pentru acesta vom apela la evenimentul Change al foii de lucru curente (WorkSheet). Acest
eveniment este declan at dup ce valoarea unei celule a fost modificat .

Observa ie:
Întotdeauna obiectul care desemneaz foaia de lucru activ din lista derulant cu controale
indiferent de numele acesteia este WorkSheet.
Pentru realizarea acestei aplica ii 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 modific m valoarea unei celule va fi afi at un mesaj care con ine adresa i noua valoare a
celulei.

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

Valoarea celulei A1 a fost schimbat


din celula1 în aaaa

Dup ce celula A1 nu mai este celula


activ , va fi afi at acest mesaj.

5.2. Aplica ia 2 – Calcularea num rului înregistr rilor nevide dintr-o foaie de calcul

Vom realiza o aplica ie care va afi a num rul de înregistr ri nevide ale unei foi de calcul
presupunând c acestea sunt a ezate în ordine. Num rul de înregistr ri va fi afi at folosind un
buton de comand . Pentru a afla num rul de înregistr ri nevide construim o func ie care
returneaz acest num r.

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 func ie folose te o variabil inc care se incrementeaz atâta timp cât con inutul celulei
din linia inc i coloana 1, nu este nul. Dup ce instruc iunea While este executat valoarea
returnat de func ie este egal cu valoarea variabilei inc-1.

Observa ie:
Valoarea returnat de func ie 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 .

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

Private Sub CommandButton1_Click()


Dim nr as Integer
nr = numar_inr
MsgBox nr
End Sub

Valoarea returnat prin apelarea func iei numar_inr este re inut în variabila nr, care va fi afi at
pe ecran.

Num rul de înregistr ri

Ultima înregistrare

5.3. Aplica ia 3 – C utarea automat a unui cuvânt citit de la tastatur

Vom realiza o aplica ie care va c uta într-o foaie de calcul un cuvânt (citit de la tastatur )
i va returna un mesaj dac acest cuvânt este g sit sau un alt mesaj dac nu este g sit. Afi area
rezultatelor se va face cu ajutorul unui buton de comand . Pentru realizarea acestei aplica ii vom
folosi func ia din aplica ia 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

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

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 re inut valoarea citit de la tastatur , iar în variabila apar sunt re inute
num rul de apari ii al numelui c utat – nume_c. Dac valoarea lui apar este diferit de zero
atunci înseamn c numele a fost g sit de un num r de ori, iar celulele unde apare acest nume vor
fi colorate în ro u i este afi at un mesaj. Dac valoarea variabilei apar este zero atunci numele nu
a fost g sit i este afi at un alt mesaj.

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

Numele c utat

Mesajul afi at

5.4. Aplica ia 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 con ine urm toarele obiecte:
Un formular UserForm1, un buton de comand CommandButton1, o list combo
ComboBox1 i o list simpl ListBox1, ca în figura de mai jos:

UserForm1

ComboBox1

ListBox1

Aplica ia va func iona astfel:


La deschiderea fi ierului Excel va fi afi at formularul UserForm1.
La fiecare ap sare de buton va fi înc rcat în cele dou liste ComboBox1 i ListBox1 un
ir de caractere de forma „ modelXX” , unde XX este un num r generat aleator cuprins între 1 i
20.
Codul este urm torul:
Private Sub Workbook_Open()
UserForm1.Show
End Sub

Dim nume_nou As String


Dim msg As String
Dim nr As Integer

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

Private Sub CommandButton1_Click()


nr = Int(20 * Rnd) + 1 'genereazã un nr. întreg aleator între 1 i 20
nume_nou = "Model" + CStr(nr) 'CStr converte te 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. Aplica ia 5 – Actualizarea dinamic a unui grafic


Vom concepe o aplica ie care realizeaz actualizarea dinamic a unui grafic. Aceast
aplica ie este util în cazul graficelor care sunt des modificate (sunt inserate rânduri/înregistr ri i
coloane/câmpuri noi).
Aplica ia cuprinde o singur foaie de calcul pe care se afl 3 serii de date i un buton Command1
numit „ Actualizare” .
Codul corespunz tor aplica iei este urm torul.:
Private Sub CommandButton1_Click()

Call cauta(nr_c, nr_r) 'determina câte rânduri i coloane avem ocupate


zona = "A1:" + Chr(64 + nr_c) + CStr(nr_r) 'Stabile te zona de date, iar chr(64) = "A",
chr(65)="B" ... etc.
Call grafic(zona) 'apeleaza func ia 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

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

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
‘ Observa ie: Liniile de cod urm toare au fost generate printr-un macro, iar dup ce am observat
logica lor am operat asupra lor modific rile dorite

With ActiveChart

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

'Observa ie: Trebuie p strat 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. Aplica ia 6 – Crearea unui configurator automat

Vom concepe o aplica ie care realizeaz completarea unei liste de componente a c ror valoare va
fi însumat . Aplica ia este util în realizarea de configura ii specifice pentru un echipament
(automobil, calculator etc.) i calcularea pre ului acestuia.
Aplica ia cuprinde dou foi de calcul. Prima foaie con ine lista componentelor i pre urile
acestora, iar în foaia a doua se realizeaz calculul listei particularizate.
In prima foaie de calcul sunt dou butoane: unul pentru ad ugare elemente, iar cel lalt pentru
reini ializare.
Codul corespunz tor aplica iei este:
1. Pentru prima foaie de calcul
Dim cnt As Integer

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

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= numãr înregistr ri ad ugate în foaia "Vizualizare"

x = ActiveCell.Row 'x = rândul 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 pozi ia cnt
Feuil2.Cells(cnt, 2) = valoare 'se adaug valoarea reperului în foaia 2
"Vizualizare" pe pozi ia cnt
Feuil2.Cells(1, 3) = cnt 'se retine num rul de înregistr ri 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 înregistr ri
Feuil2.Activate 'este activatã foaia 2 "Vizualizare"
Feuil2.Cells.Select '
sunt selectate toate celulele din foaia 2
Selection.ClearContents ' terge con inutul 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

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

"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ã înregistr ri în foaia 2; dacã sunt se adaug o linie pt.TOTAL; dacã nu
sunt înregistr ri se iese din procedurã

Feuil2.Cells(cnt, 1) = "TOTAL" '


In foaia 2 pe rândul cnt, coloana 1 se scrie
"TOTAL"
adresa = "B" + CStr(cnt) 'se calculeaz pozi ia celulei ce va con ine valoarea
totalã
sel = "B1:B" + CStr(cnt - 1) 'variabila sel con ine 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 potrive te întreaga coloanã la
m rimea con inutului
Columns("B:B").EntireColumn.AutoFit
End Sub

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

Tema: -Depanare program cu F8.


-Modificarea configuratorului prin adaugarea altor doua coloane (cantitate si valoare)
si a capatului de tabel.

5.7. Aplica ia 7 – Crearea unui formular i completarea automat a acestuia

Vom crea o aplica ie care realizeaz completarea automat a unei cereri, în func ie de un nume
care este citit de la tastatur . Aceast aplica ie 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 aplica ii vom utiliza func iile numar_inr i
g se te din aplica iile anterioare.
Codul corespunz tor primei foi de calcul este urm torul:

'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

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

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 num rul
pagini de la care începe printarea, al doilea parametru(To) indic num rul pagini pân la se
printeaz , iar cel de-al treilea reprezint num rul de copii care este printat. În aceast aplica ie
este printat o singur pagin , într-un singur exemplar. Prima foaie de calcul este prezentat in
imaginea de mai jos:

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

Butonul CommandButton1
Butonul CommandButton2

Câmpuri care vor fi


completate(celule care vor fi
completate)

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. Aplica ia 8. -Crearea unui tabel pivot.
Una din problemele des întâlnite în activitatea curent este necesitatea cre rii de tabele
pivot.
Pentru a u ura lucrul cu aceste tipuri de tabele vom imagina o aplica ie care ne va permite
cu u urin modificarea câmpurilor tabelului pivot.

Codul aplica iei este urm torul:

Dim campPag As String, campRow1 As String


Dim campCol1 As String, campDta As String
Dim camp

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

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

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

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

www.formare.ro 45/45

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