Sunteți pe pagina 1din 46

@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.

09) Tel/fax: 0248-262340

www.formare.ro 1/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

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 (VBA);
crearea de formulare;
crearea de aplicatii.
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

In spatele MS Excel firma Microsoft a inclus un editor de comenzi VBA (Visual Basic
for Applications), ce permite modificarea i scrierea de macrouri i aplicaii care s automatizeze
lucrul cu foile de calcul Excel. Acest editor este de fapt un limbaj de programare de nivel nalt,
utilizarea lui implicnd cunotine corespunztoare.
2.1. Bara de controale standard

Bara de controale standard se afieaz pe ecran astfel:


din meniul Outils se alege opiunea Personalizer;
va aprea o fereastr cu trei butoane din care se alege opiunea Barres doutils i se
bifeaz opiunea Commandes;
Caseta 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 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

www.formare.ro 2/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

program) i a treia parte este format din 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 (parametrii) ale controlului activ din foaia de calcul sau chiar al foii de
calcul.

Numele i tipul obiectului pentru


care sunt afiate proprietile

Valoarea unui
parametru(proprietate)

Numele parametrului
( proprietii )

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).
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 csu 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

www.formare.ro 3/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

controale. Orice aplicaie pe care o crem poate fi executat prin apsarea unui buton de
comand.
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 selectate dintr-o list.
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 unui control ComboBox este AddItem. Metoda AddItem permite
asugarea unei noi valori n lista derulant.
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.
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 fiier tip imagine va conine (afia) 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.

Butonul More controls

Un control din list

Lista derulant
www.formare.ro 4/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

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 5/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

2.2. 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. 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.

Lista
evenimentelor
obiectului

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

2.3. Tipuri de date folosite n VBA

Ca orice limbaj de programare i VBA folosete date i instruciuni care, structurate ntr-un
anumit mod, permit execuia comenzilor dorite.
Principalele tipuri de date folosite n cadrul VBA sunt prezentate n tabelul urmtor:

Tip dat Descriere Operaii permise


Integer (nr.ntreg) tip de dat numr ntreg cuprins ntre adunarea, scderea, nmulirea,
32.768 i +32.767 mprirea, atribuirea

www.formare.ro 6/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

Tip dat Descriere Operaii permise


Long tip de dat numr ntreg cuprins ntre adunarea, scderea, nmulirea,
2.147.483.648 i +2.147.483.647 mprirea, atribuirea
Single (simpl tip de dat numr real (maxim 8 zecimale) Idem
precizie)
String (ir) Tip de dat ir de caractere atribuire, concatenarea
(adunarea) i trunchierea
Boolean (logic) tip de dat logic i este format din operaii logice (AND, OR, etc)
mulimea { TRUE (ADEVRAT) i i atribuire
FALSE (FALS)}
Object (obiect) tip de dat complex

Variant tip de dat care le include pe toate celelalte

2.4. Linii de cod, proceduri, funcii, parametri

Sarcina noastr este s crem mici aplicaii (programe) prin care s automatizm o parte
din lucrrile zilnice. Pentru aceasta vom insera un buton de comand (CommandButton) n foaia
de lucru, cu numele Btn1. Executnd dubluclick pe acesta vom ajunge n editorul Visual Basic.
Aici ncepem s crem aplicaia dorit, prin scrierea de linii de comand. Liniile de
comand conin cuvinte-cheie recunoscute de limbajul de programare, iar scrierea lor trebuie s
respecte sintaxa specific VBA.
Dac dorim s aflm sintaxa anumitor comenzi, putem genera un mic macro care s
execute aceste comenzi, dup care s-l editm i s copiem din el liniile de cod care ne
intereseaz.
Liniile de cod care se repet le putem grupa n proceduri (subrutine) sau funcii. Acestea
se pot apela dup numele lor ori de cte ori este nevoie. Procedurile i funciile pot avea
parametri. Spre exemplu putem crea o functie numit stergere care poate avea ca parametru
numele foii de calcul pe care dorim s o tergem.
In principal, liniile de cod vor executa anumite operaiuni asupra unor obiecte VBA.

2.5. Descrierea unui obiect

Principalele elemente cu care vom lucra n cadrul VBA se numesc obiecte. Exemple de
obiecte sunt: butoanele de comand, foaia de calcul, celula, rndul, coloana, etc.
Obiectele VBA sunt identificate printr-un nume i se pot caracteriza cu ajutorul a trei
elemente : proprieti, metode i evenimente.

www.formare.ro 7/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

