Documente Academic
Documente Profesional
Documente Cultură
@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 opţiunile 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 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.
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 aplicații care să automatizeze
lucrul cu foile de calcul Excel. Acest editor este de fapt un limbaj de programare de nivel înalt,
utilizarea lui implicând cunoștințe corespunzătoare.
2.1. Bara de controale standard
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
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 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 (parametrii) ale controlului activ din foaia de calcul sau chiar al foii de
calcul.
Valoarea unui
parametru(proprietate)
Numele parametrului
( proprietăţii )
www.formare.ro 3/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
controale. Orice aplicație pe care o creăm poate fi executată prin apăsarea unui buton de
comandă.
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 selectate dintr-o listă.
Butonul 9 reprezintă un control de tipul listă derulantă(ComboBox) şi este fol osit pentru
alegerea unei valori dintr-o listă derulantă.
Cea mai importantă metodă a unui control ComboBox este AddItem. Metoda AddItem permite
asăugarea unei noi valori în lista derulantă.
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 folo sit 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 fișier tip imagine va conţine (afișa) 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 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
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
vizualizar e 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. 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.
Lista
evenimentelor
obiectului
Lista cu obiecte
Cadranul foilor de Cadran de editare
calcul cod VBA
Ca orice limbaj de programare și VBA folosește date și instrucțiuni care, structurate într -un
anumit mod, permit execuția comenzilor dori te.
Principalele tipuri de date folosite în cadrul VBA sunt prezentate în tabelul următor:
www.formare.ro 6/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
Sarcina noastră este să creăm mici aplicații (programe) prin care să automatizăm o parte
din lucrările zilnice. Pentru aceasta vom insera un buton de comandă (CommandButton) în foaia
de lucru, cu numele Btn1. Executând dubluclick pe acesta vom ajunge în editorul Visual Basic.
Aici începem să creăm aplicația dorită, prin scrierea de linii de comandă. Liniile de
comandă conțin cuvinte-cheie recunoscute de limba jul de programare, iar scrierea lor trebuie să
respecte sintaxa specifică VBA.
Dacă dorim să aflăm sintaxa anumitor comenzi, putem genera un mic macro care să
execute aceste comenzi, după care să -l edităm și să copiem din el liniile de cod c are ne
interesează.
Liniile de cod care se repetă le putem grupa în proceduri (subrutine) sau funcții. Acestea
se pot apela după numele lor ori de câte ori este nevoie. Procedurile și funcțiile pot avea
parametri. Spre exemplu putem crea o functie numită ”stergere” car e poate avea ca parametru
numele foii de calcul pe care dorim să o ștergem.
In principal, liniile de cod vor executa anumite operațiuni asupra unor obiecte VBA.
Principalele elemente cu care vom lucra în cadrul VBA se nume sc obiecte. Exemple de
obiecte sunt: butoanele de comandă, foaia de calcul, celula, rândul, coloana, etc.
Obiectele VBA sunt identificate printr-un nume și se pot caracteriza cu ajutorul a trei
elemente : proprietăţi, metode şi evenimente .
www.formare.ro 7/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
Nume Descriere
proprietate/parametru
BackColor, Color, Acesti parametri indică culoarea obiectului; de obicei culoarea
ColorIndex 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 (logic). D acă parametrul are valoarea True
(Adevărat), 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ă î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 (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 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.
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. Exemple de metode: ștergerea,
copierea, activarea, etc.
Apelarea unei metode o vom ilustra prin câteva exemple :
Exemplul 1 :
Pentru acest prim exemplu vom crea un fisier excel numit ziua1.xls, iar in prima foaie de calcul
inser ăm 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
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 afișat un mesaj. Operațiunea este ilustrată în figura
următoare
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 declanșat la activarea unui obiect (ex.
Deschiderea unei foi de calcul)
Click Acest eveniment este declanşat în momentul care se efectuează
un click al butonului din stânga al mouse -lui pe obiect.
(Ex.apăsarea unui buton de comandă)
DoubleClick Evenimentul 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 .
www.formare.ro 11/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
Î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ă du blu-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
' afişează numele primei foi de calcul
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
Metodă a foii
de calcul
In 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.
Exemple:
Feuil1.Activate
' realizează activarea foii de ca lcul 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
Exemplul 4:
Dim valoare as Integer
Private Sub BtnFoaie_Click()
valoare = Feuil1.Cells(43, "b")
MsgBox valoare
End Sub
www.formare.ro 14/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
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. Instrucţiuni VBA
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 5 :
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”
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ă a stfel: dacă val se găseşte în lista sau intervalul de valori /expresii
val1, val2, … atunci se execută Bloc_instrucţiuni1; dacă val se găseşte în lista sau intervalul de
valori/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 sau, dacă există,
execută Bloc_instructiuni4, aferent lui CASE ELSE .
Exemplul 6 :
InputBox
www.formare.ro 17/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
Tema: In locul citirii de la tastatur ă să se preia valoarea dintr-o celulă a foii de calcul curente.
unde contor, val1, val2 sunt toate de ac elaş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.
Pasul incrementării poate fi, de asemenea indicat (vez i argumentul Step). De exemplu, variabila
contor poate lua valori din 2 în 2.
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.
Exemplul 7 :
www.formare.ro 18/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
Bloc_instrucţini
Loop
Do Until condiţie
Bloc_instrucţiune
Loop
Exemplul 9 :
www.formare.ro 19/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
4. Proceduri și f uncţ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.
Bloc_instrucţiuni
numeFunctie=valoare_rezultata
End Functie
www.formare.ro 20/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
Exemplul 10 :
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
www.formare.ro 21/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
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 rând 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
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
End With
End Sub
Foaia de calcul va ar ăta așa:
www.formare.ro 23/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
www.formare.ro 24/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
6. 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.
Vom realiza o primă aplicaţie 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ă, căruia îi vom schimba
parametrul Caption (din cel implicit CommandButton1 în „Afiseaza”) cu ajutorul tabelei de
proprietăţi (parametri).
Tabela de proprietăţi
arametri
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 (apăsând pe al treilea buton) şi din lista
derulantă cu obiecte de pe prima foaie de calcul vo m alege CommandButton1, iar din lista de
evenimente corespunzătoare 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
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
În a doua aplicaţie 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:
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)
Această aplicaţie îș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ă reținem sintaxele unor comenzi mai complicate în Excel vom
genera macrouri, pe care apoi le vom studia și modifica după necesități.
In următorul exemplu avem nevoie să aplicăm următoarea formatare unei zone de celule
selectate: font bolduit și înclinat, colorat cu roșu, celula cu fond galben , aliniament sus și stânga,
format numeric cu 2 zecimale, coloanele să se potrivească la conținut (autofit).
Pentru aceasta, vom parcurge urmatorii pași:
1.înregistrăm un macro unde vom avea toate aceste formate
2. creăm un buton de comandă
3.în interiorul codului butonului de comandă vom copia codul generat automat de macro
4.operăm modificările necesare la cod și rulăm aplicația
Codul generat de macro va fi de forma:
Sub formatare()
'
' formatare Macro
'
Range("A2:C3").Select ‘ Am selectat la intamplare o zon a 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
Identificăm acțiunile realizate de macrou, ștergem ce este în plus și adăugăm 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
Atenție: ca acest cod să funcționeze trebuie mai întâi să selectatăm o zonă de celule și numai
după aceea să apăsăm butonul de comandă.
www.formare.ro 30/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
www.formare.ro 31/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
'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 32/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
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
.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)
www.formare.ro 33/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) 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 34/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
End Sub
www.formare.ro 35/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
www.formare.ro 36/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
In cele ce urmează vom crea o aplicaţie care inserează automat elemente grafice a căror
mărime depinde de un set de date numer ice.
Loop
nr_valori = nr_valori - 1 'corectam valoarea finala
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
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
www.formare.ro 39/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
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
www.formare.ro 41/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
End Function
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
www.formare.ro 43/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
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
'PivotFrm.PivotLst.List(k) = Myarray()
PivotFrm.Show
'PivotFrm.Visible = True
End Sub
www.formare.ro 45/46
@2009 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340
C U P R I N S
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, funcții, parametri ............................................................................ 7
2.5. Descrierea unui obiect ........................................................................................................... 7
2.6. Foaia de calcul, proprietăţi, 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 număr. ....................................................................................................................................... 15
3. Instrucţiuni VBA ....................................................................................................................... 16
3.1. Instrucţiunea de decizie If … End If ................................................................................... 16
3.2. Instrucţiunea de decizie Select Case … End Select ............................................................17
3.3. Instrucţiunea repetitivă For … Next ................................................................................18
Tema: Scrierea rezultatului valoare într -o celulă a foii de calcul curente. ................................ 18
3.4. Instrucţiunea repetitivă Do While … Loop ......................................................................... 19
3.5. Instrucţiunea repetitivă Do Until … Loop .......................................................................... 19
4. Funcţii și proceduri ................................................................................................................... 20
5. Lucrul cu liste si alte obiecte VBA ........................................................................................... 22
6. Aplicaţii VBA ........................................................................................................................... 25
6.1. Aplicaţia 1 – Determinarea zonei de date dintr-o foaie de calcul ....................................... 25
6.2. Aplicaţia 3 – Formatarea automată a unei zone de celule ................................................... 28
6.3. Aplicaţia 2 – Evidentierea unei celule selectate cu ajutorul mouse-lui .............................. 27
6.4. Aplicaţia 4 – Actualizarea dinamică a unui grafic ..............................................................32
6.5. Aplicaţia 5 – Crearea unui configurator automat ................................................................30
6.6. Aplicaţia 6 – Crearea unui formular şi completarea automată a acestuia ........................... 34
6.7. Aplicaţia 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