Documente Academic
Documente Profesional
Documente Cultură
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
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).
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:
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:
Byte 0–255.
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:
Exemple:
www.formare.ro 4/45
@2003 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat Tel/fax: 0248-262340
Dim ValoareCelula
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.
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:
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.
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
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.
www.formare.ro 8/45
@2003 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat Tel/fax: 0248-262340
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.
Valoarea unui
parametru(proprietate)
Numele parametrului
( propriet ii )
www.formare.ro 9/45
@2003 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat Tel/fax: 0248-262340
Descrierea controalelor
www.formare.ro 10/45
@2003 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat Tel/fax: 0248-262340
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.
Lista derulant
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 :
www.formare.ro 12/45
@2003 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat Tel/fax: 0248-262340
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:
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
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.
Î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
www.formare.ro 15/45
@2003 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat Tel/fax: 0248-262340
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)
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
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
Î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
Î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:
www.formare.ro 20/45
@2003 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat Tel/fax: 0248-262340
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
Î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 :
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
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.
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.
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 ;
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
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
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:
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 :
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
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 :
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.
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.
www.formare.ro 32/45
@2003 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat Tel/fax: 0248-262340
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.
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
Valoarea returnat prin apelarea func iei numar_inr este re inut în variabila nr, care va fi afi at
pe ecran.
Ultima înregistrare
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
www.formare.ro 35/45
@2003 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat Tel/fax: 0248-262340
Numele c utat
Mesajul afi at
UserForm1
ComboBox1
ListBox1
www.formare.ro 36/45
@2003 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat Tel/fax: 0248-262340
ListBox1.AddItem nume_nou
End Sub
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
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
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
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ã
www.formare.ro 40/45
@2003 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat Tel/fax: 0248-262340
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:
www.formare.ro 41/45
@2003 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat Tel/fax: 0248-262340
End Sub
End Sub
www.formare.ro 42/45
@2003 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat Tel/fax: 0248-262340
Butonul CommandButton1
Butonul CommandButton2
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
'
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