a) Proprietile reprezint caracteristicile obiectului respectiv; exemple de propieti:


culoare, tip font, lime, nlime, etc. Aceste proprieti pot fi modificate conform sintaxei :
numeObiect.numeProprietate = Valoare,
Observm c proprietatea unui obiect este separat de numele obiectului printr-un punct.
Citirea unei linii de cod ce include o niruire de obiecte i parametri se face de la dreapta
la stnga, conform modelului urmtor:
WorkSheets(Foaia1).Cells(1, "a").Font.Color = vbGreen, se
citete de la dreapta la stnga, astfel: culoarea fontului celulei (1,a) din foaia de calcul cu
numele Foaia1 va fi de culoare verde.
Observm c obiectele i proprietile acestora sunt separate ntre ele printr-un punct.
In tabelul de mai jos sunt prezentate sintetic principalele proprieti ale unui obiect VBA:

Nume Descriere
proprietate/parametru
BackColor, Color, Acesti parametri indic culoarea obiectului; de obicei culoarea
ColorIndex 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 (logic). Dac parametrul are valoarea True
(Adevrat), atunci obiectul este activ. Dac parametrul are
valoarea False (Fals) 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 (Logic); Dac valoarea este True

www.formare.ro 8/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

Nume Descriere
proprietate/parametru
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.

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. Exemple de metode: tergerea,
copierea, activarea, etc.
Apelarea unei metode o vom ilustra prin cteva exemple :
Exemplul 1 :
Pentru acest prim exemplu vom crea un fisier excel numit ziua1.xls, iar in prima foaie de calcul
inserm 2 butoane de comand.
La aceste butoane vom modifica proprietatea nume in Btn1, respectiv Btn2, proprietatea Caption
in Buton 1, respectiv Buton 2.
Executand dubluclick pe fiecare buton in parte vom intra in partea de cod a fiecaruia si scriem
urmatorul cod:
Private Sub Btn1_Click()
MsgBox "Ati apasat butonul 1"
Btn1.Enabled = False
Btn2.Enabled = True
End Sub
Tema:
1. Scrieti codul aferent celuilalt buton de comanda (Btn2), astfel incat la apasarea fiecaruia dintre
butoane, sa se aplice metoda Enable=False pentru butonul apasat si Enable=True pentru celalalt
buton de comanda.
2. Modificati din liniile de cod, cateva proprietati ale butoanelor de comanda (ex. Forecolor )

www.formare.ro 9/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

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; procedurile se apeleaz automat
la o aciune a utilizatorului asupra unui obiect. Un eveniment trebuie declarat n prealabil, iar
declararea unui eveniment se face ntr-o procedur special generat automat. Sintaxa unui
eveniment este urmtoarea:

Private Sub numeObiect_numeEveniment()


Bloc_instructiuni
End Sub

Din exemplul precedent observam ca butoanelor de comanda Btn1 i Btn2 li s-a aplicat
evenimentul Click().
Exemplul 2:
Private Sub Worksheet_Activate()
MsgBox "Ati activat Foaia3"
End Sub
La activarea Foii3 de calcul va fi afiat un mesaj. Operaiunea este ilustrat n figura
urmtoare

Selectm obiectul Selectm evenimentul

Foaia de calcul curent

www.formare.ro 10/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

Principalele evenimente ale unui obiect sunt sintetizate n tabelul de mai jos:
Nume eveniment Descriere
Activate Evenimentul este declanat la activarea unui obiect (ex.
Deschiderea unei foi de calcul)
Click Acest eveniment este declanat n momentul care se efectueaz
un click al butonului din stnga al mouse-lui pe obiect.
(Ex.apsarea unui buton de comand)
DoubleClick Evenimentul 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 .

2.6. 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 (ir de caractere)
Range("celul1:celul2") Este un parametru de tip obiect, prin care se face o referire la o
zon de celule.

www.formare.ro 11/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

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:

Proprietate a
foii de calcul

Dup ce apare aceast list derulant se efectueaz dublu-click pe parametrul dorit i acesta este
inserat automat.

Exemplul 3:
In prima foaie de calcul din fisierul creat anterior sa se insereze un buton de comanda numit
BtnFoaie, avand proprietatea Caption=Nume foaie
Introducem urmatoarea linie de cod
MsgBox Feuil1.Name
' afieaz numele primei foi de calcul

Feuil1.Name = "Prima Foaie"


' numele primei foi de calcul este schimbat cu Prima Foaie

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)

Principalele metode ale unei foi de calcul sunt prezentate n tabelul ce urmeaz:
Nume metoda 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;

