Professional Documents
Culture Documents
09)
www.formare.ro
1/46
Tel/fax: 0248-262340
Tel/fax: 0248-262340
1. INTRODUCERE
Acest curs i propune s v familiarizeze cu opiunile avansate ale MS EXCEL, ce includ:
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.
va aprea o fereastr cu trei butoane din care se alege opiunea Barres doutils i se
bifeaz opiunea Commandes;
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
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.
Valoarea unui
parametru(proprietate)
Numele parametrului
( proprietii )
www.formare.ro
3/46
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
www.formare.ro
4/46
Lista derulant
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
Tel/fax: 0248-262340
Lista
evenimentelor
obiectului
Lista cu obiecte
Cadran de editare
cod VBA
Cadranul foilor de
calcul
www.formare.ro
Descriere
tip de dat numr ntreg cuprins ntre
32.768 i +32.767
6/46
Operaii permise
adunarea, scderea, nmulirea,
mprirea, atribuirea
Tel/fax: 0248-262340
Tip dat
Long
Single
precizie)
String (ir)
Descriere
Operaii permise
tip de dat numr ntreg cuprins ntre
adunarea, scderea, nmulirea,
2.147.483.648 i +2.147.483.647
mprirea, atribuirea
(simpl tip de dat numr real (maxim 8 zecimale) Idem
Tip de dat ir de caractere
Object (obiect)
atribuire,
concatenarea
(adunarea) i trunchierea
tip de dat logic i este format din operaii logice (AND, OR, etc)
mulimea { TRUE (ADEVRAT) i i atribuire
FALSE (FALS)}
tip de dat complex
Variant
Boolean (logic)
www.formare.ro
7/46
Tel/fax: 0248-262340
Nume
Descriere
proprietate/parametru
BackColor, Color,
ColorIndex
Caption
Enabled
Font
ForeColor
Height
Left
PrintObject
www.formare.ro
8/46
Nume
Tel/fax: 0248-262340
Descriere
proprietate/parametru
atunci obiectul este printabil; Dac valoarea este False atunci
obiectul nu este printabil (nu apare la imprimant).
Reprezint coordonata (de pe axa Y) a colului stnga sus a
Top
Width
Single.
Stabilete dac obiectul este vizibil sau nu; Acest parametru
Visible
9/46
Tel/fax: 0248-262340
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
www.formare.ro
10/46
Tel/fax: 0248-262340
Principalele evenimente ale unui obiect sunt sintetizate n tabelul de mai jos:
Nume eveniment
Activate
Descriere
Evenimentul este declanat la activarea unui obiect (ex.
Deschiderea unei foi de calcul)
Acest eveniment este declanat n momentul care se efectueaz
Click
MouseDown
MouseMove
MouseUp
Descriere
Acest parametru indic numele foi respective;
Cells(i , j)
Range("celul1:celul2")
www.formare.ro
11/46
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")
Descriere
Realizeaz activarea unei foi de calcul;
Select
Delete
www.formare.ro
12/46
Nume metoda
PrintOut From,
To, Copies
Tel/fax: 0248-262340
Descriere
Realizeaz printarea foii de calcul la care se face referire;
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
Activate
Descriere
Ruleaza codul la activarea unei foi de calcul;
SelectChange
www.formare.ro
13/46
Tel/fax: 0248-262340
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
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
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
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
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
www.formare.ro
17/46
Tel/fax: 0248-262340
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
Tel/fax: 0248-262340
19/46
Tel/fax: 0248-262340
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
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
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
calculeaza
Tel/fax: 0248-262340
(index)
terge
un
rnd
din
list
(index
are
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
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
www.formare.ro
24/46
Tel/fax: 0248-262340
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
Tel/fax: 0248-262340
Controlul CommandButton1
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
www.formare.ro
26/46
OptionButton
(avand
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
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
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
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
Tel/fax: 0248-262340
www.formare.ro
31/46
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
Tel/fax: 0248-262340
33/46
Tel/fax: 0248-262340
www.formare.ro
34/46
Tel/fax: 0248-262340
www.formare.ro
35/46
Butonul BtnFormular
Butonul BtnTipar
Cmpuri care vor fi
completate(celule care vor fi
completate)
www.formare.ro
Tel/fax: 0248-262340
36/46
Tel/fax: 0248-262340
www.formare.ro
37/46
If
maxim
<=
ActiveSheet.Cells(1,
Tel/fax: 0248-262340
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
www.formare.ro
39/46
Tel/fax: 0248-262340
Tel/fax: 0248-262340
www.formare.ro
40/46
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
Tel/fax: 0248-262340
Tel/fax: 0248-262340
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
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
Tel/fax: 0248-262340
www.formare.ro
44/46
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
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