www.formare.ro 12/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

Nume metoda Descriere


PrintOut From, Realizeaz printarea foii de calcul la care se face referire;
To, Copies
Aceast metod are 3 parametri de tip numr 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 printat;

Metod a foii
de calcul

In 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

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
ActiveSheet
`Prin intermediul aceste comenzi se lucreaza cu foaia activa

Principalele evenimente ce pot fi atribuite unei foi de calcul sunt prezentate n tabelul de mai jos:
Nume eveniment Descriere
Activate Ruleaza codul la activarea unei foi de calcul;
SelectChange Ruleaza codul la selectarea unei celule sau zone

www.formare.ro 13/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

2.7. Declararea variabilelor VBA


Variabilele sunt date cu care opereaz calculatorul i sunt de dou tipuri:
globale (sunt recunoscute n tot programul);
locale (sunt recunoscute doar n interiorul unei proceduri sau funcii);
Pentru a fi recunoscut de calculator o variabil trebuie mai nti s fie declarat. Aceast
declarare se face cu ajutorul cuvntului rezervat Dim.

Sintaxa:
Dim numeVariabil1 as tipVariabil, numeVariabil2 as
tipVariabil...

Exemplul 4:
Dim valoare as Integer
Private Sub BtnFoaie_Click()
valoare = Feuil1.Cells(43, "b")
MsgBox valoare
End Sub

Observatie: Pentru a prentmpina eventualele erori de scriere a variabilelor, pe prima linie


de cod se va scrie instructiunea OPTION EXPLICIT. In caz contrar, dac o variabil
declarat cu numele rind, spre exemplu, este apelata in program cu numele rand,
programul nu va semnala greseala, in schimb rezultatul obtinut va fi eronat. Prin utilizarea
instructiunii OPTION EXPLICIT programul va solicita declararea variabilei rand si
qstfel vom observa greseala de scriere.

www.formare.ro 14/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

2.8. Principalele operatii cu variabile

a) Concatenarea mai multor iruri de caractere se realizeaza cu ajutorul operatorului +


Ex.: sir1=Dumitru, sir2=Ilie
sir3=sir1+ +sir2 => sir3=Dumitru Ilie
b) Conversia unui tip de variabil (numeric, dat, etc.) n:
1. ir de caractere - se realizeaza cu ajutorul intructiunii CStr(parametru).
Conversia este necesar deoarece nu putem aduna un ir cu un numr.
Ex.: sir1=Varsta este:, var1=45
sir2= sir1+cstr(var1) => sir2=Varsta este:45
2. numar intreg - se realizeaza cu ajutorul intructiunii CInt(parametru).
Conversia se aplic numerelor zecimale (tip Single sau Double) pe care dorim
s le transformm in numere intregi.
Ex.: num1=154.5458452, CInt(num1)=154
c) Rotunjirea unui tip de variabil numeric se realizeaz cu intructiunea:
Round(variabila,nrZecimale)
Ex.: num1=154.5458452, Round(num1,0)=154

c) Generarea unui numar aleator se face cu functia Rnd(). Functia Rnd() genereaza aleatoriu
numere zecimale intre 0 si 1. Pentru a genera numere cuprinse intr-un anumit interval (A si B),
sintaxa este urmatoarea: A+B*Rnd()
Ex.: numAleator=10+100*Rnd() => 43, 78, 51

www.formare.ro 15/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

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 End If

Instruciunea If.End If 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 5 :

Private Sub BtnInstr_Click()


Dim compar As Integer
Dim numar As Integer
numar = InputBox("Introduceti numarul")
se introduce de la tastatura valoarea pentru numar
compar = 30
If numar <= compar Then
MsgBox "Numarul este mai mic sau egal decat " + CStr(compar)
Mesajul afisat va contine o concatenare de siruri. Deoarece
compar este de tip Integer, este necesar sa-l convertim in sir
cu instruciunea CStr() prezentat anterior

www.formare.ro 16/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

Else
MsgBox "Numarul este mai mare decat " + CStr(compar)
End If
End Sub

Tema: Sa se afiseze mesajul sub forma Numarul X este mai mare decat 30

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/expresii
val1, val2, atunci se execut Bloc_instruciuni1; dac val se gsete n lista sau intervalul de
valori/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 sau, dac exist,
execut Bloc_instructiuni4, aferent lui CASE ELSE.

Exemplul 6 :
Private Sub BtnCase_Click()
Dim valoare As Integer
Dim mesaj As String

valoare = InputBox("Introduceti o valoare intre 10 si 200:",


"Instructiunea Case", 10)
Observati modul de introducere al parametrilor instructiunii
InputBox
Select Case valoare

www.formare.ro 17/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

Case 10 To 49: MsgBox "Valoarea este in intervalul 10-49"


Case 50 To 100: MsgBox "Valoarea este in intervalul 50-100"
Case 101 To 200: MsgBox "Valoarea este in intervalul 101-200"
End Select
End Sub

Tema: In locul citirii de la tastatur s se preia valoarea dintr-o celul a foii de calcul curente.

3.3. Instruciunea repetitiv For Next


Instruciunea For . Next are urmtoarea sintax :

For contor = val1 To val2 [Step X]


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.
Pasul incrementrii poate fi, de asemenea indicat (vezi argumentul Step). De exemplu, variabila
contor poate lua valori din 2 n 2.
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.

Exemplul 7 :

Private Sub BtnForNext_Click()


Dim i As Integer, valoare As Integer
valoare = 1
For i = 1 To 5
valoare = valoare + 1
MsgBox "Valoarea este: " + CStr(valoare)
Next i
End Sub

Tema: Scrierea rezultatului valoare ntr-o celul a foii de calcul curente.

www.formare.ro 18/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

3.4. Instruciunea repetitiv Do While Loop

Instruciunea Do While Loop are urmtoarea sintax:


Do While condiie
Bloc_instrucini
Loop

Aceast instruciune execut Bloc_instrucini atta timp ct este ndeplinit condiia.

Exemplul 8 :

Private Sub BtnDoWhile_Click()


Dim valoare As Integer
i = 1
Do While valoare <= 5
valoare = valoare + i
i=i+1
Loop
MsgBox "Valoarea este: " + CStr(valoare)
End Sub
Secvena este executat atta timp ct variabila i este mai mic sau egal dect trei i anume:
la prima execuie, cnd i=1, se verific dac valoare <=5 i cum condiia este ndeplinit se face
valoare=valoare+1 i i=2; la a doua execuie i=2 se verific dac valoare <=5 i cum condiia
este ndeplinit se face valoare=valoare+1 i i=3; la fel pn la a 6-a execuie, cnd valoare>5 i
programul realizeaz ieirea din bucla Do While...Loop.

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.

Exemplul 9 :

Private Sub BtnDoUntil_Click()

www.formare.ro 19/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

Dim valoare As Integer


valoare = 1
Do Until valoare = 20
valoare = valoare + 1
Loop
MsgBox "Valoarea este: " + CStr(valoare)
End Sub

Raionamentul este similar cu cel al exemplului prcedent.

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.

Procedurile si funciile sunt subprograme care efectueaz anumite operaii solicitate de


programul apelant, iar in cazul functiilor returneaza anumite valori.
a) Procedura are urmtoarea sintax:
Sub NumeProcedura([Lista_de_parametri as tipData])
Bloc_instruciuni
End Sub

b) Funcia are urmtoarea sintax:

Private Function NumeFunctie ( [Lista_de_parametri as tipData] )


Bloc_instruciuni
numeFunctie=valoare_rezultata
End Functie

Observatie: Lista de parametrii este optionala

www.formare.ro 20/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

Exemplul 10 :

Private Sub BtnFunctie_Click()


Dim numar As Integer, putere As Integer, i As Integer

For i = 1 To 5
numar = InputBox("Introduceti numarul:")
putere = InputBox("Indicati puterea la care se calculeaza
numarul")
MsgBox Patrat(numar, putere)
Next i
End Sub
--------------------------
Function Patrat(nr, pt)
Patrat = nr ^ pt
semnul ^ se utilizeaza pentru ridicarea la putere
End Function

Exemplul 11 :
Private Sub BtnProcedura_Click()
Dim numar As Integer, putere As Integer, i As Integer

For i = 1 To 5
numar = InputBox("Introduceti numarul:")
Call Scrie(numar, i)
Next i

End Sub
Private Sub Scrie(nr, randul)
ActiveSheet.Cells(randul, "D").Value = nr
End Sub

Not: Se observ corespondena ntre numar nr si i randul

www.formare.ro 21/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

5. Lucrul cu liste si alte obiecte VBA

Uneori este util sa preluam date din liste de valori, in loc de a le introduce de la tastatura.
O lista se poate utiliza prin urmatorii parametri:
.ColumnCount = numar coloane
.BoundColumn = numarul coloanei de pe care se va face citirea
. AddItem = Adauga articol pe rand nou
. List(r,c) = adauga articol pe randul r, coloana c, cu
conditia ca randul r sa fi fost creat in prealabil cu AddItem
.List()=adauga articole dintr-o zona (range) de celule
.ListFillRange = numeZona adauga articole dintr-o zona (range)
de celule
.Clear = sterge toate valorile din lista
.RemoveItem (index) = terge un rnd din list (index are
valoare de la 0 la nr.articole din lista)

Exemplul 12
Declaram variabilele
Dim nume As String, sectie As String, ore As Single
Dim nrIndex As Integer

Private Sub ListBox1_Click() Ruleaza la executarea unui click


pe ListBox1

nrIndex = ListBox1.ListIndex memoreaza pozitia articolului in


lista
Inseram in foaie 2 butoane de optiuni (unul pentru adaugare
articol selectat, celalalt pentru stergere articol selectat din
lista
ActiveSheet.Cells(1,1)=nume
ActiveSheet.Cells(1,2)=sectie
ActiveSheet.Cells(1,3)=ore

If OptionButton1.Value = True Then

www.formare.ro 22/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

nume = ListBox1.List(nrIndex, 0)
sectie = ListBox1.List(nrIndex, 1)
ore = ListBox1.List(nrIndex, 2)

ActiveSheet.Cells(2, 1) = nume
ActiveSheet.Cells(2, 2) = sectie
ActiveSheet.Cells(2, 3) = ore

Else
On Error Resume Next
ListBox1.RemoveItem (nrIndex)
End If

End Sub

Private Sub Worksheet_Activate()


With ListBox1
.Clear ' initializam lista
.ColumnHeads = False
.ColumnCount = 3 ' dimensionam lista la 3 coloane
.List() = Sheet3.Range("a1:c5").Value

End With
End Sub
Foaia de calcul va arta aa:

www.formare.ro 23/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

Datele sunt ncrcate n list din foaia de calcul date lista

www.formare.ro 24/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

6. 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.

6.1. Aplicaia 1 Determinarea zonei de date dintr-o foaie de calcul

Vom realiza o prim aplicaie care va determina numarul de randuri ce contin date intr-o
foaie de calcul (consideram nr.de coloane cunoscut). Zona identificata va fi selectata si i se vor
modifica anumite proprietati.
Pentru acesta vom deschide unul din fisierele create, iar n ultima foaie de calcul vom
insera o zona de date (4 linii si 3 coloane) si un buton de comand, cruia i vom schimba
parametrul Caption (din cel implicit CommandButton1 n Afiseaza) cu ajutorul tabelei de
proprieti (parametri).

Tabela de proprieti
(parametri)

Butonul de comand cu
parametrul Caption
schimbat

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

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.

www.formare.ro 25/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

Controlul CommandButton1

Lista derulant cu obiectele care


se afl pe prima foaie de calcul

Declararea evenimentului Click


corespunztor controlului
CommandButton1

Codul corespunztor evenimentului Click este urmtorul:

Private Sub CommandButton1_Click()


Dim nr_linii As Integer
Dim valoare As Variant, zona As String

'Calcul nr. linii cu date


valoare = ActiveSheet.Cells(1, 1)

Do While valoare <> 0


nr_linii = nr_linii + 1
valoare = ActiveSheet.Cells(nr_linii, 1)
Loop
nr_linii = nr_linii - 1
MsgBox nr_linii

' Selectare zona date


zona = "a1:" + "c" + CStr(nr_linii)
MsgBox zona
ActiveSheet.Range(zona).Select

Inseram in foaia de calcul 2 OptionButton (avand


Caption=Modifica, respectiv Reseteaza)
If OptionButton1.Value = True Then

www.formare.ro 26/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

Selection.Interior.Color = vbRed
Selection.Font.Bold = True
Selection.Font.Italic = True

Else

Selection.Interior.Color = vbWhite
Selection.Font.Bold = False
Selection.Font.Italic = False

End If

End Sub

6.2. Aplicaia 2 Evidentierea unei celule selectate cu ajutorul mouse-lui

n a doua aplicaie vom realiza un cod care va colora celula pe care se face click. In plus, putem
afisa/prelua adresa si continutul celulei selectate. Pentru aceasta vom folosi tot foaia de lucru de
la Aplicatia 1.
Codul va fi de forma:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


Dim nr_rand As Integer, nr_col As Integer
Dim continut_cel As String, adresa_cel As String
Dim mesaj As String
nr_rand = ActiveCell.Row
WITH ActiveCell `WITHEND WITH ne permite sa scriem ActiveCell
`doar o singura data, nu pe fiecare rand de cod
.Interior.Color = vbBlue
.Font.Color = vbYellow
adresa_cel = .Address
continut_cel = .Value `Scrie in variabila continut_cel valoarea
`gasita in celula selectata
END WITH
mesaj = "Valoarea celulei " + adresa_cel + " , selectate este '"
+ continut_cel + "'"

www.formare.ro 27/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

MsgBox mesaj
End Sub
Observatie: In loc de ActiveCell, putem folosi Target
Tem: Inserati 2 controale de tip OptionButton pentru a controla culorile celulelor selectate
(ex.fond verde, font albastru, respectiv fond alb, font negru)

6.3. Aplicaia 3 Formatarea automat a unei zone de celule

Aceast aplicaie i propune crearea unui buton de comanda care s genereze aplicarea
unor formate definite de utilizator pe zona de celule selectate.
Deoarece este dificil s reinem sintaxele unor comenzi mai complicate n Excel vom
genera macrouri, pe care apoi le vom studia i modifica dup necesiti.
In urmtorul exemplu avem nevoie s aplicm urmtoarea formatare unei zone de celule
selectate: font bolduit i nclinat, colorat cu rou, celula cu fond galben, aliniament sus i stnga,
format numeric cu 2 zecimale, coloanele s se potriveasc la coninut (autofit).
Pentru aceasta, vom parcurge urmatorii pai:
1.nregistrm un macro unde vom avea toate aceste formate
2. crem un buton de comand
3.n interiorul codului butonului de comand vom copia codul generat automat de macro
4.operm modificrile necesare la cod i rulm aplicaia
Codul generat de macro va fi de forma:
Sub formatare()
'
' formatare Macro
'
Range("A2:C3").Select Am selectat la intamplare o zona de
celule
Selection.Font.Bold = True
Selection.Font.Italic = True
With Selection.Interior
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With

www.formare.ro 28/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
Selection.Style = "Comma"
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlTop
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Columns("A:C").Select
Columns("A:C").EntireColumn.AutoFit
Range("C8").Select
End Sub

Identificm aciunile realizate de macrou, tergem ce este n plus i adugm ce este necesar.
Codul final va fi de forma:
Private Sub BtnFormat_Click()
'Range("A2:C3").Select
Selection.Font.Bold = False
Selection.Font.Bold = True
Selection.Font.Italic = False
Selection.Font.Italic = True
With Selection.Interior
.Color = vbYellow
End With
With Selection.Font
.Color = vbRed

www.formare.ro 29/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

End With
Selection.Style = "Comma"
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlTop
End With

Selection.EntireColumn.AutoFit
End Sub

Atenie: ca acest cod s funcioneze trebuie mai nti s selectatm o zon de celule i numai
dup aceea s apsm butonul de comand.

Tem: ncercai i alte tipuri de formatri

6.4. Aplicaia 4 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

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"

www.formare.ro 30/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

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
"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

www.formare.ro 31/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

'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

www.formare.ro 32/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

6.5. Aplicaia 5 Actualizarea dinamic a unui grafic

Utiliznd cunotinele acumulate pn acum, 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

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
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)

www.formare.ro 33/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

.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: Codul de mai sus este preluat dintr-un macro.


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

6.6. Aplicaia 6 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
End Sub

Private Sub CommandButton1_Click()

www.formare.ro 34/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

'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:

www.formare.ro 35/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

Butonul BtnFormular Butonul BtnTipar


Cmpuri care vor fi
completate(celule care vor fi
completate)

www.formare.ro 36/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

6.7. Aplicaia 7 Inserarea de elemente grafice si dimensionarea dinamic a acestora

In cele ce urmeaz vom crea o aplicaie care insereaz automat elemente grafice a cror
mrime depinde de un set de date numerice.

Codul aferent aplicaiei este urmtorul:


Dim x As Integer, y As Integer, l As Integer, h As Integer,
scara As Double
Dim valoare As Integer, i As Integer, maxim As Integer
Dim nr_valori As Integer, distanta As Integer

Private Sub Worksheet_Activate()


'Stabilim parametri formei grafice
maxim = 0

x = 30: y = 30: l = 30: h = 200


distanta = 40 ' distanta intre formele grafice
'Selectam si stergem toate formele geometrice existente
ActiveSheet.Shapes.SelectAll
Selection.Delete
'Aflam nr.de valori pe care le avem pe o linie a foii de calcul
valoare = ActiveSheet.Cells(1, 1).Value ' initializam valoarea
nr_valori = 1
Do Until valoare = 0 'repetam bucla pana ajungem la capatul
sirului de valori
nr_valori = nr_valori + 1
valoare = ActiveSheet.Cells(1, nr_valori).Value

Loop
nr_valori = nr_valori - 1 'corectam valoarea finala

'Aflam valoarea maxima

For i = 1 To nr_valori

www.formare.ro 37/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

If maxim <= ActiveSheet.Cells(1, i).Value Then maxim =


ActiveSheet.Cells(1, i).Value
Next i

'Trasam formele geometrice

For i = 1 To nr_valori

ActiveSheet.Shapes.AddShape(msoShapeRectangle, _
x, y, l, h).Select
x = x + distanta
scara = ActiveSheet.Cells(1, i).Value

With Selection.ShapeRange
scara = scara / maxim ' scalam marimea formei grafice
.ScaleHeight scara, msoFase, msoScaleFromtopRight
'Coloram formele functie de valoarea lor (mica = rosie,
medie=galbena si mare=verde
If scara <= 0.3 Then .Fill.ForeColor.RGB = RGB(255, 0, 0)
If scara > 0.3 And scara <= 0.7 Then .Fill.ForeColor.RGB =
RGB(255, 255, 0)
If scara > 0.7 Then .Fill.ForeColor.RGB = RGB(0, 255, 0)
End With
Next i
End Sub

www.formare.ro 38/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

Rezultatul rulrii aplicaiei este ilustrat n figura urmtoare:

www.formare.ro 39/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

7. Crearea de formulare pentru configurarea tabelelor pivot


Vom construi o aplicaie care utilizeaza un formular prin intermediul cruia poate fi
configurat uor un tabel pivot.
Formularul va fi de forma:

Codul aferent formularului este urmtorul:

Private Sub ColBtn_Click()


If ColTxt.Text <> "" Then
PivotLst.AddItem (ColTxt.Text)
ColTxt.Text = ""
ColBtn.Caption = "<-"
Else
ColTxt.Text = PivotLst.Text
PivotLst.RemoveItem (PivotLst.ListIndex)
ColBtn.Caption = "->"
End If
Call validare
End Sub

Private Sub DateBtn_Click()


If DateTxt.Text <> "" Then
PivotLst.AddItem (DateTxt.Text)

www.formare.ro 40/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

DateTxt.Text = ""
DateBtn.Caption = "<-"
Else
DateTxt.Text = PivotLst.Text
PivotLst.RemoveItem (PivotLst.ListIndex)
DateBtn.Caption = "->"
End If
Call validare
End Sub

Private Sub PagBtn_Click()


If PagTxt.Text <> "" Then
PivotLst.AddItem (PagTxt.Text)
PagTxt.Text = ""
PagBtn.Caption = "<-"
Else
PagTxt.Text = PivotLst.Text
PivotLst.RemoveItem (PivotLst.ListIndex)
PagBtn.Caption = "->"
End If
Call validare
End Sub
Private Sub RandBtn_Click()
If RandTxt.Text <> "" Then
PivotLst.AddItem (RandTxt.Text)
RandTxt.Text = ""
RandBtn.Caption = "<-"
Else
RandTxt.Text = PivotLst.Text
PivotLst.RemoveItem (PivotLst.ListIndex)
RandBtn.Caption = "->"
End If
Call validare
End Sub
Function validare()

www.formare.ro 41/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

If PivotFrm.PagTxt.Value = "" Or PivotFrm.RandTxt.Value = "" Or


_
PivotFrm.ColTxt.Value = "" Or PivotFrm.DateTxt.Value = "" Then
PivotFrm.pivotBtn.Enabled = False
Else
PivotFrm.pivotBtn.Enabled = True
End If

End Function

Private Sub pivotBtn_Click()


campPag = PagTxt.Value
campRow1 = RandTxt.Value
campCol1 = ColTxt.Value
campDta = DateTxt.Value

Call zona
'MsgBox zona
' Range("A2:I661").Select
' Application.CutCopyMode = False
' "'Lucru'!R1C1:R661C9").CreatePivotTable
TableDestination:="", TableName:=

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,
SourceData:= _
"'Lucru'!R1C1:R661C9").CreatePivotTable
TableDestination:="", TableName:= _
"PivotTable1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard
TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
Charts.Add
ActiveChart.Location Where:=xlLocationAsNewSheet
ActiveWorkbook.ShowPivotTableFieldList = True
With ActiveChart.PivotLayout.PivotTable.PivotFields(campPag)

www.formare.ro 42/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

.Orientation = xlPageField
.Position = 1
End With
With
ActiveChart.PivotLayout.PivotTable.PivotFields(campRow1)
.Orientation = xlColumnField
.Position = 1
End With
With
ActiveChart.PivotLayout.PivotTable.PivotFields(campCol1)
.Orientation = xlRowField
.Position = 1
End With
ActiveChart.PivotLayout.PivotTable.AddDataField
ActiveChart.PivotLayout. _
PivotTable.PivotFields(campDta), "Sum of BUDGET", xlSum
'----------------
' ActiveChart.PlotArea.Select
' Sheets("Tabel pivot").Select

End Sub

Function zona() As String


Dim rand As Integer, coloana As Integer
rand = 2: coloana = 1
Do While Sheets("Lucru").Cells(rand, 1) <> ""
rand = rand + 1
Loop
rand = rand - 1
Do While Sheets("Lucru").Cells(2, coloana) <> ""
coloana = coloana + 1
Loop
coloana = coloana - 1
zona = "A2:" + Chr(64 + coloana) + CStr(rand)

www.formare.ro 43/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

zona = "R2C1:R" + CStr(rand) + "C" + CStr(coloana) ' R1C1:R661C9


'zona = "'Lucru'!" + zona
End Function

Codul pentru crearea tabelului pivot l-am luat dintr-un macro.


In foaia de lucru numita Lucru vom avea un tabel de date i un buton de comand,
conform figurii:

Codul aferent butonului de comand este urmtorul:


Private Sub BtnAfisareFormular_Click()
On Error Resume Next
Sheets("Tabel pivot").Delete
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)

www.formare.ro 44/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

i = i + 1
Loop
r = i - 2
'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(1, 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

Tem: identificai operaiunile executate pe fiecare rnd de cod i inserai comentarii


explicative.

www.formare.ro 45/46
@2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

CUPRINS
1. INTRODUCERE ...................................................................................................................... 1
2. Elemente de programare n VBA pentru EXCEL ....................................................................... 2
2.1. Bara de controale standard .................................................................................................... 2
2.2. Editorul VBA ........................................................................................................................ 6
2.3. Tipuri de date folosite n VBA .............................................................................................. 6
2.4. Linii de cod, proceduri, funcii, parametri ............................................................................ 7
2.5. Descrierea unui obiect ........................................................................................................... 7
2.6. Foaia de calcul, proprieti, metode, evenimente................................................................ 11
2.7. Declararea variabilelor VBA .............................................................................................. 14
Concatenarea mai multor iruri de caractere se realizeaza cu ajutorul operatorului + ......... 15
Conversia unui tip de variabil (numeric, dat, etc.) n ir de caractere se realizeaza cu ajutorul
intructiunii CStr(parametru). Conversia este necesar deoarece nu putem aduna un ir cu
un numr. ....................................................................................................................................... 15
3. Instruciuni VBA ....................................................................................................................... 16
3.1. Instruciunea de decizie If End If ................................................................................... 16
3.2. Instruciunea de decizie Select Case End Select ............................................................ 17
3.3. Instruciunea repetitiv For Next ................................................................................ 18
Tema: Scrierea rezultatului valoare ntr-o celul a foii de calcul curente. ................................ 18
3.4. Instruciunea repetitiv Do While Loop......................................................................... 19
3.5. Instruciunea repetitiv Do Until Loop .......................................................................... 19
4. Funcii i proceduri ................................................................................................................... 20
5. Lucrul cu liste si alte obiecte VBA ........................................................................................... 22
6. Aplicaii VBA ........................................................................................................................... 25
6.1. Aplicaia 1 Determinarea zonei de date dintr-o foaie de calcul ....................................... 25
6.2. Aplicaia 3 Formatarea automat a unei zone de celule................................................... 28
6.3. Aplicaia 2 Evidentierea unei celule selectate cu ajutorul mouse-lui .............................. 27
6.4. Aplicaia 4 Actualizarea dinamic a unui grafic .............................................................. 32
6.5. Aplicaia 5 Crearea unui configurator automat ................................................................ 30
6.6. Aplicaia 6 Crearea unui formular i completarea automat a acestuia ........................... 34
6.7. Aplicaia 7 Inserarea de elemente grafice si dimensionarea dinamic a acestora ........... 37
7. Crearea de formulare pentru configurarea tabelelor pivot ........................................................ 40

www.formare.ro 46/46

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