Sunteți pe pagina 1din 105

Excel VBA

SUPORT DE CURS
CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

CUPRINS
1. Lucrul cu macrocomenzi în Excel .................................................................................................................... 5
1.1 Generalităţi legate de macrocomenzi ........................................................................................................... 5
1.2 Editorul VBA ............................................................................................................................................. 5
1.3 Înregistrarea unei macro-comenzi ............................................................................................................... 7
1.4 Execuţia unei macrocomenzi ...................................................................................................................... 8
1.5 Modificarea unei macrocomenzi ................................................................................................................. 9
1.6 Ştergerea unei macro-comenzi .................................................................................................................... 9
1.7 Lucrul cu macro-comenzi globale ............................................................................................................. 10
1.8 Salvarea fişierelor ce conţin macro-comenzi .............................................................................................. 10
1.9 Deschiderea unor fişiere care conţin macrocomenzi .................................................................................. 11
1.10 Introducerea unui buton asociat macro pe bara de instrumente ............................................................ 11
1.11 Încrederea în fişiere ce conţin macro-comenzi ...................................................................................... 12
2. Lucrul cu fişiere şi foi de calcul ....................................................................................................................... 17
2.1 Elemente de bază de VBA pentru Excel ................................................................................................... 17
2.2 Lucrul cu fişiere Excel din VBA ................................................................................................................ 18
Crearea unui fişier nou ................................................................................................................................... 19
Numărul de fişiere deschise ............................................................................................................................ 19
Închiderea tuturor fişierelor deschise .............................................................................................................. 19
Referirea la un anumit fişier ........................................................................................................................... 19
Salvarea unui fişier ......................................................................................................................................... 19
Deschiderea unui fişier ................................................................................................................................... 20
2.3 Lucrul cu foi Excel din VBA ..................................................................................................................... 20
Referirea la o anumită foaie ............................................................................................................................ 20
Inserarea unei noi foi de calcul ....................................................................................................................... 21
Redenumirea unei foi ..................................................................................................................................... 21
Ştergerea unei foi ........................................................................................................................................... 21
Ascunderea/afişarea unei foi .......................................................................................................................... 22
Copierea sau mutarea unei foi ........................................................................................................................ 22
Vizualizarea unei foi înainte de tipărire ........................................................................................................... 23
Tipărirea unei foi ........................................................................................................................................... 23
2.4 Lucrul cu domenii ..................................................................................................................................... 23
2.5 Formule .................................................................................................................................................... 26
3. Instrucţiuni VBA ............................................................................................................................................... 29
3.1 Variabile şi constante. Tipuri de date ......................................................................................................... 29
3.2 Funcţii cu interfaţa cu utilizatorul .............................................................................................................. 31
3.3 Utilizarea funcţiilor VBA .......................................................................................................................... 34
3.4 Instrucţiuni VBA ...................................................................................................................................... 39
3.5 Proceduri .................................................................................................................................................. 49
3.6 Funcţii ...................................................................................................................................................... 51
4. Utilizarea controalelor tip formular în foile de calcul .................................................................................. 55
4.1 Formularele de date .................................................................................................................................. 55

Teodora Frunză 2/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

4.2 Foi de calcul ce conţin controale de tip Form şi ActiveX........................................................................... 55


4.3 Controale de tip Form .............................................................................................................................. 56
Caracteristici specifice controalelor ................................................................................................................ 57
4.4 Controale de tip ActiveX .......................................................................................................................... 61
Caracteristici specifice controalelor ................................................................................................................ 62
Formulare UsersForm .................................................................................................................................... 62
a) Caseta de text (Textbox) ....................................................................................................................... 63
b) Etichete ................................................................................................................................................ 65
c) Butoane de comandă ............................................................................................................................ 65
d) Butoane de opţiune .............................................................................................................................. 66
e) Caseta de validare ................................................................................................................................. 66
f) Bare de derulare orizontală şi verticală .................................................................................................. 67
g) Controlul spin ...................................................................................................................................... 67
h) Caseta cu listă ....................................................................................................................................... 68
i) Caseta combinată ................................................................................................................................. 69
j) Controlul Image ................................................................................................................................... 70
k) Butoane Toggle .................................................................................................................................... 70
l) Controlul MultiPage ............................................................................................................................. 70
m) Controlul TabStrip ............................................................................................................................... 70
n) Controlul RefEdit................................................................................................................................. 71
5. Tabele .................................................................................................................................................................. 74
5.1 Crearea unui tabel din VBA ...................................................................................................................... 74
5.2 Obţinerea informaţiilor dintr-un tabel ....................................................................................................... 74
5.3 Inserarea unui rând ................................................................................................................................... 75
5.4 Inserarea unei coloane cu valori calculate .................................................................................................. 75
5.5 Totalizarea datelor .................................................................................................................................... 76
5.6 Modificarea informaţiilor din tabel ............................................................................................................ 77
6. Grafice ................................................................................................................................................................. 78
6.1 Crearea unui grafic .................................................................................................................................... 78
6.2 Locaţia unui grafic .................................................................................................................................... 78
6.3 Crearea unui grafic aflat pe o foaie de lucru ............................................................................................... 79
6.4 Crearea unui grafic pe o foaie de grafic ..................................................................................................... 79
6.5 Activarea unui grafic din VBA .................................................................................................................. 80
6.6 Mutarea unui grafic ................................................................................................................................... 80
6.7 Determinarea activării unui grafic.............................................................................................................. 81
6.8 Ştergerea unui grafic ................................................................................................................................. 81
6.9 Formatarea graficelor cu ajutorul VBA...................................................................................................... 82
6.10 Parcurgerea tuturor graficelor ............................................................................................................... 83
6.11 Modificarea datelor utilizate de grafic ................................................................................................... 85
6.12 Exportul unui grafic în format imagine ................................................................................................. 88
6.13 Evenimente asociate graficelor ............................................................................................................. 88
7. Tabele pivot ........................................................................................................................................................ 92
7.1 Noutăţi aduse tabelelor pivot în Excel 2007-2010 ..................................................................................... 92

Teodora Frunză 3/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

7.2 Crearea unui tabel pivot cu ajutorul unei macrocomenzi ........................................................................... 92


7.3 Simplificarea codului scris de macrocomanda ............................................................................................ 93
7.4 Zona cache a pivotului (PivotCaches) ....................................................................................................... 94
7.5 Colecţia PivotTables ................................................................................................................................. 94
7.6 Câmpurile tabelului pivot .......................................................................................................................... 95
7.7 Modificarea funcţiei afişate de tabelul pivot ............................................................................................... 95
7.8 Câmpuri calculate ..................................................................................................................................... 96
7.9 Elemente ale câmpurilor tabelului pivot .................................................................................................... 97
7.10 Gruparea datelor .................................................................................................................................. 97
7.11 Eliminarea grupării datelor ................................................................................................................... 99
7.12 Introducerea valorilor calculate în tabelele pivot ................................................................................. 100
7.13 Ştergerea valorilor calculate în tabelele pivot ....................................................................................... 101
7.14 Grafice pivot ...................................................................................................................................... 101
Anexa Funcţii utile în VBA .................................................................................................................................... 103

Teodora Frunză 4/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

1. Lucrul cu macrocomenzi în Excel


Primul limbaj destinat macro-comenzilor în Excel a apărut în versiunea 2 a programului (Excel
2010 are versiunea 14). Limbajul XLM era alcătuit funcţii care se executau secvenţial şi, deşi era
la vremea acceea foarte puternic, era dificil de învăţat şi utilizat. În versiunile următoare, limbajul
XLM a fost înlocuit de Visual Basic for Application (VBA).
VBA este un mediu de programare care pune la dispoziţie un limbaj complet pentru dezvoltarea
aplicaţiilor în cadrul programelor din pachetul Microsoft Office, folosind un model de
programare orientat spre obiecte şi dirijat de evenimente.

1.1 Generalităţi legate de macrocomenzi


Un macro (sau o macro-comandă) reprezintă un grup de acţiuni sau operaţii. Acestea sunt
memorate de Excel local (în fişierul în care lucrăm) sau global (în fişierul Personal Macro
Workbook), pentru a fi utilizate şi în alte fişiere.
Vom folosi macro-comenzi pentru acele secvenţe de acţiuni pe care le efectuăm în mod repetat.
(de exemplu: formatarea unor celule, paginarea foilor, introducerea unor date, etc.).
Macro-comenzile se execută automat când apăsăm combinaţia de taste asociată, rulăm macro-ul
din lista de macro-comenzi sau apăsăm butonul asociat acestuia.
Acţiunile pe care le conţine un macro sunt codificate într-un limbaj de programare Visual Basic
for Application. Acest cod este creat în foaia pentru module sub forma unei
subrutine ( SUB ) care efectuează acţiunile înregistrate.
Pentru a crea un macro se folosesc 2 metode:
- înregistrare
- introducerea instrucţiunilor.
Pentru a modifica o macrocomanda înregistrată sau pentru a scrie o macrocomandă proprie sunt
necesare cunoştiinţe minimale de Visual Basic.
Intrarea în mediul Visual Basic se poate face utilizând comanda Visual Basic aflată în fila
Developer sau, mai rapid, folosind combinaţia de taste ALT+F11.

1.2 Editorul VBA


Afişarea filei Developer
În Excel 2007-2010, fila Developer nu este afişată implicit. Pentru a afişa fila, veţi proceda în
felul următor:
1. File (butonul Excel Office) / Excel Options
2. În fereastra Excel Options, eticheta Popular, alegeţi opţiunea Show Developer Tab in the
Ribbon.

Activarea VBE
În Excel 2007-2010, editorul Visual Basic (VBE) poate fi activat astfel din fila Developer /
Visual Basic sau cu ajutorul combinaţiei de taste Alt + F11. În plus, dacă doriţi să vizualizaţi
codul unei foi, daţi clic dreapta pe numele foii şi din meniul apărut alegeţi comanda View Code.

Fereastra VBE
Fereastra editorului Visual Basic are următoarele elemente componente:
 Bara de titlu ce conţine titlul ferestrei (ex. Microsoft Visual Basic – Book1)
 Bara de meniuri
 Barele de instrumente; pe bara de instrumente Standard se găsesc, printre altele,
butoanele (revenire la Microsoft Excel), (salvare a fişierului înclusiv a codului
VBA), (rulare procedură sau formă), (oprire procedură), (oprire procedură
Teodora Frunză 5/105
CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

blocată), (mod design), (afişare Project Explorer), (afişare Property


Windows), (afişare Object Browser).

 Fereastra Project Explorer afişată de obicei în stânga, în care se observă structura


arborescentă a fiecărui fişier Excel deschis. Dacă fereastra Project Explorer nu e vizibilă,
poate fi afişată din View / Project Explorer, butonul de pe bara de instrumente sau
Ctrl+R. Fereastra Project Explorer poate fi închisă cu X – ul din colţul dreapta sus al
ferestrei sale, sau prin clic dreapta pe fereastră şi din meniul apărut, comanda Hide.
 Fereastra Code Window este zona din suprafaţa de lucru ce conţine cod VBA. Pentru
fiecare element din fereastra Project Explorer, codul aferent se obţine prin dublu clic. În
cazul în care nu aţi scris cod, fereastra este goală.
 Fereastra Immediate e foarte utilă pentru testarea şi depanarea anumitor secţiuni de cod.
Această fereastră poate fi vizibilă sau nu. Pentru afişarea ferestrei, utilizaţi comanda View
/ Immediate Window sau Ctrl+G, iar pentru a o închide, folosiţi butonul X al ferestrei
sau clic dreapta / hide. În această fereastră se poate executa cod VBA fără crearea macro-
urilor. Orice comenzi scrieţi în această fereastră, vor dispărea când închideţi fişierul.

Adăugarea unui modul VBA


În cazul în care doriţi adăugarea unui modul nou VBA fişierului în care lucraţi, veţi proceda
astfel:
1. Selectaţi numele fişierului din fereastra Project Explorer
2. Clic dreapta / Insert / Module

Obs: Când înregistraţi un macro, Excel-ul va insera automat codul VBA într-un modul.

Eliminarea unui modul VBA


În cazul în care doriţi ştergerea unui modul dintr-un fişier,
1. Selectaţi numele modulului din fereastra Project Explorer
2. Clic dreapta / Remove Module ...
3. Veţi fi întrebaţi dacă doriţi exportul modului înainte de ştergerea din acest fişier. Dacă
doriţi păstrarea codului, procedaţi după indicaţiile paragrafului următor.

Teodora Frunză 6/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Obs: nu puteţi elimina module asociate fişierului (ThisWorkbook) sau foilor (Sheet1, etc.).
Exportul şi importul obiectelor VBA
Salvarea obiectelor sau codului VBA în fişiere separate de fişierul curent poartă numele de
export. Folosirea acestor obiecte în alte fişiere presupune importul acestora.
Exportul unui obiect sau modul Excel se face astfel:
1. Selectaţi obiectul din fereastra Project Explorer
2. Clic dreapta / Export File
3. În fereastra Export File precizaţi calea şi numele fişierului.

Importul unui obiect sau modul Excel se face similar:


1. Selectaţi numele fişierului curent din fereastra Project Explorer
2. Clic dreapta / Import File
3. În fereastra Import File precizaţi calea şi numele fişierului.

1.3 Înregistrarea unei macro-comenzi


O macro-comandă lucrează ca un casetofon: l-am pornit şi înregistrează acţiunile pe care le
“traduce” în limbaj VBA.

Pentru a crea macrocomenzi parcurgeţi următorii paşi:


Pas1: Alegem comanda Record Macro din fila View / Macro sau din fila Developer sau
de pe bara de stare (butonul ).
Pas2: Apare fereastra următoare unde completăm numele macro-comenzii (fără spaţii),
alegem o combinaţie de taste (shortcut key) pentru execuţia rapidă a macro-ului,
alegem locul de stocare a macro-comenzii (în fişierul curent – This Workbook, într-un
fişier nou – New Workbook sau global, pentru accesul din orice fişier Excel - Personal Macro
Workbook ). Opţional, putem scrie o scurtă descriere a acţiunii macro-comenzii.

Pas3: Dacă dorim ca înregistrarea să se efectueze folosind adrese relative alegem


opţiunea Relative Reference din fila Developer sau View / Macros.
Pas 4: Se parcurg toate comenzile care trebuiesc înregistrate.
Ex. Page Layout / Page Setup / Margins : Top :2, Bottom :2, Left : 2, Right : 2 ;
Page Layout / Page Setup / Header şi introduceţi numele utilizatorului şi data în

Teodora Frunză 7/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

stânga; Page Layout / Page Setup / Footer şi introduceţi numărul paginii curente
în dreapta.
Pas 5: Se opreşte înregistrarea apăsând butonul Stop Recording de pe bara de stare, din
fila Developer sau View.

Exemplu: Crearea unei macrocomenzi cu numele Date firmă.


- Nume: Date_firma
- Combinaţia de taste: Ctrl + y.
- Localizare: This Workbook
- Descriere: Introducere date firma
- Alegem Relative Reference pentru ca datele să fie scrise începând cu celula activă
- Acţiuni:
- scriem datele firmei în celula curentă: Infotim ETA2U Training Center
- enter
- introducem adresa: Str. C. Brediceanu, nr. 8
- Stop înregistrare

În urma înregistrării unei macro-comenzi, programul Excel generează o secvenţă de program


VBA, de exemplu:

1.4 Execuţia unei macrocomenzi


Un macro poate fi executat astfel:
- din fila View / Macros / View Macro sau Developer / Macros ajungem în fereastra
Macro

Teodora Frunză 8/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

- se selectează macro-ul dorit din lista Macro Name.


- se apasă butonul Run

Obs. Mai rapid se poate executa o macro-comandă cu combinaţia de taste asociate.

1.5 Modificarea unei macrocomenzi


Modificarea unei macro-comenzi presupune intervenţia în succesiunea comenzilor înregistrare cu
ajutorul editorului Visual Basic.
Pas 1: Din fila View / Macros / View Macro sau Developer / Macros ajungem în
fereastra Macro
Pas 2: Selectăm numele macrocomenzii.
Pas 3: Apăsăm butonul Edit şi va apărea fereastra următoare :

Pas 4: Modificăm acţiunile înregistrate.

De exemplu, adăugăm la adresă localitatea Timişoara:

Pas 5: Închidem fereastra de editare.

1.6 Ştergerea unei macro-comenzi


Pas 1: Din fila View / Macros / View Macro sau Developer / Macros ajungem în
fereastra Macro
Pas 2: Selectăm numele macrocomenzii.
Teodora Frunză 9/105
CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Pas 3: Delete.

1.7 Lucrul cu macro-comenzi globale


Până în acest moment am lucrat cu macro-comenzi păstrate local, în fişierul în care lucrăm. Dacă
dorim să creăm macro-comenzi care să poată fi utilizate din orice fişier Excel, atunci acestea le
vom crea global, în fişierul Personal.xslb salvat de Excel în C:\Documents and Settings \
numele Dvs de utilizator \ Application Data \ Microsoft \ Excel \ XLSTART.

Exemplu: Crearea unei macrocomenzi cu numele Date firmă global.


- Nume: Date_firma_global
- Combinaţia de taste: Ctrl + w.
- Localizare: Personal Macro Workbook
- Descriere: Introducere datele firmei în orice fisier Excel.
- Alegem Relative Reference pentru ca datele să fie scrise începând cu celula activă
- Acţiuni:
- scriem datele firmei în celula curentă: Infotim ETA2U Training Center
- enter
- introducem adresa: Str. C. Brediceanu, nr. 8
- enter
- scriem Telefon: 0256-277644, 0256-221372
- Stop înregistrare

Pentru a modifica sau şterge un macro global, parcurgem următorii paşi:


Pas 1: Afişăm fişierul Personal.xlsb: alegem View / Unhide şi din fereastra Unhide ,
selectâm fişierul Personal.xlsb şi OK.

Pas 2: În fişierul Personal.xlsb alegem fila View / Macros / View Macro sau Developer
/ Macros şi ajungem în fereastra Macro.
Pas 3: Edităm sau ştergem macro-comanda.
Pas 4: Salvăm fişierul Personal.xlsb.
Pas 5: Ascundem fişierul Personal.xlsb: alegem View / Hide.

1.8 Salvarea fişierelor ce conţin macro-comenzi


În Excel 2007-2010 fişierele obişnuite se deosebesc de cele ce conţin macro-comenzi. Astfel,
dacă doriţi să salvaţi un fişier fără macro-comenzi, folosiţi salvarea ca Excel Workbook (File
(butonul Office) / Save As / Excel Workbook), extensia fiind .xlsx. În cazul în care doriţi să
salvaţi macro-comenzile create, folosiţi salvarea ca Excel Macro-Enabled Workbook (File
(butonul Office) / Save As / Excel Macro-Enabled Workbook), extensia fiind .xlsm. Acesta este
o element nou introdus în Excel 2007.

Teodora Frunză 10/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

1.9 Deschiderea unor fişiere care conţin macrocomenzi


La deschiderea unui fişier ce conţine macro-uri în Excel 2007-2010, va apare bara Security
Warning cu butonul Options, imediat sub banda din partea de sus a ferestrei.

Implicit, macro-urile sunt dezactivate, iar pentru a le activa daţi clic pe butonul Options şi
Enable this content din fereastra Microsoft Office Secutiry Options.

1.10 Introducerea unui buton asociat macro pe bara de instrumente


Macro-urile folosite des şi păstrate în fişierul Personal Macro Workbook pot fi rulate cu ajutorul
butoanelor de pe bara de comenzi rapide (Quick Access Toolbar).
Pentru a introduce un buton pe bara de comenzi rapide parcurgeţi următorii paşi:

1 Clic pe săgeata de la sfârşitul barei de comenzi rapide şi alegeţi opţiunea More


Commands.

2 Va apare fereastra Excel Options, alegem opţiunea Macros din lista Choose
commands from. Imediat, în listă vor fi afişate toate macro-urile disponibile,

Teodora Frunză 11/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

selectăm macro-ul dorit şi clic pe Add. Numele macro-ului va fi afişat în lista din
dreapta ferestrei ce conţine toate elementele afişate în bara de access rapid.

3 Dacă dorim, putem modifica pictograma macro-ului. Selectăm macro-ul din lista
Customize Quick Access Toolbar şi clic pe Modify. Va apare fereastra Modify
Button, de unde alegem pictograma dorită.

1.11 Încrederea în fişiere ce conţin macro-comenzi


Pentru protecţia datelor Dvs, programul Excel vă cere activarea macro-comenzilor de fiecare
dată când deschideţi un fişier de conţine macro-uri.
Dacă lucraţi frecvent cu fişiere ce conţine macro-uri, acest lucru devine deranjant. Există două
alternative simple ce permit eliminarea necesităţii de a activa macro-urile la deschiderea fişierelor.
Prima alternativă presupune declararea unor directoare ca fiind “sigure”. Astfel, puteţi deschide
orice fişier din aceste directoare, macro-urile fiind activate automat.
A doua alternativă implică “încrederea” în autorul fişierului ce conţine macro-uri.
a) Directoare “de încredere”

Pentru a stabili că un director este de “încredere” parcurgeţi următorii paşi:

Teodora Frunză 12/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Pas 1: File (Butonul Excel Office) / Excel Options / Trust Center / Trust
Center Settings / Trusted Locations / Add New Location
Pas 2: În fereastra Microsoft Office Trusted Location clic pe Browse şi alegeţi
directorul pentru care doriţi să stabiliţi siguranţa:

Pas 3: Bifaţi opţiunea Subfolders of this location are also trusted, dacă doriţi ca şi
fişierele din subdirectoare să devină sigure. OK.
Pas 4: OK. Veţi observa în fereastra Trust Center calea şi numele directorului selectat.

Obs: În fereastra Trust Center / Trusted Location aveţi şi butoanele Remove şi Modify pentru
a elimina sau modifica directoarele “sigure” de pe calculatorul Dvs.

Specificarea unor locaţii (directoare) de “încredere” este utilă în cazul în care păstraţi fişierele cu
macro-uri în anumite directoare şi în cazul în care primiţi astfel de fişiere de la colegi.

b) “Încrederea” în autorul fişierului

În cazul în care Dvs. creaţi fişiere ce conţin macro-uri ce trebuie păstrate în locaţii arbitrare, vă
puteţi desemna Dvs. ca fiind “de încredere”.
Stabilirea încrederii în fişiere ce conţin macro-uri:
Pas 1: Deschideţi fişierul ce conţine macro-uri şi care nu se află într-un director de
încredere.

Teodora Frunză 13/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Pas 2: File (Butonul Excel Office) / Prepare / Add a Digital Signature. În


fereastra ce apare daţi clic pe Ok.
Pas 3: Apare fereastra Get a Digital ID în care selectaţi Create your own digital ID

Pas 4: În fereastra Create your own digital ID completaţi datele Dvs.

Pas 5: În fereastra următoare daţi CANCEL. NU daţi clic pe Sign /Go /collect $200 !!!

Important: Veţi semna digital doar codurile VBA din fişier, nu şi fişierul în sine.
Folosirea comenzii Prepare a butonului Excel Office e o cale uşoară către crearea
unei identităţi digitale, dar dacă veţi semna digital documentele, împiedicaţi orice
modificare a conţinutului acestora. Dacă semnaţi digital codurile VBA din fişiere,
doar macro-comenzile sunt semnate şi oricine poate face modificări în conţinutul
fişierelor Excel.

Pas 6: Intraţi în editorul Visual Basic (Developer / Visual Basic) şi de aici alegeţi
Tools / Digital Signature. În fereastra ce apare observaţi că proiectul VBA
curent nu este semnat.

Teodora Frunză 14/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Pas 7: Alegeţi Choose şi din fereastra Select Certificate selectaţi ID-ul digital al Dvs.

Pas 8: După ce daţi ok, veţi observa că proiectul curent apare semnat de Dvs.

Pas 9: Reveniţi la Excel, salvaţi şi închideţi fişierul semnat digital într-o locaţie care nu e
în lista directoarelor sigure.
Pas 10: Deschideţi fişierul anterior. Clic pe butonul Options de pe bara Security. Va
apare fereastra următoare care vă indică faptul că documentele sunt semnate de
un autor (Dvs. în acest caz), dar pe care încă nu aţi stabilit dacă e de încredere.
Alegeţi opţiunea Trust all documents from this publisher pentru ca pe viitor
toate documentele semnate de Dvs. să fie aibă macro-urile active.

Teodora Frunză 15/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Obs: O dată ce v-aţi creat o identitate digitală, puteţi semna proiectele VBA urmând paşii 6-8.

Puteţi vizualiza sau modifica lista de autori de “încredere” astfel: File (Butonul Excel Office) /
Excel Options / Trust Center / Trust Center Settings / Trusted Publisher.

În cele prezentate se poate remarca faptul că aveţi la dispoziţie două soluţii de a desemna fişierele
Dvs, ca fiind de încredere. Dacă creaţi astfel de fişiere în special pentru ca Dvs. să le utilizaţi,
varianta a doua cu semnătura digitală pe proiectele VBA este cea mai flexibilă soluţie. Dacă, însă,
creaţi fişiere cu macro-comenzi pentru a fi utilizate în comun de mai mulţi utilizatori, varianta cu
o locaţie “sigură” este cea mai bună soluţie. Dacă veţi crea fişiere ce conţin macro-comenzi
pentru o largă audienţă, atunci soluţia indicată este achiziţionarea ueni semnături digitale
autentice şi semnarea documentelor.

Teodora Frunză 16/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

2. Lucrul cu fişiere şi foi de calcul

2.1 Elemente de bază de VBA pentru Excel


Limbajul VBA se bazează pe lucrul cu obiecte. Pentru a le utiliza, iată câteva noţiuni elementare
de lucru cu limbajul:
 cod: toate acţiunile pe care le executaţi sunt scrise în cod VBA. Codul VBA scris sau
înregistrat (cu ajutorul macro-urilor) este stocat în module VBA.
 modul: modulele VBA sunt stocate în foi Excel. Pentru a vizualiza sau modifica module
VBA, folosiţi editorul Visual Basic (VBE) fie din fila Developer, fie cu ajutorul
combinaţiei de taste Alt+F11. Un modul conţine una sau mai multe proceduri.
 Procedura: o procedura este o unitate de cod care efectuează anumite acţiuni. În VBA
sunt două tipuri de proceduri: subrutine (Sub) şi funcţii (Function).
o Subrutina: conţine mai multe instrucţiuni care se execută. Toate macro-urile sunt
codificate sub forma unei subrutine. Un asfel de exemplu este următorul:
Sub InserareFoaieNoua()
Sheets("Sheet1").Select
Sheets.Add
End Sub
o Funcţia: e similară cu subrutina, dar returnează o valoare. Poate fi apelată dintr-o
subrutină sau o altă funcţie, sau poate fi utilizată direct în formule din foile de
calcul Excel.
Function spor(salariu As Integer)
' sporul este de 20% din salariu
spor = salariu * 1.2
End Function
 Obiect: în limbajul VBA se lucrează cu obiecte ale aplicaţiei Excel (în cazul nostru).
Exemple de obiecte: worksheet, workbook, application, range, cell, chart. În Excel sunt
mai mult de 100 de clase de obiecte ce pot fi utilizate. Aceste clase de obiecte sunt
aranjate într-o ierarhie.
 Colecţii: obiecte de acelaşi tip formează o colecţie. De exemplu, colecţia Worksheets
conţine toate foile de lucru dintr-un fişier.
 Ierarhia obiectelor: Unele obiecte pot conţine alte obiecte (adică sunt containere pentru
acestea). De exemplu, obiectul Application desemnează aplicaţia Excel şi conţine alte
obiecte precum Workbook (fişierul Excel), ActiveCell (celula activă), ActiveChart
(graficul activ) etc. Obiectul Workbook conţine la rândul lui alte obiecte, precum
Worksheet (foi de lucru) şi Chart (grafice). Obiectul Worksheet conţine multe obiecte,
cum ar fi Range (domeniu), PivotTable (tabele pivot), etc. Şi lista poate continua.
O astfel de organizare a acestor obiecte se numeşte ierarhia de obiecte Excel. Aveţi mai
jos o mică porţiune această ierarhie (întreaga ierarhie o puteţi vizualiza prin căutarea în
help-ul VBA a cuvintelor Excel Object Model Map).

Ierarhia obiectelor Excel:


Application ( reprezintă mediul de lucru EXCEL)
Workbooks (mulţimea fişierelor de lucru)
ThisWorkbook (fişierul de lucru în care se execută operaţia curentă)
Sheets (mulţimea tuturor foilor din fişierul de lucru)
WorkSheets (mulţimea foilor de calcul din fişierul de lucru)
Charts (mulţimea foilor de grafic)
Range (celula sau domeniul/domeniile de celule apelat folosind
nume sau referinţe de tip A1)
Cells (celula sau domeniul de celule apelat folosind referinţe
de tip R1C1)
Teodora Frunză 17/105
CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Când vă referiţi la un obiect conţinut în alt obiect, veţi specifica poziţia acestuia în
ierarhia de obiecte folosind punctul (“.”) ca separator între container şi membru.
De exemplu, referirea la fişierul Book1.xlsx se face astfel:
Application. Workbooks("Book1.xlsx")
Vă referiţi astfel la fişierul Book1.xlsx din colecţia Workbooks. Această colecţie este
conţinută în obiectul Application.
Dacă doriţi să vă referiţi la foaia Sheet1 din fişierul Book1.xlsx, veţi proceda astfel:
Application.Workbooks("Book1.xlsx").Worksheets("Sheet1")
Mai mult, dacă doriţi să ajungeţi în celula A1 din foaia Sheet1 din fişierul Book1.xlsx,
scrieţi următorul cod:
Application.Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1")
 Obiecte active: în cazul în care omiteţi să faceţi referire la un obiect, Excel-ul foloseşte
obiectele active, ca substitut (dacă e posibil). Astfel, dacă fişierul Book1 este fişierul activ,
o variantă simplificată de a scrie în celula A1 din foaia Sheet 1 este următoarea:
Worksheets("Sheet1").Range("A1")
Mai mult, dacă foaia Sheet1 este foaia activă, puteţi simplifica şi mai mult scrierea:
Range("A1")
Obs: dacă foaia Sheet2 este foaia activă (în aceasta sunteţi poziţionaţi), atunci referirea se
face la celula A1 din foaia Sheet2.

Ierarhia obiectelor active Excel:


Application ( reprezintă mediul de lucru EXCEL)
ActiveWorkbook (fişierul de lucru activ)
ActiveSheet (foaia de lucru activă)
ActiveChart (foaia de grafic activă)
ActiveCell (celula activă)
Selection (obiectul selectat)

 Proprietăţi ale obiectelor: Obiectele au proprietăţi (le puteţi gândi ca setări). De


exemplu, un obiect de tip domeniu (Range) are proprietăţi ca valoare (Value) sau nume
(Name), un obiect de tip grafic (Chart) are proprietăţi ca tip grafic (Type) etc. Cu ajutorul
VBA puteţi determina şi modifica aceste proprietăţi.
De exemplu, scriem valoarea 1 în celula A1 din foaia Sheet1 a fişierului curent.
Worksheets("Sheet1").Range("A1").Value = 1
 Metode ale obiectelor: Obiectele au pe lângă proprietăţi şi metode. Metodele sunt
acţiuni care pot fi efectuate de obiecte. De exemplu, o metodă a obiectului Range este
ClearContents, ceea ce determină golirea conţinutului celulelor din domeniu.
Astfel, dacă doriţi golirea conţinutului celulelor A1:B2 din foaia Sheet1 a fişierului activ,
scrieţi următorul cod:
Worksheets("Sheet1").Range("A1:B2").ClearContents
 Variabile VBA: puteţi crea variabile VBA care să conţină anumite valori. De exemplu, în
variabila impozit doriţi să păstraţi procentul aferent acestuia, valoare care se găseşte în
celula C5 din sheet1 a fişierului curent:
impozit = Worksheets("Sheet1").Range("A1").Value
 Instrucţiuni VBA: în limbajul VBA, există şi instrucţiuni specifice de programare:
instrucţiuni de decizie, de ciclare etc.
 Evenimente: unele obiecte răspund la anumite evenimente (clic de mouse, apăsarea unei
taste, trecere la o foaie nouă, modificarea valorii unei celule, etc).

2.2 Lucrul cu fişiere Excel din VBA

Teodora Frunză 18/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Lucrul cu fişiere Excel din VBA presupune folosirea obiectelor ThisWorkbook,


ActiveWorkbook din a celor din colecţia Workbooks. Toate operaţiunile cu fişiere înseamnă
folosirea metodelor şi proprietăţilor acestor obiecte.

Crearea unui fişier nou


Comanda de crearea a unui fişier nou este:
Workbooks.Add
Exemplu: în fereastra Immediate scrieţi comanda de creare a unui fişier nou.

Numărul de fişiere deschise


Proprietatea care afişează numărul fişierelor deschise este:
Workbooks.Count
Exemplu: în fereastra Immediate afişaţi numărul de fişiere deschise scriind comanda
?Workbooks.Count. Count este o proprietate a obiectului Workbook, iar pentru afişarea ei, în
fereastra Immediate, se scrie simbolul “?” înaintea comenzii.

Închiderea tuturor fişierelor deschise


Workbooks.Close

Referirea la un anumit fişier


a) Folosind numărul fişierului
Toate fişierele deschise în Excel sunt păstrate într-o listă. Dacă dorim să accesăm primul fişier
Excel, comanda este Workbooks(1), pentru al doilea fişier, comanda este Workbooks(2), etc.
Exemplu: afişaţi în fereastra Immediate numele fişierelor Excel deschise (folosiţi comanda
?Workbooks(nr_fisier).Name ).

b) Folosind numele fişierului


Un alt mod de referire la un fişier din VBA cel în care folosim direct numel fişierului:
Workbooks(“Book1.xlsx”).
Exemplu: închideţi fişierul Book1.xlsx din fereastra Immediate. (tastaţi comanda
Workbooks(“Book1.xlsx”).Close)
Exmplu: activaţi un anumit fişier din fereastra Immediate. tastaţi comanda
Workbooks(“Book2.xlsx”).Activate)

c) Utilizând fişierul activ


Dacă nu există pericol de confuzie, puteţi folosi pentru referirea unui fişier, obiectul
ActiveWorkbook ce indică fişierul activ.
Exemplu: afişaţi în fereastra Immediate numele fişierului Excel activ (folosiţi comanda
?ActiveWorkbook.Name ).

d) Utilizând fişierul curent


Pentru a folosi fişierul curent de lucru se foloseşte obiectul ThisWorkbook.
Exemplu: afişaţi în fereastra Immediate numele fişierului Excel curent (folosiţi comanda
?ThisWorkbook.Name ).

Salvarea unui fişier


a) Salvarea cu comanda Save:
Workbooks(“Book1.xlsx”).Save
b) Salvarea cu comanda Save As:
Workbooks(“Book1.xlsx”).SaveAs(“C:\fisier.xlsx”)
După cum se observă, salvarea presupune referirea la fişierul pe care doriţi să-l salvaţi şi utilizarea
comenzii Save pentru salvarea cu acelaşi nume sau a comenzii SaveAs. În cazul comenzii SaveAs

Teodora Frunză 19/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

veţi specifica între ghilimele calea şi numele fişierului. Dacă nu specificaţi calea, fişierul va fi
salvat în directorul curent de lucru.

Deschiderea unui fişier


Comanda de deschidere a unui fişier e similară cu salvarea acestuia. Vom preciza doar numele
fişierului atunci când acesta se găseşte în directorul curent, sau toată calea şi numele fişierului,
atunci când acesta este în alt director.
Workbooks.Open(“Book1.xlsx”)
sau
Workbooks.Open(“C:\Book1.xlsx”)

Exerciţii:
- Creaţi trei fişiere (workbooks.add)
- Afişaţi numărul fişierelor deschise (workbooks.count)
- Afişaţi numele fiecărui fişier (folosiţi referirea cu ajutorul numărului fişierului, a numelui
sau a celui activ)
- Închideţi fişierul activ (activeworkbook.close)
- Afişaţi numărul fişierelor deschise (workbooks.count)
- Afişaţi numele fiecărui fişier (folosiţi referirea cu ajutorul numărului fişierului, a numelui
sau a celui activ)
- Activaţi primul fişier creat
- Salvaţi fişierul cu comanda Save (activeworkbook.save)
- Salvaţi celălalt fişier cu comanda Save As (activeworkbook.saveas(“C:\info.xlsx”) )
- Închideţi toate fişierele (workbooks.close)
- Deschideţi cele două fişiere salvate

2.3 Lucrul cu foi Excel din VBA


Pentru a folosi foi de calcul Excel în VBA, vom utiliza metode şi proprietăţi ale obiectului
ActiveWorksheet sau a celor din colecţia Worksheets. Similar, pentru a folosi foi de grafic
Excel în VBA, vom utiliza obiectul ActiveChart sau din a celor din colecţia Charts. Pentru a
folosi foi de calcul sau grafic avem la dispoziţie obiectul ActiveSheet sau colecţia Sheets. Toate
aceste obiecte au metode şi proprietăţi comune, cum ar fi:
 Metode: inserarea, copierea, mutarea, ştergerea sau tipărirea foilor;
 Proprietăţi: numărul foilor dintr-un fişier, vizibilitatea unei foi, întreruperile de pagină
orizontale sau verticale.

Referirea la o anumită foaie


a) Folosind numărul foii
Lista foilor unui fişier poate fi folosită pentru accesarea acesteia. Astfel, dacă dorim să accesăm
prima foaie de calcul, comanda este Worksheets(1), pentru a doua Worksheets(2), etc. Similar
se procedează şi pentru foile de grafic folosind Charts(1), Charts(2) etc. sau pentru foi de orice
tip, cu Sheets(1), Sheets(2) etc.
Exemplu: afişaţi în fereastra Immediate numele foilor Excel din fişierul curent (folosiţi comenzile
?Worksheets(nr_foaie).Name, ?Sheets(nr_foaie).Name şi ?Charts(nr_foaie).Name ).

b) Folosind numele foii


Un alt mod de referire la un fişier din VBA cel în care folosim direct numele foii:
Worksheets(“Sheet1”), Charts(“Grafic2”) sau Sheets(“Sheet4”).
Exemplu: activaţi foaia Grafic3 din fereastra Immediate. (tastaţi comanda
Charts (“Grafic3”).Activate)

Teodora Frunză 20/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Exmplu: activaţi un anumit fişier din fereastra Immediate. tastaţi comanda


Workbooks(“Book2.xlsx”).Activate)

c) Folosind foaia activă


Referirea la foaia activă se face cu ajutorul obiectulelor ActiveSheet (foaia de calcul sau grafic
activă)sau ActiveChart (foaia de grafic activă).
Exemplu: afişaţi în fereastra Immediate numele foii active (folosiţi comanda ?Activesheet.Name).

Inserarea unei noi foi de calcul


Metoda Add a colecţiilor Worksheets, Charts sau Sheets conduce la introducerea unei noi foi
de calcul sau grafic. Foaia nou creată devine foaia activă.
Sintaxa:
foaie.Add(Before, After, Count, Type)
unde:
foaie – o variabilă ce reprezintă o foaie (ex. sheets, worksheets sau charts)
before – un obiect ce reprezintă foaia înaintea căreia va fi inserată noua foaie (argument opţional)
after – un obiect ce reprezintă foaia după căreia va fi inserată noua foaie (argument opţional)
count – numărul de foi inserate (argument opţional)
type – specifică tipul foilor inserate xlWorksheet (pentru foi de calcul), xlChart (pentru foi de
grafic); valoarea implicită este xlWorksheet (argument opţional)
Valoarea returnată: un obiect de tip worksheet sau chart ce desemnează noua foaie.

Exemple:
1) Inseraţi o nouă foaie de calcul:
Worksheets.Add
2) Inserarea unei noi foi de calcul înaintea foii Sheet3:
worksheets.Add before:=sheets("Sheet3")
sau
sheets.Add before:=sheets("Sheet3"), type:= xlWorksheet
3) Inserarea unei noi foi de grafic după foaia Sheet1:
sheets.Add after:=sheets("Sheet1"), type:= xlChart
sau
charts.Add after:=sheets("Sheet1")
4) Inserarea a două foi de calcul la sfârşit:
sheets.Add after:=sheets(sheets.count), type:= xlWorksheet
sau
worksheets.Add after:=sheets(sheets.count)

Redenumirea unei foi


Schimbarea numelui unei foi presupune stabilirea unei valori pentru proprietatea Name a
obiectului respectiv:
foaie.Name = nume_foaie
unde:
foaie – un obiect de tip foaie de calcul sau grafic în Excel
nume_foaie – noul nume pe care dorim să-l dăm foii, scris între ghilimele
Exemplu:
1) Modificaţi numele primei foi în Informatii:
Worksheets(1).Name=”Informatii”
2) Modificaţi foii Chart1 în Evolutie cheltuieli:
Sheets(“Chart1”).Name=” Evolutie cheltuieli”

Ştergerea unei foi


Ştergerea unei foi se face prin apelarea metodei Delete a obiectului respectiv:

Teodora Frunză 21/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

foaie.Delete
unde:
foaie – un obiect de tip foaie de calcul sau grafic în Excel
Dacă pe foaie sunt informaţii, va apare o fereastră care vă va cere confirmarea ştergerii.

Exemplu: Ştergeţi foaia cu numele Informatii:


Sheets(“Informatii”).Delete

Ascunderea/afişarea unei foi


Ascunderea/afişarea unei foi presupune folosirea proprietăţii Visible a obiectului respectiv.
Putem verifica starea acestei proprietăţi, sau o putem modifica. Dacă stabilim valoarea True a
proprietăţii visible, foaia va fi afişată, în timp ce valoarea False determină ascunderea foii.
foaie.Visible = boolean
unde:
foaie – un obiect de tip foaie de calcul sau grafic în Excel
boolean – valoarea True sau False
Exemple:
1) Foaia Evolutie cheltuieli este afişată?
?Sheets(“Evolutie cheltuieli”).Visible
2) Ascundeţi foaia Evolutie cheltuieli:
Sheets(“Evolutie cheltuieli”).Visible = False
3) Verificaţi faptul că foaia Evolutie cheltuieli este ascunsă:
?Sheets(“Evolutie cheltuieli”).Visible
4) Afişaţi foaia Evolutie cheltuieli:
Sheets(“Evolutie cheltuieli”).Visible = True

Copierea sau mutarea unei foi


Pentru copierea sau mutarea foilor se folosesc metodele Copy, respectiv Move.
Sintaxa:
foaie.Copy(Before, After)
foaie.Move(Before, After)
unde:
foaie – o variabilă ce reprezintă o foaie (ex. sheets, worksheets sau charts)
before – un obiect ce reprezintă foaia înaintea căreia va fi inserată noua foaie (argument opţional)
after – un obiect ce reprezintă foaia după căreia va fi inserată noua foaie (argument opţional)
Când folosiţi funcţia Copy sau Move, veţi folosi doar unul din argumentele before sau after, în
caz contrar, Excel-ul va genera o eroare. Dacă nu specificaţi nici before, nici after, Excel va crea
un fişier nou ce conţine foaia copiată sau mutată.

Exemple:
1) Copiaţi foaia Evolutie cheltuieli la începutul foilor:
Sheets(“Evolutie cheltuieli”).Copy Before:= Sheets(1)
2) Mutaţi foaia Sheet2 la sfarsitul foilor:
Sheets(“Sheet2”).Move after:=Sheets(Sheets.Count)
3) Copiaţi foaia Evolutie cheltuieli după foaia Sheet2:
Sheets(“Evolutie cheltuieli”).Copy After:= Sheets(“Sheet2”)
4) Mutaţi foaia Evolutie cheltuieli într-un fişier nou:
Sheets(“Evolutie cheltuieli”).Move
5) Copiaţi foaia Sheet3 din fişierul curent în fişierul Book2, la început:
Sheets(“Sheet3”).Copy Before:= Workbooks(“Book2”).Sheets(1)
6) Mutaţi foaia Sheet1 din Book 2 în fişierul Book1, după foaia Sheet3:
Workbooks(“Book2”).Sheets(“Sheet1”).Copy After:= Workbooks(“Book1”).Sheets
(“Sheet3”)

Teodora Frunză 22/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Vizualizarea unei foi înainte de tipărire


Pentru a vizualiza o foaie înainte de tipărire se foloseşte metoda PrintPreview a obiectelor de tip
foi.
Sintaxa:
foaie.PrintPreview(EnableChanges)
unde:
foaie – o variabilă ce reprezintă o foaie (ex. sheets, worksheets sau charts)
EnableChanges – True dacă doriţi ca marginile şi alte setări de pagină să poată fi efectuate, sau
False în caz contrar. Valoarea implicită este True. (argument opţional)

Exemplu: Vizualizaţi foaia Sheet2 înainte de tipărire astfel încât utilizatorul să aibă posibilitatea
de a modifica marginile paginii:
Sheets(“sheet2”).PrintPreview

Tipărirea unei foi


Tipărirea unei foi se realizează cu ajutorul metodei PrintOut a obiectelor de tip foi Excel.
Sintaxa:
foaie.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile,
Collate, PrToFileName, IgnorePrintAreas)
unde:
foaie – o variabilă ce reprezintă o foaie (ex. sheets, worksheets sau charts)
from – numărul de pagină de la care porneşte tipărirea; dacă acest argument este omis, tipărirea
porneşte de la prima pagină (argument opţional)
to – ultima pagină care se listează; dacă acest argument este omis, tipărirea se opreşte la ultima
pagină (argument opţional)
copies – numărul de exemplare tipărite; dacă argumentul e omis, se tipăreşte un exemplar
(argument opţional)
preview – True dacă dorim afişarea ferestrei PrintPreview înainte de tipărire sau False dacă vrem
să trecem direct la tipărire (argument opţional)
ActivePrinter – stabileşte numele imprimantei la care se face listarea; dacă argumentul nu e
precizat, tipărirea se face la imprimanta implicită (argument opţional)
PrintToFile – True dacă dorim tipărirea în fişier, False în caz contrar. Dacă PrToFileName nu e
precizat, va apare o fereastră ce va cere utilizatorului numele fişierului. Valoarea implicită
este False. (argument opţional)
Collate – True dacă dorim tipărirea în colaţionarea multiplelor exemplare. (argument opţional)
PrToFileName – dacă PrintToFile e True, cu ajutorul acestui argument putem preciza numele
fişierului în care facem tipărirea.
IgnorePrintAreas – True pentru a ignora selecţia din PrintArea şi a tipări întegul obiect.

Exemple:
1) Tipăriţi foaia Sheet1 la imprimanta implicită:
Sheets(“Sheet1”).PrintOut

2) Tipăriţi paginile 2-4 din foaia Sheet2, în 2 exemplare colaţionate, la imprimanta implicită:
Sheets(“Sheet2”).PrintOut from:=2, to:=4, copies:=2, collate:=true

2.4 Lucrul cu domenii


Multe operaţii pe care le veţi efectua din VBA au la bază lucrul cu anumite celule sau domenii din
foile de calcul. O celulă sau domeniu înseamnă în VBA un obiect Range. Obiectul Range face
parte din obiectele conţinute în obiectul Worksheet (foaie de lucru).
Referirea la un obiect Range în VBA se poate face mai multe moduri:
 proprietatea Range a unui obiect Worksheet sau Range

Teodora Frunză 23/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

 proprietatea Cells a unui obiect Worksheet sau Range


 proprietatea Offset a unui obiect Range
 proprietăţile Rows şi Columns a unui obiect Worksheet sau Range
 folosind celula activă (ActiveCell)

Adresarea unui domeniu cu ajutorul obiectului Range


Sintaxa:
obiect.Range(cell1, cell2)
unde:
obiect – un obiect de tip Worksheet; dacă nu se specifică, va fi folosit obiectul ActiveSheet
cell1 – numele domeniului. Exemple: ”A1”, ”C2:D4”, ”C:F”, ”2:12” sau un nume definit în
Excel. (argument obligatoriu)
cell2 – celula din conlţul stânga sus sau dreapta jos a domeniului. (argument opţional)

Exemple:
1) Introduceţi în celula A1 din foaia Sheet1, valoarea 10.5:
Worksheets(“Sheet1”).Range(“A1”).Value = 10.5
2) Introduceţi în domeniul A3:C3 din foaia Sheet1, valoarea 100:
Worksheets("Sheet1").Range("A3","C3").Value = 100
sau
Worksheets("Sheet1").Range("A3:C3").Value = 100
3) Introduceţi în celula D3 din foaia Sheet1, formula de însumare a celulelor A3:C3:
Worksheets("Sheet1").Range("D3").Formula = "=sum(A3:C3)"
4) Denumiţi celulele B4:C5 cu numele date. Cu autorul VBA scrieţi în domeniul date
valoarea 250:
Worksheets("Sheet1").Range("date").Value = 250
5) Introduceţi în celulele A5,A7,A9,C6,D8, valoarea 10:
Worksheets("Sheet1").Range("A5,A7,A9,C6,D8") = 10
6) Introduceţi în celula activă valoarea 5:
ActiveCell.Value = 5
sau
ActiveCell.Range("A1") = 5
Obs: Când folosim obiectul Range pentru celula activă, domeniul este considerat relativ
faţă de această celulă, poziţia A1 desemnând celula activă.
7) Introduceţi în celula din dreapta celulei active valoarea 20:
ActiveCell.Range("B1") = 20
8) Introduceţi în celula din dreapta şi un rând mai jos faţă de celula activă valoarea 8:
ActiveCell.Range("B2") = 8
9) Coloanele corespunzătoare domeniului "A2:C4"formataţi-le cu un font de culoare roşie.
Range("A2:C4").EntireColumn.Font.Color=RGB(255,0,0)
10) Rândurile corespunzătoare domeniului "A2:C4"formataţi-le cu un font de culoare verde.
Range("A2:C4").EntireRow.Font.Color=RGB(0,255,0)
11) Coloanele 2 şi 3 din domeniul "B2:F20" formataţi-le cu o culoare albastră pentru fundal.
Range("B2:F20").Columns("B:C").Interior.Color=RGB(0,0,255)
12) Rândurile 4 şi 5 din domeniul "B2:F20" formataţi-le cu o culoare galbenă pentru fundal.
Range("B2:F20").Rows("4:5").Interior.Color=RGB(255,255,0)
13) Regiunea curentă, în care se găseşte celula C3 va fi formatată cu o culoare roz.
Range("C3").CurrentRegion.Interior.Color=RGB(255,0,255)
14) În domeniul B3:F20 întroduceţi în subdomeniul format din rândurile 3- 4, coloanele 3-4
(relativ la domeniu iniţial), valoarea 222.
Range("B3:F20").Range("C3:D4").Value=222

Adresarea unui domeniu cu ajutorul proprietăţii Cells

Teodora Frunză 24/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

O altă modalitatea de a adresa celule este cea folosind proprietatea Cells a obiectelor Worksheet
sau Range. Rezultatul returnat de proprietatea Cells este un obiect de tip Range.
Sintaxa:
obiect.Cells(rowIndex, columnIndex)
obiect.Cells(cellIndex)
obiect.Cells
unde:
obiect – un obiect de tip Worksheet sau Range; dacă nu se specifică, va fi folosit obiectul
ActiveSheet
rowIndex – numărul rândului
colIndex – numărul coloanei
cellIndex – numărul celulei (prima celulă este A1, a doua celulă B1, etc)
Obs: dacă nu se precizează nici un argument pentru proprietatea Cells, instrucţiunea va returna
toate celulele de pe foaie.
Exemple:
1) Introduceţi în celula D7 din foaia Sheet1, valoarea 2:
Worksheets(“Sheet1”).Cells(7,4) = 2
2) Introduceţi în celula G1 din foaia Sheet1, valoarea 19:
Worksheets(“Sheet1”).Cells(7) = 19
sau
Worksheets(“Sheet1”).Cells(1,7) = 19
3) Introduceţi în celula cu numărul 16385 (celula A2) din foaia Sheet1, valoarea 1000:
Worksheets("Sheet1").Cells(16385) = 1000
4) Formataţi celulele de pe foaia Sheet1 cu un font de dimensiune 14:
Worksheets("Sheet1").Cells.Font.Size = 14
5) Goliţi de conţinut toate celulele de pe foaia activă:
ActiveSheet.Cells.ClearContents
6) Introduceţi în celula activă valoarea 5:
ActiveCell = 5
sau
ActiveCell.Cells(1,1) = 5
Obs: Când folosim proprietatea Cells a celulei active, aceasta este considerată ca fiind în
colţul stânga sus a domeniului folosit, poziţia (1,1) desemnând celula activă.
7) Introduceţi în celula din dreapta celulei active valoarea 20:
ActiveCell.Cells(1,2) = 20
8) Introduceţi în celula din dreapta şi un rând mai jos faţă de celula activă valoarea 8:
ActiveCell.Cells(2,2) = 8
9) Introduceţi în celula cu numărul 7 din domeniul A1:C6 valoarea 90:
Range("A1:C6").Cells(7) = 90
Obs: pozitia 7 în domeniul A1:C6, format din 3 coloane şi 6 rânduri este dat de celula A3.
10) Introduceţi în celula cu numărul 20 din domeniul A1:C6 valoarea 100:
Range("A1:C6").Cells(20) = 100
Obs: pozitia 20 în domeniul A1:C6, format 3 coloane x 6 rânduri = 18 celule, se găseşte
în afara domeniului, dar Excel va număra în continuare câte 3 coloane pe rând, astfel
încât poziţia 20 ajunge în celula B7.

Adresarea unui domeniu cu ajutorul proprietăţii Offset

Proprietatea Offset a obiectului Range returnează un obiect de tip Range. Spre deosebire de
celelalte două variante de adresare, această proprietate este doar a obiectului Range.
Proprietatea Offset are două argumente care corespund poziţiei relative faţă de colţul stânga sus
a obiectului de tip Range.

Teodora Frunză 25/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Sintaxa:
obiect.Offset(rowOffset, columnOffset)
unde:
obiect – un obiect de tip Range
rowOffset – numărul rândului, relativ la colţul stânga sus a obiectului Range
colOffset – numărul coloanei, relativ la colţul stânga sus a obiectului Range

Exemple:
1) Introduceţi în celula activă valoarea 10:
ActiveCell.Value = 10
sau
ActiveCell.Offset(0,0) = 10
Obs: poziţia (0,0) corespunde celulei active, sau colţului din stânga sus a unui domeniu
format dn mai multe rânduri sau coloane.
2) Introduceţi în celula de deasupra şi din stânga celulei active valoarea 1:
ActiveCell.Offset(-1,-1)= 1
Obs: poziţia (-1,-1) corespunde celulei aflată un rând deasupra şi o coloană mai în stânga
celulei active, dar, dacă celula activă se află pe primul rând, sau pe prima coloană a foii de
calcul, o astfel de adresare va genera o eroare, deoarece Excel nu se poate deplasa în
rânduri sau coloane inexistente.
3) Translataţi cu 1 coloană şi două rânduri domeniul A2:D8 şi introduceţi valoarea 50:
Range("A2:D8").Offset(2,1) = 50

Adresarea unui domeniu cu ajutorul proprietăţilor Rows şi Columns

Proprietăţile Rows şi Columns a obiectelor de tip Worksheet sau Range returnează un obiect de
tip Range.
Sintaxa:
obiect.Rows(rowIndex)
obiect.Columns(columnIndex)
unde:
obiect – un obiect de tip Worksheet sau Range; dacă nu se specifică, va fi folosit obiectul
ActiveSheet
rowIndex – numărul rândului
colIndex – numele coloanei

Exemple:
1) Stabiliţi ca rândul al 3-lea să aibă dimensiunea fontului de 14:
Rows(3).Font.Size = 14
2) Ştergeţi rândul 5:
Rows(5).Delete
3) Formataţi coloana C astfel încât să aibă dimensiunea fontului de 10:
Columns("C").Font.Size = 10
4) Ştergeţi coloana E:
Columns("E").Delete

2.5 Formule
Mai toate formulele conţin adrese de celule. Referinţa la aceste celule poate fi făcută utilizând
adrese relative (ex. A1), absolute ($A$1), mixte – rând absolut (A$1), coloană absolută ($A1).

Teodora Frunză 26/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Notaţia R1C1

În mod obişnuit, Excel-ul foloseşte notaţia A1, adică fiecare celulă e identificată cu ajutorul literei
corespunzătoare coloanei şi a numărului corespunzător rândului. Pe lângă această notaţie, Excel
foloseşte şi notaţia R1C1, unde R – rândul şi C – coloana. Astfel, R1C1 înseamnă $A$1, R2C1 e
totuna cu $A$2, iar R3C7 este $G$3.
Puteţi modifica modul de afişare, astfel încât să se folosească notaţia R1C1 din butonul Excel /
Excel Options / Formulas şi bifaţi opţiunea R1C1 reference style. Veţi observa numerotarea cu
numere a coloanelor, precum şi modificarea în noua notaţie a adreselor celulelor.
Acest mod de adresare a celulelor este deosebit de util pentru adrese absolute. În cazul folosirii
adreselor relative, se folosesc paranteze pentru a preciza numărul de rânduri sau coloane relativ la
poziţia actuală. Astfel, R[-1]C[2] înseamnă celula aflată deasupra cu un rând (observaţi -1 după R)
şi două coloane mai în dreapta (observaţi numărul 2 de după C).
Obs: Atunci când nu se precizează nici un număr după R sau C, înseamnă că nu se modifică
rândul sau coloana.
De exemplu, dacă sunteţi în C2 (R2C3), următoarele formule au acelaşi efect:
Notaţia A1(standard) Notaţia R1C1
=A1+1 =R[-1]C[-2]+1
=C1+1 =R[-1]C+1
=B2+1 =RC[-1]+1
=$A$1+1 =R1C1+1
=$A1+1 =R[-1]C1+1
=A$1+1 =R1C[-2]+1
=SUM(A1:A10) =SUM(R[-1]C[-2]: R[8]C[-2])
=SUM($A$1: $A$10) =SUM(R1C1:R10C1)

Folosirea notaţiei R1C1 în formule din VBA

Obiectul Range are proprietatea FormulaR1C1 ce se utilizează în calcule ce folosesc notaţia


R1C1.
Sintaxa:
obiect.FormulaR1C1
unde:
obiect – un obiect de tip Range
Proprietatea FormulaR1C1 stabileşte sau returnează formula utilizând notaţia R1C1.

Exemplu: În tabelul următor, folosiţi formule în notaţia R1C1 pentru a calcula Valoare, Valoare
TVA, Valoare cu TVA şi Totalul pentru valoare, valoare TVA şi valoare cu TVA.

Secvenţa de comenzi este următoarea:


a) Calcul Valoare
Range("D4:D6").FormulaR1C1="=RC[-2]*RC[-1]"
b) Calcul Valoare TVA
Range("E4:E6").FormulaR1C1="=RC[-1]*R3C5"

Teodora Frunză 27/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

c) Calcul Valoare cu TVA


Range("F4:F6").FormulaR1C1="=RC[-2]+RC[-1]"
d) Calcul Total pentru Valoare, Valoare TVA şi Valoare cu TVA
Range("D7:F7").FormulaR1C1="=R[-3]C+R[-2]C+R[-1]C"
sau
Range("D7:F7").FormulaR1C1="=sum(R[-3]C:R[-1]C)"

Teodora Frunză 28/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

3. Instrucţiuni VBA

3.1 Variabile şi constante. Tipuri de date


Deseori în programe este necesară memorarea diverselor valori folosite în efectuarea calculelor.
Limbajul VBA foloseşte variabile şi constante pentru stocarea temporară a valorilor folosite în
timpul execuţiei programelor.

Variabila  un loc în memoria RAM rezervat pentru memorarea unei valori. Orice variabilă are
un nume (prin care se face referire la valoarea pe care o conţine variabila) şi un tip de dată (care
determină felul datei pe care variabila o poate stoca).

Obs. Valoarea memorată într-o variabilă poate fi modificată pe parcursul execuţiei programului.
Reguli (în folosirea variabilelor)
 să înceapă cu o literă
 să nu conţină . sau caractere speciale
 să fie unice
 să nu se folosească cuvinte rezervate

Constantele  sunt valori care nu se modifică în timpul execuţiei programului.

Tipuri de date

Variabilele şi constantele se caracterizează prin nume şi tip. Tipul identifica felul datelor care pot
fi memorate şi dimesiunea acestora (nr. de biţi).

Tip Domeniu
Byte 0 şi 255
Boolean True sau False
Integer între -32.768 şi 37.767
Long între -2.147.483.648 şi 2.147.483.647
între -3.402823E38 şi –1.401298E-45 (pentru valori negative); între
Single
1.401298E-45 şi 3.402823E38 (pentru valori pozitive)
între -1,79769313486232E308 şi -4,94065645841247E-324 (negative
Double val pentru valori negative); între 4,94065645841247E-324 şi
1,79769313486232E308 (pentru valori pozitive)
Currency între -922.337.203.685.477,5808 şi 922.337.203.685.477,5807
+/–79.228.162.514.264.337.593.543.950.335 fără zecimale;
Decimal +/–7.9228162514264337593543950335 cu 28 de zecimale după
virgulă
Date Între 1.Ian. 100 şi 31.Dec. 9999
Object Orice referinţă la un obiect
String Între 0 şi 2 miliarde de caractere.
(lungime variabilă)
String Între 0 şi 65.400 caractere
(lungime fixă)
Variant Orice valoare numerică din domeniul Double. Poate avea valori
(pentru numere) speciale, pecum Empty, Error, Nothing sau Null
Variant Între 0 şi 2 miliarde de caractere.
(pentru numere)

Teodora Frunză 29/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Declararea variabilelor

Declararea unei variabile se poate face explicit prin folosirea instrucţiunii Dim.
Sintaxa:
Dim nume_variabila as TipDată
Exemple:
Dim dobanda As Double
Dim FinalProiect as Boolean
Dim DataInceput As Date
Dim varsta as Byte
Dim cantitate as Integer
Dim numprod As String
Dim nume As String * 30
Obs: variabila nume e declarată ca un şir de 30 de caractere (lungime fixă), iar variabila numprod
e declarată ca un şir de caractere variabil.

Obs. Declararea unei variabile se poate face şi implicit prin utilizarea variabilei în program.
Totuşi, acest mod nu e recomandat, deoarece poate conduce uşor la erori sau confuzii în
program.

Pentru a forţa declararea tuturor variabilelor utilizate, scrieţi în prima instrucţiune a modulelor
VBA următoarea instrucţiune:
Option Explicit
Când e prezentă această instrucţiune, VBA va da un mesaj de eroare ce indică faptul că
variabilele nu sunt declarate.

Instrucţiunea de atribuire

Instrucţiunea de atribuire se foloseşte pentru a atribui unei variabile valoarea unei expresii. VBA
utilizează semnul egal (=) pentru atribuire. Exemple:
Sintaxa
variabila  expresie

Exemple: Pentru variabilele declarate mai sus, folosiţi următoarele instrucţiuni de atribuire.
dobanda = 0.12
FinalProiect = False
DataInceput = #5/21/2009#
varsta = 27
cantitate = 500
numprod = "Calculator"
nume = "Ion Popescu"

Declararea constantelor

O constantă se declară cu ajutorul sintagmei Const.


Sintaxa:
Const nume_constanta as TipData = valoare_constanta

Exemple:
Const DataStart As Date = #1/8/2009#
Const OraStart As Date= #12:00:00#
Const trimestre as Integer = 4

Teodora Frunză 30/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Const dobanda = .125, perioade= 12


Const titlu as String = "Budget"
Obs: În cazul celui de-al patrulea exemplu, declararea constantelor dobanda şi perioada s-a făcut
fără precizarea tipului de dată. VBA va determina tipul de dată din valoarea constantei.

Variabile de tip obiect

O variabilă de tip obiect se foloseşte pentru declararea şi utilizarea obiectelor de tip Range,
Worksheet etc. Aceste variabile se declară cu Dim, iar atribuirea se face cu ajutorul sintagmei
Set.

Exemplu:
Dim domeniu As Range
Set domeniu = Range("A1:C5")

Tablouri (Array-uri)

Un tablou este un grup de elemente de acelaşi tip şi cu acelaşi nume. Pentru a vă referi la un
anumit element din tablou, se foloseşte numele tabloului şi indicele acestuia.
Sintaxa:

Exemplu: Declaraţi un tablou cu numele luni de 12 şiruri de caractere şi reţineţi numele lunilor în
acesta.
Dim luni (1 To 12) as String
luni(1) = ”ianuarie”
luni(2) = ”februarie”
luni(3) = ”martie”
luni(4) = ”aprilie”
luni(5) = ”mai”
luni(6) = ”iunie”
luni(7) = ”iulie”
luni(8) = ”august”
luni(9) = ”septembrie”
luni(10) = ”octombrie”
luni(11) = ”noiembrie”
luni(12) = ”decembrie”

3.2 Funcţii cu interfaţa cu utilizatorul


Prelucrarea informaţiilor (date de intrare) de la utilizator şi afişarea rezultatelor (date de ieşire)
sunt operaţii care apar frecvent în programe. In VBA aceste operaţii se pot face cu ajutorul unor
funcţii speciale încorporate InputBox(), MsgBox() şi instrucţiunea MsgBox.

a) Funcţia InputBox
Permite introducerea de la tastatura a unor date izolate, prin intermediul unei casete de dialog.
Informaţia introdusă în caseta de dialog este memorată în variabila specificată în stânga semnului
egal.

Sintaxa:
variabila  InputBox(Prompt, Titlu)

Dacă se apasă OK, funcţia returnează valoarea tastată în caseta de dialog.

Teodora Frunză 31/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Exemplu. Să se introducă numele unei persoane de la tastatură folosind funcţia InputBox.


Dim nume As String
nume = InputBox("Introduceti" & Chr(13) & "numele persoanei", "Introducere date")

b) Instrucţiunea MsgBox
Permite afişarea unui mesaj, într-o casetă de dialog, utilizatorul putând alege un buton din cele
afişate.

Sintaxa:
MsgBox prompt, [Butoane ], [ Titlu ]
unde:
prompt - textul afişat în casetă
butoane - suma valorilor care specifică numărul şi tipul butoanelor afişate, şi tipul icoanei.
titlu - titlul casetei
Tabel cu valorile butoanelor
Constante Valoare Elemente afişate, acţiune
VbOkOnly 0 Buton OK
VbOkCancel 1 Butoane OK şi Cancel
VbAbortRetryIgnore 2 Butoane Abort, Retry, Ignore
VbYesNoCancel 3 Butoane Yes, No, Cancel
VbYesNo 4 Butoane Yes, No
VbRetryCancel 5 Butoane Retry, Cancel
VbCritical 16 Icoana X
VbQuestion 32 Icoana ?
VbExclamation 48 Icoana !
VbInformation 64 Icoana I
VbDefaultButton1 0 Primul buton este selectat implicit
VbDefaultButton2 256 Al doilea buton este selectat implicit
VbDefaultButton3 512 Al treilea buton este selectat implicit
VbDefaultButton4 768 Al patrulea buton este selectat implicit

Exemplu. Să se afişeze anul calendaristic cu ajutorul instrucţiunii MsgBox. Data curentă se obţine
din data sistemului.

MsgBox "Anul curent " & Year(Now)

Teodora Frunză 32/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Obs:
- Funcţia NOW reprezintă data şi ora curentă
- Funcţia YEAR extrage anul dintr-o dată
- & permite concatenarea unor şiruri

c) Funcţia MsgBox()

Permite în plus şi returnarea unei valori întregi a unei variabile, valoare care depinde de tipul
butonului selectat de utilizator.

Sintaxa
Rasp = MsgBox (Prompt, [Butoane ], [ Titlu ])

Diferenţa – parametrii se scriu între paranteze, iar răspunsul furnizat de butonul ales este implicat
într-o structură alternativă.

Valorile returnate de funcţia MsgBox


Constante Valoare Descriere
VbOk 1 S-a ales Ok
VbCancel 2 S-a ales Cancel
VbAbort 3 S-a ales Abort
VbRetry 4 S-a ales Retry
VbIgnore 5 S-a ales Ignore
VbYes 6 S-a ales Yes
VbNo 7 S-a ales No

EXEMPLU. Să se afişeze o casetă de dialog care sa permită alegerea but. OK sau Cancel. Dacă
s-a apăsat OK se afişează o casetă se dialog care afişează alegerea făcută.

Dim raspuns As Integer


raspuns = MsgBox("Apasati un buton", vbOKCancel)
MsgBox raspuns

Dacă aţi apăsat Ok, rezultatul este:

Teodora Frunză 33/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

3.3 Utilizarea funcţiilor VBA


În VBA există un număr mare de funcţii implementate, care pot fi folosite în cod. În continuare
vor fi tratate cele mai importante funcţii, tabelul complet al acestora fiind în anexa Funcţii VBA.
Apelul acestor funcţii se face cu sintaxa:
vba.nume_functie
sau, direct,
nume_functie
obiectul vba fiind implicit.

Funcţii de dată

Funcţiile Date, Time şi Now - returnează data curentă a sistemului, ora curentă a sistemului şi
respectiv data şi ora curentă a sistemului.
Sintaxa:
vba.Date
vba.Time
vba.Now
Exemplu: Introduceţi în celula A1 data curentă, iar în B1 data şi ora curentă, iar în C1 ora
curentă:
Range(“A1”).Value = vba.Date
Range(“B1”).Value = vba.Now
Range(“C1”).Value = vba.Time

Funcţiile DateSerial şi TimeSerial - returnează data pentru anul, luna şi ziua specificate şi
respectiv ora pentru ora, minutele şi secundele precizate.
Sintaxa:
vba.DateSerial(year, month, day)
vba.TimeSerial(hour, minute, second)
unde:
year – anul, exprimat ca număr întreg
month – luna, exprimată ca număr întreg
day – ziua, exprimată ca număr întreg
hour – ora, exprimat ca număr întreg
minute – minutele, exprimate ca număr întreg
second – secundele, exprimate ca număr întreg

Exemplu: Introduceţi în celula A1 data de 20.05.2009, iar în B1 ora 16:40:18:


Range(“A1”) = vba.DateSerial(2009, 5, 20)
Range(“B1”) = vba.TimeSerial(16, 40, 18)

Funcţiile DateValue şi TimeValue – convertesc un şir de caractere în dată, respectiv oră.


Sintaxa:
vba.DateValue(string)
vba.TimeValue(string)
unde:

Teodora Frunză 34/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

string – şir de caractere ce reprezintă o dată calendaristică

Exemplu: Introduceţi în celula A1 data de 20.05.2009, iar în B1 ora 12:35:


Range(“A1”) = vba.DateValue("01/06/2009")
Range(“B1”) = vba.TimeValue("12:35")

Funcţiile Day, Month, Year – returnează ziua, luna sau anul din data precizată.
Sintaxa:
vba.Day(data)
vba.Month(data)
vba.Year(data)
unde:
data – data calendaristică, exprimată ca număr, obiect de tip Date sau şir de caractere
Exemplu: Introduceţi în celulele A1, B1, C1 introduceţi ziua, luna şi anul pentru data de
25.08.2003:
Range(“A1”) = vba.Day("25/08/2003")
Range(“B1”) = vba.Month("25/08/2003")
Range(“C1”) = vba.Year("25/08/2003")

Funcţii de text

Funcţiile UCase şi LCase – returnează textul dintre paranteze în majuscule şi respectiv


minuscule.
Sintaxa:
vba.UCase(string)
vba.Month(string)
unde:
string – şir de caractere
Exemplu: În celula B6 e scris textul IOnEscu. Transformaţi textul în majuscule. Scrieţi în celula
C6 textul cu minuscule
Range("B6") = vba.UCase(Range("B6"))
Range("C6") = vba.LCase(Range("B6"))

Funcţiile Left, Right şi Mid – returnează porţiuni dintr-un text. Left returnează caractere din
stânga şirului de caractere, Right returnează caractere din dreapta şirului, iar Mid din mijloc.
vba.Left(string, number)
vba.Right(string, number)
vba.Mid(string, start, lenght)
unde:
string – şir de caractere
number – număr de caractere extrase
start – numărul caracterului de unde începem extragerea
lenght – numărul de caractere extrase

Exemplu: În celula A1 e scris codul Mo101LCD. Din acest cod, în celula B1extrageţi primele 2
caractere, ce reprezintă tipul produsului, în C1 – ultimele 3 caractere ce reprezintă subtipul
produsului, iar în D1 numărul ce reprezintă lotul din care face parte produsul.
Range("B1")= vba.Left(Range("A1"), 2)
Range("C1")= vba.Right(Range("A1"), 3)
Range("D1")= vba.Mid(Range("A1"), 3,3)

Funcţia Str – converteşte un număr în text .


Sintaxa:

Teodora Frunză 35/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

vba.Str(number)
unde:
number – numărul ce trebuie convertit

Exemplu: vba.Str (123) returnează textul 123.

Funcţia Val – converteşte un text în număr.


Sintaxa:
vba.Val(string)
unde:
string – şir de caractere ce reprezintă un număr

Exemplu: vba.Val("123") returnează numărul 123.

Funcţia Format – returnează Variant(String) ce conţine expresia formatată corespunzător


Sintaxa:
Format(expresie [, format [, prima_zi_din_saptamana[, prima_sapt_din_an]]])
unde:
expresie – orice expresie validă
format – formatul ce trebuie aplicat (argument opţional)
prima_zi_din_saptamana – o constantă ce specifică prima zi din săptămână; variantele
disponibile sunt în tabelul de mai jos (argument opţional)
prima_sapt_din_an – o constantă ce precizează care se consideră prima zi din săptămână;
variantele disponibile sunt în tabelul de mai jos (argument opţional)

Argumentul prima_zi_din_saptamana poate avea următoarele valori:


Constanta Valoare Descriere
vbUseSystem 0 Foloseşte setările sistemului
VbSunday 1 Duminica (implicit)
vbMonday 2 Luni
vbTuesday 3 Marţi
vbWednesday 4 Miercuri
vbThursday 5 Joi
vbFriday 6 Vineri
vbSaturday 7 Sâmbătă

Argumentul prima_sapt_din_an poate avea următoarele valori:


Constanta Valoare Descriere
vbUseSystem 0 Foloseşte setările sistemului
vbFirstJan1 1 Prima saptămână e considerată cea în care e 1 Ianuarie (valoare
implicită)
vbFirstFourDays 2 Prima saptămână e considerată cea în care sunt cel puţin patru zile
din noul an.
vbFirstFullWeek 3 Prima saptămână e considerată cea în care toate zilele sunt din noul
an.

Observaţii:
- Pentru a formata numere folosiţi formate numerice predefinite, sau creaţi propriile
formate.
- Pentru a formata data calendaristică sau ora, folosiţi formate de dată/oră predefinite, sau
creaţi propriile formate

Teodora Frunză 36/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

- Pentru a formata data calendaristică sau ora disponibile ca număr serial, folosiţi formate
de dată/oră predefinite, sau formate numerice
- Pentru a formata texte, creaţi propriile formate

Formate predefinite pentru dată/oră:


Nume format Descriere
General Date Afişează data şi / sau ora. De ex. 12/04/2009 13:17:54
Long Date Afişează data în formatul lung corespunzător setărilor sistemului. De ex. 13 iunie 2009
Medium Date Afişează data folosind varianta mijlocie, funcţie de limba stabilită pentru sistem. De ex.
13-iun-2009
Short Date Afişează data în formatul scurt corespunzător setărilor sistemului. 15/04/2009
Long Time Afişează ora în formatul lung corespunzător setărilor sistemului. De ex. 14:20:17
Medium Time Afişează ora în formatul mediu de 12 ore (ore şi minute) şi indicatorul AM/PM
corespunzător. De ex. 11:57 PM.
Short Time Afişează ora folosind formatul de 24 ore (ore şi minute). De ex. 14:30.

Formate numerice predefinite:


Nume format Descriere
General Number Afişează numărul fără separator de mii.
Currency Afişează numărul cu separator de mii, dacă e cazul. Afişează două zecimale după
virgulă. Afişează simbolul monetar funcţie de setările locale ale sistemului
Fixed Afişează cel puţin o cifră în stânga virgulei şi două zecimale .
Standard Afişează numărul cu separator de mii, cel puţin o cifră înaintea virgulei şi două
zecimale.
Percent Înmulţeşte numărul cu 100 şi afişează semnul % în dreapta. Afişează două zecimale.
Scientific Utilizează notaţiile ştiinţifice.
Yes/No Afişează No dacă numărul e 0 şi Yes în caz contrar.
True/False Afişează False dacă numărul e 0 şi True în caz contrar.
On/Off Afişează Off dacă numărul e 0 şi On în caz contrar.

În tabelele următoare aveţi la dispoziţie codurile de fotmat pentru a vă crea propriile formatări:
- Date calendaristice: d – codul pentru ziua, m –codul pentru lună, y – codul pentru an
Pentru a afişa Utilizaţi acest cod
Luni sub forma 1–12 m
Luni sub forma 01–12 mm
Luni sub forma Ian–Dec mmm
Luni sub forma Ianuarie–Decembrie mmmm
Luni sub forma primei litere a lunii mmmmm
Zile sub forma 1–31 d
Zile sub forma 01–31 dd
Zile sub forma D–S ddd
Zile sub forma Duminică–Sâmbătă dddd
Ani sub forma 00–99 yy
Ani sub forma 1900–9999 Yyyy
Trimestrul sub forma unui număr între 1 şi 4 q

- Timp: h – codul pentru oră, m –codul pentru minut, s – codul pentru secundă
Pentru a afişa Utilizaţi acest cod

Teodora Frunză 37/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Ore sub forma 0–23 H


Ore sub forma 00–23 hh
Minute sub forma 0–59 m
Minute sub forma 00–59 mm
Secunde sub forma 0–59 s
Secunde sub forma 00–59 ss
- Numere : Pentru a stabili formatul numerelor cu zecimale, includeți într-o secțiune următoarele
argumente formale pentru cifre. Dacă un număr are mai multe cifre la dreapta separatorului
zecimal decât argumente formale în formatul respectiv, numărul se rotunjește la atâtea zecimale
câte argumente formale există. Dacă există mai multe cifre la stânga separatorului zecimal decât
există argumente formale, se afișează cifrele suplimentare. Dacă formatul conține numai semne
de număr (#) la stânga separatorului zecimal, numerele mai mici decât unu încep cu un separator
zecimal.
o # afişează numai cifrele semnificative şi nu afişează zerouri nesemnificative.
o 0 (zero) afişează zerourile nesemnificative, dacă un număr are mai puţine cifre decât
numărul de zerouri existente în format.
o ? adaugă spaţii pentru zerouri nesemnificative în oricare parte a separatorului zecimal,
astfel încât separatorul zecimal să se alinieze.
o % determină înmulţirea numărului cu 100 şi afişarea simbolului %
o Pentru a afișa atât textul cât și numerele într-o celulă, încadrați caracterele textului în
ghilimele (" "). Includeți caracterele într-o secțiune corespunzătoare de coduri format.
De exemplu, tastați formatul 0,00 LEI" Surplus";0,00 LEI" Lipsă" pentru a afișa o sumă
pozitivă ca „25,74 LEI Surplus” și o sumă negativă ca „125,74 LEI Lipsă”.

Pentru a afişa Utilizaţi acest cod


1234,59 sub forma 1234,6 ####,#
8,9 sub forma 8,900 #,000
0,631 sub forma 0,6 0,#
44,398, 102,65 şi 2,8 cu zecimale aliniate ???,???
12000 sub forma 12.000 #.###

- Texte :
o > formatează textul cu majuscule
o < formatează textul cu minuscule

Exemple:
1) Afişaţi data şi ora curentă cu următoarele formate:
Range("A1") = vba.Format(Date,"Long Date", vbMonday)
Range("A2") = vba.Format(Date,"Short Date")
Range("A3") = vba.Format(Time,"Medium Time")
Range("A4") = vba.Format(Time,"Short Time")
Range("A5") = vba.Format(Date,"dddd, mmm d yyyy")
Range("A6") = vba.Format(Time,"h:m")
Range("A7") = "Trim " & vba.Format(Date,"q, mmm-yy")
Range("B1") = vba.Format(12345.678,"standard")
Range("B2") = vba.Format(12345.678,"fixed")
Range("B3") = vba.Format(12345.678,"currency")
Range("B3") = vba.Format(0.234,"percent")
Range("B4") = vba.Format(12345.678," #.###")

Teodora Frunză 38/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Range("C1") = vba.Format("Gigel"," >")


Range("C2") = vba.Format("Gigel"," <")

Funcţii pentru culori

Funcţia RGB returnează un număr ce reprezintă codul de culoare determinat prin combinaţia de
culori între roşu, verde şi albastru.
Sintaxa:
vba.RGB(roşu, verde, albastru)
unde:
roşu – un număr între 0 şi 255 ce reprezintă componenta roşie din culoare
verde – un număr între 0 şi 255 ce reprezintă componenta verde din culoare
albastru – un număr între 0 şi 255 ce reprezintă componenta albastră din culoare

Obs. In tabelul următor sunt câteva combinaţii standard de culori:


Culoare Roşu Verde Albastru
Negru 0 0 0
Albastru 0 0 255
Verde 0 255 0
Azuriu 0 255 255
Roşu 255 0 0
Purpuriu 255 0 255
Galben 255 255 0
Alb 255 255 255
Maro 153 51 0
Indigo 51 51 153
Gri 80% 51 51 51

Exemplu: Stabiliţi ca fundal pentru domeniul A1:C2 culoarea purpuriu.


Range("A1:C2").Interior.Color=RGB (255,0,255)

Utilizarea funcţiilor din foile de calcul Excel

În VBA avem posibilitatea de a apela la funcţiile disponibile în foile de lucru Excel cu ajutorul
proprietăţii WorksheetFunction a obiectului Application.
Sintaxa:
Application.WorksheetFunction.nume_functieExcel

Exemplu: În celulele B10, B11 şi B12 trebuie să introducem suma, media şi respectiv numărul de
celule ce conţin date numerice din domeniul B1:B9.
Range(“B10”)= Application.WorksheetFunction.Sum(Range("B1:B9"))
Range(“B11”)= Application.WorksheetFunction.Average(Range("B1:B9"))
Range(“B12”)= Application.WorksheetFunction.Count(Range("B1:B9"))

3.4 Instrucţiuni VBA


Instrucţiunea WITH

Dacă se doreşte setarea mai multor proprietăţi care se referă la acelaşi obiect, pentru a uşura
accesul la proprietăţile acestuia, se utilizează instrucţiunea WITH cu următoarea sintaxă:

WITH nume_obiect

Teodora Frunză 39/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

...
END WITH

Exemplu. Să se formateze domeniul A3:C10 astfel încât tipul literelor să fie Times New Roman,
îngroşat, cu dimensiunea de 14, culoare roşie.

Sub TestWith()
With Range("A3:C10").Font
.Name = "Times New Roman"
.FontStyle = "Bold"
.Size = 14
.Color=RGB(255,0,0)
End With
End Sub

Structuri de control ale execuţiei programului


a) Structuri de decizie

Procedurile Visual Basic pot testa condiţii şi funcţie de rezultatele testului, să efectueze operaţii
diferite.

Instrucţiunea IF

Instrucţiunea If verifică o condiţie şi determină executarea anumitor instrucţiuni, dacă acesta e


adevărată, iar dacă e falsă, se vor executa alte instrucţiuni.
Sintaxa instrucţiunilor If imbricate, ce testează mai multe condiţii este:
IF condiţie1 THEN
[ bloc_instrucţiuni_1]
[ ELSEIF condiţie2 THEN
[ bloc_instrucţiuni_2] ]
...
[ ELSE
[ bloc_instrucţiuni_n] ]
END IF

În acest caz, instrucţiunea se derulează astfel: se testează condiţie1, iar dacă e falsă VBA testează
condiţie2, ş.a.m.d. până când găseşte o condiţie adevărată. In acest moment execută blocul de
instrucţiuni corespunzător şi continuă execuţia programului cu prima instrucţiune după End If.
Instrucţiunea de după clauza Else se execută dacă niciuna din condiţii nu e adevărată.

Exemplu1:Folosiţi funcţia Time pentru a afişa un mesaj de salut, funcţie de ora din zi.
Sub Salut1()
If Time < 0.5 Then MsgBox "Buna dimineata"
End Sub

Teodora Frunză 40/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

sau
Sub Salut1a()
If Time < 0.5 Then
MsgBox " Buna dimineata"
End If
End Sub

Sub Salut2()
If Time < 0.5 Then MsgBox " Buna dimineata "
If Time >= 0.5 Then MsgBox "Buna ziua"
End Sub

Sub Salut3()
If Time < 0.5 Then MsgBox " Buna dimineata "
If Time >= 0.5 And Time < 0.75 Then MsgBox " Buna ziua "
If Time >= 0.75 Then MsgBox " Buna seara "
End Sub

Exemplu2:Verificare apăsare buton Ok sau Cancel în fereastra MsgBox.


Sub Ex_MsgBox()
Dim raspuns As Integer
raspuns = MsgBox("Apasati un buton", vbOKCancel)
If raspuns = 1 Then
MsgBox "S-a apasat OK"
Else
MsgBox "S-a apasat Cancel"
End If
End Sub

Exemplu3:Verificati introducerea pretului la materiale in foaia Preturi, cu ajutorul unei proceduri.


Sub IntroducerePreturi()
Dim pret_min, pret_max, rasp As Integer
pret_min = 10
pret_max = 20
rasp = InputBox("Introduceti pretul materialelor", "Caramida")
If rasp < pret_min Or rasp > pret_max Then
MsgBox ("Ati introdus un pret eronat!")
Else
Worksheets("Preturi").Range("B2").Value = rasp
End If
End Sub

Exemplu4. Să se creeze o subrutină care să permită introducerea de la tastatură a cantităţii şi


preţurilor depinzând de ziua din săptămână. Datele vor fi salvate într-un tabel din foaia de calcul
cu numele „Magazin”. De la tastatură se introduce ziua apoi se introduce cantitatea şi preţul
pentru ziua respectivă.

Teodora Frunză 41/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Sub Exemplu_If()
Dim ziua As String, cant, pret As Variant, I As Integer
ziua = InputBox("Introduceti ziua saptamanii", "Ziua")
If UCase$(ziua) = "LUNI" Then
I=4
ElseIf UCase$(ziua) = "MARTI" Then
I=5
ElseIf UCase$(ziua) = "MIERCURI" Then
I=6
ElseIf UCase$(ziua) = "JOI" Then
I=7
Else
I=8
End If
cant = InputBox("Cantitatea", "Introducere date")
pret = InputBox("Pretul", "Introducere date")
With Sheets("Magazin")
.Cells(I, 2).Value = cant
.Cells(I, 3).Value = pret
End With
End Sub

Exemplu5. Să se creeze o subrutină care să afişeze discount-ul funcţie de cantitatea introdusă.


Limitele de discount sunt următoarele:
Cantitate Discount
< 25 0.1
25-50 0.15
50-75 0.2
>75 0.25

Sub Discount()
Dim cantitate As Variant
Dim discount As Double
cantitate = InputBox("Introduceti cantitatea: ")
If cantitate = "" Then Exit Sub
If cantitate >= 0 And cantitate < 25 Then
discount = 0.1
ElseIf cantitate < 50 Then
discount = 0.15
ElseIf cantitate < 75 Then
discount = 0.2
Else
discount = 0.25
End If
Teodora Frunză 42/105
CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

MsgBox "Discount: " & discount


End Sub

Instrucţiunea SELECT

Este o alternativă a structurii If şi se utilizează atunci când se execută diferite blocuri de


instrucţiuni ce verifică de valoarea unei singure expresii.
Sintaxa:
Select Case expresie
Case lista_expresii_1
bloc_instr1
[ Case lista_expresii_2
[ bloc_instr_2] ]

[ Case Else
[ bloc_instr_n] ]
End Select

Exemplu1. Să se utilizeze instrucţiunea Select pentru exemplul cu zilele din săptamână, cantitate,
preţ.
Sub Exemplu_Case()
Dim ziua As String, I As Integer, cant, pret As Variant
ziua = InputBox("Introduceti ziua saptamanii", "Ziua")
Select Case UCase$(ziua)
Case "LUNI": I = 4
Case "MARTI": I = 5
Case "MIERCURI": I = 6
Case "JOI": I=7
Case Else: I=8
End Select
cant = InputBox("Cantitatea", "Introducere date")
pret = InputBox("Pretul", "Introducere date")
With Sheets("Magazin")
.Cells(I, 2).Value = cant
.Cells(I, 3).Value = pret
End With
End Sub

Exemplu2. Să se utilizeze instrucţiunea Select pentru exemplul cu discount-ul.

Sub Discount2()
Dim cantitate As Variant
Dim discount As Double
cantitate = InputBox("Introduceti cantitatea: ")
Select Case cantitate
Case ""
Exit Sub
Case 0 To 24
discount = 0.1
Case 25 To 49
discount = 0.15
Case 50 To 74
discount = 0.2

Teodora Frunză 43/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Case Is >= 75
discount = 0.25
End Select
MsgBox "Discount: " & discount
End Sub

b) Structuri repetitive

Instrucţiunea For Each

Instrucţiunea For Each este deosebit de utilă în parcurgerea colecţiilor de obiecte, în special
atunci când nu ştim câte obiecte conţine.
Sintaxa:
For Each element In colectie
instructiuni
[Exit For]
[instructiuni]
Next [element]

Exemplu1. Afişaţi cu ajutorul unei casete MsgBox numele foilor de calcul.


Sub AfisareNume()
Dim foaie as Worksheet
For Each foaie In ActiveWorkbook.Worksheets
MsgBox foaie.Name
Next foaie
End Sub

Exemplu2. Verificaţi dacă preturile din domeniul B4:B7 sunt in intervalul 30-50 lei. Cele care
sunt in acest interval afişaţi-le îngroşat, cu o culoare roşie pe fundal.

Sub Verificare()
Dim celula As Range
For Each celula In Range("B4:B7")
If celula.Value > 30 And celula.Value < 50 Then
celula.Font.FontStyle = "Bold"
celula.Interior.Color = RGB(255, 0, 0)
End If
Next celula
End Sub

Exemplu3. Protejaţi cu parola aaa toate celulele marcate din foile de calcul.

Sub protejare()
Dim mySheet As Worksheet
For Each mySheet In Worksheets
mySheet.Protect "aaa", True, True, True
Next mySheet
End Sub

Teodora Frunză 44/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Exemplu4. Eliminaţi protejarea cu parola aaa pentru toate celulele din foile de calcul.

Sub eliminare_protejare()
Dim mySheet As Worksheet
For Each mySheet In Worksheets
mySheet.Unprotect "aaa"
Next mySheet
End Sub

Instrucţiunea For

Instrucţiunea For se foloseşte atunci când dorim repetarea unor operaţii de un anumit număr de
ori.
Sintaxa:
For contor = start To sfarsit [Step pas]
[instructiuni]
[Exit For]
[instructiuni]
Next [contor]

Instrucţiunea for se execută astfel:


- Se iniţializează contor pe valoarea start;
- Se execută instrucţiunile (dacă se ajunge la instrucţiunea exit for se părăseşte forţat ciclul).
- Se trece la noua valoare a contorului folosind pasul (dacă este precizat) şi se reia execuţia
de la pasul anterior.

Exemplu1. Calculaţi suma numerelor între 1 şi 10 şi afişaţi-o.


Sub Suma1() Sub Suma2()
Dim suma As Double sau Dim suma As Double
Dim contor As Integer Dim contor As Integer
suma = 0 suma = 0
For contor = 1 To 10 For contor = 10 To 1 step -1
suma = suma + contor suma = suma + contor
Next contor Next contor
MsgBox suma MsgBox suma
End Sub End Sub

Exemplu2. Transformaţi exemplul anterior de protejare a foilor astfel încât să folosiţi funcţia for.

Sub Protejare2()
Dim foaie As Worksheet
Dim i As Integer
For i = 1 to Worksheets.Count
Set foaie = Worksheets(i)
foaie.Protect "aaa", True, True, True
Next i
End Sub

Exemplu3. Comparaţi domeniile denumite Nou şi Vechi şi afişaţi valorile diferite cu un font de
culoare roşie pe fundal galben.

Teodora Frunză 45/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Sub Comparare()
Dim i As Integer
Calculate
For i = 1 To Range("Nou").Cells.Count
If Range("Nou").Cells(i) <> Range("Vechi").Cells(i) Then
Range("Nou").Cells(i).Interior.Color = rgbYellow
Range ("Nou").Cells(i).Font.Color=rgbRed
End If
Next i
End Sub

Exemplu4. Ştergeţi rândurile 2,4,6,8 şi 10 din foaia curentă.


Sub StergeRanduri()
Dim rand As Long
For rand = 10 To 2 Step -2
Rows(rand).Delete
Next rand
End Sub

Inainte de ştergere, foaia arată astfel iar după ştergere, avem

Obs: Am folosit ştergerea rândurilor pornind de jos în sus, cu un pas negativ pentru for. Aceasta
este varianta corectă de ştergere a rândurilor. Încercaţi procedura de mai jos, unde parcurgerea
este de sus în jos şi observaţi diferenţa (de exemplu, când rândul 2 este şters, rândul 3 devine
noul rând 2, iar rândul 5 devine rândul 4, etc.)
Sub StergeRanduri2()
Dim rand As Long
For rand = 2 To 10 Step 2
Rows(rand).Delete
Next rand
End Sub

Inainte de ştergere, foaia arată astfel iar după ştergere, avem

Teodora Frunză 46/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Exemplu5. Păstraţi într-un tablou vânzările zilnice, iar în alt tablou zilele săptămânii. Afişaţi
începând din celula activă ziua din săptămână şi vândută.

Sub ExempluTablou()
Dim vanzari(1 To 5) As Currency
Dim n As Integer
Dim ziua(1 To 5) As String
vanzari(1) = 1100
vanzari(2) = 2100
vanzari(3) = 1400
vanzari(4) = 1500
vanzari(5) = 1250
ziua(1) = "luni"
ziua(2) = "marti"
ziua(3) = "miercuri"
ziua(4) = "joi"
ziua(5) = "vineri"
For n = 1 To 5
ActiveCell.Value = "Vanzari in " & "ziua de " & ziua(n) & " au fost de " &
vanzari(n) & " mii lei"
ActiveCell.Offset(1, 0).Activate
Next
End Sub

Exemplu6. Scrieţi informaţii 1000 de rânduri. Folosiţi proprietăţile ScreenUpdating şi StatusBar


ale obiectului Application, utile atunci când se procesează multe informaţii.

Sub scriere_date()
Application.ScreenUpdating = False
Dim n As Integer
For n = 1 To 1000
ActiveCell.Value = n
ActiveCell.Offset(1, 0).Activate
Application.StatusBar = "scrie randul " & n
Next
Application.StatusBar = ""
Application.ScreenUpdating = True
End Sub

Instrucţiunea DO WHILE

Instrucţiunea Do While se foloseşte atunci când dorim repetarea unor operaţii atât timp cât o
anumită condiţie e adevărată.

Teodora Frunză 47/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Sintaxa1 (condiţia e testată la începutul ciclării):


Do [While conditie]
[instructiuni]
[Exit Do]
[instructiuni]
Loop

Sintaxa2 (condiţia e testată la sfârşitul ciclării):


Do
[instructiuni]
[Exit Do]
[instructiuni]
Loop [While conditie]

Obs: Diferenţa între cele două sintaxe e dată de locul în care se testează condiţia.

Exemplu: Introduceţi toate zilele lunii curente începând din celula curentă şi continuând în jos,
pe coloană folosind Do While.
Sub IntroduceData1()
' Do While, cu test la început
Dim data As Date
' în variabila data pastram data curenta
data = DateSerial(Year(Date), Month(Date), 1)
Do While Month(data) = Month(Date)
ActiveCell = data
data = data + 1
ActiveCell.Offset(1, 0).Activate
Loop
End Sub
sau
Sub IntroduceData2()
' Do While, cu test la sfarsit
Dim data As Date
data = DateSerial(Year(Date), Month(Date), 1)
Do
ActiveCell = data
data= data + 1
ActiveCell.Offset(1, 0).Activate
Loop While Month(data) = Month(Date)
End Sub

Instrucţiunea DO UNTIL

Instrucţiunea Do Until se foloseşte atunci când dorim repetarea unor operaţii până când condiţia
devine falsă.
Sintaxa1 (condiţia e testată la începutul ciclării):
Do [Until conditie]
[instructiuni]
[Exit Do]
[instructiuni]
Loop

Teodora Frunză 48/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Sintaxa2 (condiţia e testată la sfârşitul ciclării):


Do
[instructiuni]
[Exit Do]
[instructiuni]
Loop [Until conditie]

Exemplu: Introduceţi toate zilele lunii curente începând din celula curentă şi continuând în jos,
pe coloană folosind Do Until.
Sub IntroduceData3()
' Do Until, cu test la început
Dim data As Date
data = DateSerial(Year(Date), Month(Date), 1)
Do Until Month(data) <> Month(Date)
ActiveCell = data
data = data + 1
ActiveCell.Offset(1, 0).Activate
Loop
End Sub

Sub IntroduceData4()
' Do Until, cu test la sfârşit
Dim data As Date
data = DateSerial(Year(Date), Month(Date), 1)
Do
ActiveCell = data
data = data + 1
ActiveCell.Offset(1, 0).Activate
Loop Until Month(data) <> Month(Date)
End Sub

Exemplu: Protejaţi celulele marcate din toate foile cu parola aaa.

Sub ProtejareFoi()
Dim foaie As Worksheet
Dim i As Integer
i=1
Do Until i > Worksheets.Count
Set foaie = Worksheets(i)
foaie.Protect "aaa", True, True, True
i=i+1
Loop
End Sub

3.5 Proceduri
O procedură este compusă dintr-o serie de instrucţiuni VBA şi se găseşte într-un modul VBA.
Un modul poate conţine oricâte proceduri.
O procedură poate avea argumente, folosite de instrucţiunile din componenţa acesteia.

Sintaxa:
Sub nume_procedura ([lista_argumente])

Teodora Frunză 49/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

[instrucţiuni] [Exit Sub]


[instrucţiuni]
End Sub
unde:
nume_procedura – numele procedurii
lista_argumente – lista de variabile, aflată între paranteze şi despărţite prin virgulă
instrucţiuni – instrucţiuni VBA
Exit Sub – instrucţiune care forţează terminarea imediată a procedurii şi ieşirea din ea
End Sub – sfârşitul procedurii

Sunt mai multe modalităţi de a apela o procedură: fie din editorul Visual Basic cu ajutorul
comenzii Run (sau F5), fie din fereastra de macro-uri a programului Excel, fie cu ajutorul unui
buton sau forme din foile de lucru Excel sau dintr-o altă procedură VBA.

Apelul unei proceduri din altă procedură

O procedură poate fi apelată din altă procedură în următoarele moduri:


- prin scrierea numelui procedurii şi a argumentelor sale, dacă acestea există.
- prin folosirea cuvântului Call urmat de numele procedurii şi argumente
- prin folosirea metodei Run a obiectului Application – variantă utilă în special atunci când
numele procedurii se află într-o variabilă (eventualele argumente ale procedurii se scriu ca
argumente ale metodei Run)

Exemplu 1: Apelaţi procedura AfisareInformatii din procedura Salutari.

Sub Salutari()
Dim informatia As String
informatia = "Salut"
'AfisareInformatii (informatia)
' sau
'Call AfisareInformatii(informatia)
' sau
Application.Run "AfisareInformatii", informatia
End Sub

Sub AfisareInformatii(mesaj)
Dim butoane as Integer
butoane = vbOKOnly + vbInformation
MsgBox Prompt:=mesaj, Buttons:=butoane
End Sub

Exemplu 2: Apelaţi procedura Weekend sau Zile_lucratoare funcţie de ziua din săptămână.

Sub principala()
Dim procedura As String
Select Case Weekday(Now)
Case 1, 7: procedura = "Weekend"
Case Else: procedura = "Zile_lucratoare"
End Select
Application.Run procedura
End Sub

Sub Weekend()

Teodora Frunză 50/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

MsgBox "E weekend"


End Sub

Sub Zile_lucratoare()
MsgBox "Azi e o zi lucratoare"
End Sub

Apelul prin valoare şi prin referinţă

Argumentele unei proceduri pot fi transmise în două moduri:


- prin referinţă – ceea ce înseamnă că procedura apelată primeşte originalul variabilei, iar
modificările făcute în procedura apelată se râsfrâng şi în procedura apelantă, variabila
fiind aceeaşi. (aceasta este varianta implicită)
- prin valoare – ceea ce înseamnă că procedura apelată primeşte o copie a variabilei
originale, iar modificările copiei nu afectează originalul; aşadar, în procedura apelantă,
variabila rămâne aceeaşi. Pentru a efectua apelul prin valoare precizaţi cuvântul cheie
ByVal înaintea argumentului din definiţia procedurii.

Exemplu 1: Efectuaţi apelul prin referinţă a funcţiei calculează şi afişaţi rezultatul.

Sub principal1()
Dim x As Integer
x = 10
Call calculeaza1(x)
MsgBox x
End Sub

Sub calculeaza1(a)
a = a * 10
End Sub

Exemplu 2: Efectuaţi apelul prin valoare a funcţiei calculează şi afişaţi rezultatul.

Sub principala2()
Dim x As Integer
x = 10
Call calculeaza2(x)
MsgBox x
End Sub

Sub calculeaza2(ByVal a)
a = a * 10
End Sub

3.6 Funcţii
O funcţie e similară unei proceduri în VBA, dar spre deosebire de procedură, funcţia returnează
o valoare. O funcţie este compusă dintr-o serie de instrucţiuni VBA, o instrucţiune obligatorie
fiind cea de asignare a unei valori numelui funcţiei. O funcţie, la fel ca şi o procedură poate avea
argumente, apelate prin valoare sau referinţă. Spre deosebire de o procedură, o funcţie poate fi
utilizată în calcule direct din Excel.

Sintaxa:

Teodora Frunză 51/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Function nume_functie ([lista_argumente]) [As tip]


[instrucţiuni]
[nume_functie = expresie]
[Exit Function]
[instrucţiuni]
[nume_functie = expresie]
End Function
unde:
nume_functie – numele functiei
lista_argumente – lista de variabile, aflată între paranteze şi despărţite prin virgulă
tip – tipul de dată returnat de funcţie
instrucţiuni – instrucţiuni VBA
expresie – valoarea returnată de funcţie
Exit Function – instrucţiune care forţează terminarea imediată a funcţiei şi ieşirea din ea
End Function – sfârşitul funcţiei

Exemplu1: Scrieţi o funcţie care returnează data da ieri.

Function Ieri() As Date


Ieri = Now - 1
End Function

Exemplu2: Scrieţi o funcţie care calculează comisionul funcţie de valoarea vânzării. Scrieţi o
procedură care cere de la utilizator valoarea vânzării, apelează funcţia de comision şi afişează
valoarea vânzării şi a comisionului aferent. La final procedura va întreba dacă mai sunt vânzări, şi
în caz afirmativ, se reia calculul.

Function Comision(vanzari)
' nivelul comisionului
Const Nivel1 = 0.05
Const Nivel2 = 0.10
Const Nivel3 = 0.125
Const Nivel4 = 0.15
' calculeaza comisionul aferent vanzarilor
Select Case vanzari
Case 0 To 999.99: Comision = vanzari * Nivel1
Case 1000 To 19999.99: Comision = vanzari * Nivel2
Case 20000 To 39999.99: Comision = vanzari * Nivel3
Case Is >= 40000: Comision = vanzari * Nivel4
End Select
End Function

Sub CalculComision()
Dim vanzari As Long
Dim mesaj As String, rasp As String
' utilizatorul precizează valoarea vânzării
vanzari = Val(InputBox("Introduceti vanzarea:", "Calculator comision vanzari"))
' se construieşte mesajul de răspuns
mesaj = "Valoarea vanzarilor:" & vbTab & Format(vanzari, "$#,##0.00")
mesaj = mesaj & vbCrLf & "Comision:" & vbTab
mesaj = mesaj & Format(Comision(vanzari), "$#,##0.00")
mesaj = mesaj & vbCrLf & vbCrLf & "Urmatoarea vanzare?"
' se afişează mesajul şi utilizatorul e întrebat dacă trece la următoarea vânzare.

Teodora Frunză 52/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

rasp = MsgBox(mesaj, vbYesNo, "Calculator comision vanzari")


If rasp = vbYes Then CalculComision
End Sub

Exemplu3: Pentru tabelul următor, scrieţi o funcţie prima ce calculează nivelul primelor conform
grilei afişate. Apelaţi funcţia prima din Excel.

Function prima(functie, localitate, salariu) As Double


If functie = "Contabil" And localitate = "Arad" Then prima = salariu * 0.05
If functie = "Manager" Then prima = salariu * 0.07
If (functie = "Contabil" Or functie = "Agent comercial") _
And localitate = "Timisoara" Then prima = salariu * 0.03
End Function

Apelul funcţiei din Excel poate fi făcut direct din celulă, prin formula =prima(D3,E3,F33) sau
eticheta Formulas / Insert Function.

Teodora Frunză 53/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Din fereastra Insert Function alegem categoria User Defined şi selectăm funcţia creată. Va apare
fereastra în care putem preciza valorile argumentelor, similar cu orice altă funcţie Excel.

Teodora Frunză 54/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

4. Utilizarea controalelor tip formular în foile de calcul


Un formular este un document cu o structură şi un format standard ce face mai uşoară
introducerea, organizarea şi editarea informaţiilor. Formularele create în Excel conţin controale.
Acestea sunt obiecte care afişează informaţii, cu ajutorul cărora se pot introduce informaţii,
efectua acţiuni sau selecţii. Controalele cele mai des utilizate sunt casetele de text, listele,
butoanele de opţiune sau de acţiune. Controalele pot rula macro-comenzi sau pot răspunde la
evenimente cum ar fi clic-ul de mouse.
În Excel tipuri de formulare care se pot crea cu Microsoft Excel: formulare de date, foi de calcul
ce conţin controale de tip formular sau ActiveX, formulare de tip VBA UserForms.

4.1 Formularele de date


Un formular de date e de multe ori o cale comodă de a introduce date într-un tabel Excel.
Programul Excel poate crea automat un formular pe un tabel, formular ce conţine toate
etichetele de coloane şi câte o căsuţă de text pentru introducerea informaţiilor. Dacă în tabel
există formule, acestea vor fi calculate automat pe formular. Pentru operaţiile de introducere,
ştergere, căutare sau editare, formularul pune la dispoziţie butoane de acţiune.
Pentru afişarea formularului, se foloseşte butonul Form. Acesta nu este inclus în interfaţa
standard, dar poate fi adăugat barei de instrumente Quick Access.

Exemplu1: Folosiţi formularul de date pentru a introduce informaţii în tabelul produse.

Exemplu2: Creaţi un macro care să afişeze formularul de date.

Sub Macro1()
' Macro1 Macro
Sheets("produse").Range("A1").Select
ActiveSheet.ShowDataForm
End Sub

4.2 Foi de calcul ce conţin controale de tip Form şi ActiveX

Teodora Frunză 55/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

O foaie de calcul este un tip special de formular ce permite introducerea şi vizualizarea datelor
sub formă de grilă. Pentru o flexibilitate crescută, pe foile de calcul se pot introduce controale
care să fie legate de celulele foilor Excel şi care nu necesită cod VBA de lucru cu acestea.
Excel are două tipuri de controale care se pot folosi: controale de tip Form şi controale ActiveX.
Acestea sunt disponibile din fila Developer, butonul Insert.

Aici veţi găsi controale tip etichete, casete de text, casete de grupare, butoane de acţiune, casete
de validare, butoane opţiune, casete listă, casete tip liste derulante, bare de defilare, butoane de
incrementare /decrementare.
Controalele enumerate mai sus pot fi utilizate pentru introducerea sau gestionarea datelor şi se
leagă de o celulă. În cadrul unei formule pot apărea referinţe la celula de legătură, pentru a căuta
informaţii sau a face calcule pe baza acestora.
Pentru a utiliza un anumit tip de control, acesta se selectează, se execută clic dreapta şi din
meniul contextual al obiectului, se alege opţiunea Format Control.

4.3 Controale de tip Form


Controalele de tip Form sunt controale originale, compatibile cu versiunile mai vechi de Excel,
începând cu Excel 5. Aceste controale sunt utile pentru interacţiunea uşoară cu celulele foilor de
calcul, fără folosirea codului VBA.
Obs: Aceste controale nu pot fi folosite pe formulare de tip Userform.

Control Denumire Acţiune


Label Introduce un text care va fi utilizat pentru a denumi
Etichetă alte controale.
Group Box Se utilizează pentru a grupa butoanele de opţiune
Casetă de grupare astfel încât doar unul să fie selectat la un moment dat.
Button Lansează în execuţie o macro-comandă
Buton
CheckBox Produce o valoare TRUE sau FALSE dacă aceasta
Casetă de validare este selectată, respectiv deselectală.
Option Button Dacă este utilizat în cadrul unui grup, selectarea unui
Buton de opţiune buton returnează numărul butonului din cadrul
grupului.
List Box Returnează numărul obiectului selectat din listă
Casetă listă
Combo Box Combină o casetă listă cu una de editare.
Casetă listă derulantă
Scroll Bar O bară de derulare extensibilă, care permite limite
Bară de editare minime, maxime şi modificări incrementate.

Teodora Frunză 56/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Spinner Un contor care permite limite minime, maxime şi


Buton de incrementare/ modificări incrementale
decrementare

Caracteristici specifice controalelor

Proprietǎţile controalelor se stabilesc cu ajutorul casetei Format Control.

 Controlul Label - permite scrierea de texte explicative pe formulare. Modificarea


textului se face cu click în interiorul etichetei, se şterge textul existent şi se tasteazǎ textul
dorit. Rubrica Protection permite inhibarea posibilitǎţii de modificare a controlului
atunci cand foaia e protejata.
 Controlul Group Box - permite gruparea unor controale. Se poate modifica Textul
afişat ca titlu de grup – click cu butonul din dreapta pe control şi se alege Edit Text.
Pentru terminare se face click în orice celulǎ.
 Controlul Button – Este conceput pentru a declanşa execuţia unei acţiuni atunci cand se
apasǎ cu mose-ul. Acţiunea care se ececutǎ este memoratǎ într-o macrocomandǎ.
Legǎtura între buton şi macrocomandǎ se face cu Assign Macro. Rubricile din pagina
Font permit alegerea fontului, dimensiunii caracterelor, etc.
 Controlul Check Box – caseta Fotmat Control conţine opţiuni pentru stabilirea celulei în
care se memoreazǎ alegerea fǎcutǎ de utilizator- rubrica Cell Link . Se completeazǎ cu
adresa celulei (ex. $A$7).
- Dacǎ utilizatorul bifeazǎ => în celulǎ se memoreazǎ valoarea TRUE.
- Dacǎ utilizatorul nu bifeazǎ => în celulǎ se memoreazǎ valoarea FALSE.

 Controlul Option Button – funcţioneazǎ asemǎnǎtor cu caseta de validare. Rubrica Cell


Link se completeazǎ cu adresa celulei în care se memoreazǎ opţiunea aleasǎ de
utilizator.
- Dacǎ utilizatorul bifeazǎ => în celula de legǎturǎ se memoreazǎ valoarea 1.
- Dacǎ utilizatorul nu bifeazǎ => în celulǎ se memoreazǎ valoarea 0.
Butoanele de opţiuni pot apǎrea singulare sau grupate . Gruparea se face utilizand controlul
container Group Box. Dacǎ apar în grup doar unul poate fi ales de cǎtre utilizator. In
rubrica Cell Link se specificǎ celula care memoreazǎ numǎrul butonului ales din cadrul
grupului (1 dacǎ s-a selectat primul buton, 2 pentru al doilea, etc.).

Teodora Frunză 57/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

 Controlul List Box – Permite alegerea dintr-o listǎ. Rubrici:


- Input range – se specificǎ sursa datelor din listǎ (ex. Coloana cu denumirea
produselor).
- Cell Link – se specificǎ celula de legǎtura => celula în care se memoreazǎ numǎrul
elementului din listǎ care a fost ales.

 Controlul Combo Box – Permite alegerea dintr-o listǎ. Rubrici:


- Input range – se specificǎ sursa datelor din listǎ .
- Cell Link – se specificǎ celula de legǎtura => celula în care se memoreazǎ numǎrul
elementului din listǎ care a fost ales.
- Drop Down Lines - nr. elem din listǎ care apar la deschiderea listei.

Teodora Frunză 58/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

 Controlul Spinner – Permite incrementarea/decrementarea unor valori. Rubrici:


- Current value – se specificǎ valoarea curentă
- Minimum value – se specificǎ valoarea minimă
- Maximum value – se specificǎ valoarea maximă
- Incremental change – se specifică valoarea de incrementare / decrementare
- Cell Link – se specificǎ celula de legǎtura => celula în care se afişează rezultatul.

 Controlul Scroll – Permite mărirea/micşorarea unor valori. Rubrici:


- Current value – se specificǎ valoarea curentă
- Minimum value – se specificǎ valoarea minimă
- Maximum value – se specificǎ valoarea maximă
- Incremental change – se specifică valoarea de incrementare / decrementare la clic
pe săgeţi
- Page change – se specifică valoarea de incrementare / decrementare la clic bara de
derulare
- Cell Link – se specificǎ celula de legǎtura => celula în care se afişează rezultatul.

Teodora Frunză 59/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Următoarele controale nu se mai pot folosi în Excel 2007-2010: TextField, Combo List-
Edit, - Combo Drop – Down list, - Run Dialog.

Exemplu 1: În fişierul Salariaţi avem un tabel cu datele acestora: marca salariat, prenume, nume,
data angajării, funcţia, locaţia şi salariul. Creaţi o casetă de căutare care se conţină o listă derulantă
din care utilizatorul să selecteze marca angajatului şi, corespunzător, să se afişeze imediat numele
şi prenumele, locaţia şi salariul:
Tabelul angajaţi Caseta de căutare

Obs: Caseta de derulare introduce în celula legată indexul elementului selectat (de ex. 5). Pentru a
determina numele şi prenumele, locaţia sau salariul se foloseşte funcţia index. Astfel, dacă celula
legată de caseta de derulare este J2, tabelul salariaţi se află în domeniul A2:G38 şi coloana de
salarii este a 7-a, funcţia index ce determină salariul angajatului selectat este:
=INDEX($A$2:$G$38,$J$2,7).

Exemplu 2: Folosiţi controalele scroll şi spin pentru a realiza următorul calculator de credite:

Exemplu 3: Creaţi un calculator de credite pentru maşina, ca în imaginea de mai jos. Aveţi un
tabel cu tipul maşinii şi preţul corespunzător, pe care în folosiţi în cadrul calculatorului pentru
selectarea tipului maşinii. Adăugaţi o casetă de validare cu reducerea aplicată, un control de tip
scroll pentru valoarea reducerii, precum şi un control spin pentru numărul de ani.

Teodora Frunză 60/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Exemplu 4: Folosiţi controale de tip scroll pentru a modifica valoarea intensităţii culorilor roşu,
verde şi albastru din exemplul următor. Introduceţi un buton de acţiune care să coloreze fundalul
unui domeniu cu nuanţa obţinută din cele trei culori de bază.

Codul corespunzător la clic pe butonul de acţiune este:


Sub Button1_Click()
Range("G3:H5").Interior.Color = RGB(Range("C3"), Range("c4"), Range("C5"))
End Sub

4.4 Controale de tip ActiveX


Controalele ActiveX pot fi folosite în foile de calcul sau formulare UserForms (nu şi pe foi de
grafic), cu sau fără cod VBA. Aceste controale se folosesc atunci când aveţi nevoie de maximă
flexibilitate în lucrul cu acestea. Controalele ActiveX au mai multe proprietăţi astfel încât să
puteţi customiza modul de afişare, fontul sau alte caracteristici. De asemenea, puteţi controla
evenimentele ce apar în lucrul cu aceste controale (selectarea unui element din listă, clic pe un
buton, etc) şi scrie macro-comenzi ce răspund evenimentelor apărute.
Observaţie: Computerul pe care lucraţi conţine controale ActiveX instalate de Excel sau alte
programe, cum ar fi Calendar Control, Microsoft Date and Time Picker sau Windows Media
Player. Dar nu toate controalele ActiveX pot fi utilizate direct pe foile de lucru. Unele dintre
acestea pot fi folosite doar pe formulare VBA UserForms. Dacă încercaţi să utilizaţi un astfel de
control ActiveX pe o foaie, va apare mesajul de eroare "Cannot insert object."
Controalele ActiveX

Control Denumire Acţiune


CheckBox Validează sau nu o opţiune. Puteţi selecta mai multe
Casetă de validare casete de validare de pe o foaie de calcul sau dintr-un
grup. O casetă de validare poate avea una din
următoarele stări: selectată, deselectată, mixtă.
TextBox Permite introducerea/editarea textelor într-o căsuţă
Casetă de text legată de o celulă.
Button Lansează în execuţie o macro-comandă
Buton de comandă
Option Button Dacă este utilizat în cadrul unui grup, selectarea unui
Buton de opţiune buton returnează numărul butonului din cadrul

Teodora Frunză 61/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

grupului. O casetă de validare poate avea una din


următoarele stări: selectată, deselectată, mixtă.
Label Introduce un text care va fi utilizat pentru a denumi
Etichetă alte controale.
Frame control Se utilizează pentru a grupa controale. Dacă sunt
Casetă de grupare grupate butoanele de acţiune, atunci selecţia unuia
determină deselectarea celorlalte.
List Box Afişează o listă ce conţine unul sau mai multe
Casetă listă elemente care pot fi selectate. Sunt trei tipuri de astfel
de liste: liste ce permit o singură selecţie, liste ce
permit selecţii multiple (cu clic de mouse pe fiecare
element) sau liste ce permit selecţii extinse (clic de
mouse sau combinaţii de shift sau crtl şi clic) .
Combo Box Combină o casetă listă cu una de editare. O listă
Casetă listă derulantă derulantă permite utilizatorului fie selectarea unui
element din listă, fie tastarea informaţiilor în casetă.
Controlul afişează valoarea în caseta de editare,
indiferent de modul în care a fost introdusă.
Scroll Bar O bară de derulare extensibilă, care permite limite
Bară de editare minime, maxime şi modificări incrementate.
Spin button Un contor care permite limite minime, maxime şi
Buton de incrementare/ modificări incrementale.
decrementare
Toggle Indică starea, cum ar fi da/nu sau on/off. Butonul
Buton alternează între stările de activat sau dezactivat, atunci
când e apăsat.
Image Introduce o imagine bitmap, jpg sau gif.
Imagine
More controls Afişează o listă de controale adiţionale ActiveX
Mai multe controale disponibile pe calculatorul dvs.

Tot pe formular pot fi introduse şi obiecte grafice (SmartArt graphics, Shapes sau WordArt)
cărora li se pot asocia comenzi.

Caracteristici specifice controalelor

Controalele ActiveX au proprietăţi similare controalelor Form, acestea stabilindu-se cu ajutorul


casetei Properties.

Formulare UsersForm

Pentru o maximă flexibilitate, puteţi crea formulare UserForm pe care să includeţi controale
ActiveX. Aceste formulare sunt disponibile din editorul Visual Basic şi se crează astfel:
- Pentru fişierul în care doriţi să introduceţi formulare, comutaţi în editorul Visual Basic şi din
meniul Insert alegeţi opţiunea UserForm.
- Scrieţi o procedură de afişare a formularului
- Introduceţi controalele ActiveX pe formular folosind bara de instrumente Toolbox
- Stabiliţi proprietăţile controalelor ActiveX
- Scrieţi proceduri ce tratează evenimentele asociate controalelor

Teodora Frunză 62/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Descrierea controalelor standard

a) Caseta de text (Textbox)

Controlul casetă cu text TEXTBOX este folosit pentru a afişa informaţiile introduse de
utilizator în momentul execuţiei sau al proiectării.

Proprietatea Name
Proprietatea Name stabileşte numele controlului.

Proprietatea Text
Această proprietate stabileşte sau returnează textul conţinut în caseta de text.
Exemplu: Afişaţi conţinutul casetei de text cu numele txt:
Msgbox txt.Text

Proprietăţile BackColor şi ForeColor


Proprietatea BackColor stabileşte culoarea de fundal a controlului, în timp ce proprietatea
ForeColor stabileşte culoarea textului afişat.

Proprietatea Font
Într-o casetă de text, textul afişat nu poate folosi decât o singură familie de litere, adică poate
avea un singur stil tipografic. Caracteristicile acestea sunt gestionate de proprietatea Font.
Aceste caracteristici ale fontului pot fi stabilite prin cod astfel:
a) .Font.Name – stilul fontului;
Exemplu: txtnume.Font.Name = ”TimesNewRoman”
b) .Font.Bold – este o proprietate booleană ce stabileşte dacă textul este scris îngroşat;
Exemplu: txtnume.Font.Bold=True – scrie îngroşat
c) .Font.Italic – este o proprietate booleană ce stabileşte dacă textul este scris înclinat;
Exemplu: txtnume.Font.Italic=False – nu scrie înclinat
d) .Font.Size – este o proprietate cu valori întregi ce stabileşte dimensiunea textului;
Exemplu: txtnume.Font.Size=14 – textul este scris cu caractere de dimensiune 14
e) .Font.Underline – este o propietate booleană ce stabileşte dacă textul este subliniat.
Exemplu: txtnume.Font.Underline=True – textul este scris subliniat
Teodora Frunză 63/105
CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Valoarea implicită a proprietăţilor cu valori booleene este False.

Proprietatea Wordrap
Dacă textul depăşeşte limitele controlului, şi proprietata Wordrap e True, textul poate trece pe
linia următoare. Dacă este False, textul va fi scris pe un singur rând.
Proprietatea Multiline
Dacă textul depăşeşte limitele controlului, i se poate permite acestuia să sară automat pe
următoarea linie atribuind proprietăţii Multiline valoarea True.
Dacă proprietatea Multiline este True atunci este activată şi proprietatea Alignment ce permite
alinierea textului.
Are valori implicite, dar şi constante şi anume:
a) fmTextAlignLeft =1 – text aliniat la stânga (valoare implicită)
b) fmTextAlignCenter =2 – text aliniat la dreapta
c) fmTextAlignright =3 – text centrat

Proprietatea MaxLength
Proprietatea MaxLength (de tip întreg) stabileşte numărul maxim de caractere care poate fi
introdus într-o casetă de text.
Valoarea implicită a acestei proprietăţi este 0, ceea ce înseamnă că numărul caracterelor care
poate fi introdus este nelimitat, pentru orice altă valoare introdusă determină numărul maxim de
caractere. Dacă se depăşeşte această valoare nu se semnalează eroare, dar textul apare trunchiat.

Proprietatea ScrollBars
Dintre proprietăţile care controlează aspectul casetei de text în întregime este şi proprietatea
ScrollBars. Această proprietate este de tip întreg şi stabileşte dacă cutia de text formată cu mai
multe linii este prevăzută cu bară de defilare. Se folosesc constante sau valori numerice pentru a
stabili valoarea proprietăţii:
a) fmScrollBarsNone =0 – cutia nu are bare de defilare;
b) fmScrollBarsHorizontal=1 – cutia are bară de defilare orizontală;
c) fmScrollBarsVertical =2 – cutia are bară de defilare verticală;
d) fmScrollBarsBoth =3 – are bară de defilare şi verticală şi orizontală.

Proprietatea Locked
Casetele de text permit modificări ale conţinutului. Există posibilitatea blocării unei casete de text
în sensul interzicerii modificărilor de la tastatură. Această proprietate este Locked de tip boolean
şi implicit valoarea False permiţând modificarea. Dacă este True nu este permisă aşadar
interacţiunea cu utilizatorul în momentul execuţiei (în cazul unui control aflat direct pe foaia de
calcul, proprietatea Locked este similară proprietăţii Locked a celulelor).

Proprietatea PasswordChar
Proprietatea PasswordChar ne ajută la realizarea casetelor text cu parolă. O casetă text cu parolă
care permite utilizatorului să introducă în ea o anumită parolă ce vafi însă afişată pe ecran sub
formă de caractere de înlocuire cum ar fi asteriscurile (*). Valoarea implicită a acestei proprietăţi
este şirul vid, iar în această situaţie caracterele se vor afişa aşa cum sunt introduse. Modificând
această proprietate, caracterele tastate (proprietatea Text) sunt ascunse. În general, în aplicaţiile
Windows pentru astfel de situaţii se foloseşte *.

Proprietatea AutoSize
Proprietatea AutoSize specifică dacă controlul se redimensionează automat pe orizontală sau nu.
Dacă se alege varianta True, atunci controlul se redimensionează automat în aşa fel, încât va fi
afişat întregul text specificat în proprietatea Caption.
Dacă se alege varianta False (valoare implicită), atunci dimensiunea controlului rămâne constantă,
astfel încât textul din proprietatea Caption poate fi trunchiat.
Teodora Frunză 64/105
CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Evenimente utile:
- Change – este evenimentul implicit şi se declanşează la fiecare modificare a valorii căsuţei de
text (Obs: dacă introduceţi date, acesta se va declanşa la fiecare literă)
- AfterUpdate – eveniment ce apare după actualizarea căsuţei de text, când focusul a fost
pierdut

b) Etichete

Controalele etichetă LABEL sunt utilizate pentru a afişa text şi nu pot fi modificate de utilizator.
Sunt folosite de obicei pentru:
- a eticheta controalele care nu au propriile proprietăţi Caption;
- a afişa informaţii ca răspuns la diverse acţiuni
Textul afişat de etichete poate fi specificat atât în perioada de elaborare a proiectului, dar şi în
execuţie prin proprietatea Caption. Proprietăţile unei etichete sunt asemănătoare cu proprietăţile
unei casete de text.

c) Butoane de comandă

Butoanele de comandă sunt controalele cele mai des folosite în proiectele Visual Basic. Scopul
folosirii lor este lansarea în execuţie a diferitelor acţiuni (pornirea, oprirea sau terminarea unui
proces).
Utilizarea este posibilă în momentul selectării butonului. Dacă se execută un clic de mouse
deasupra butonului, se declanşează evenimentul Click corespunzător şi se execută operaţiile
corespunzătoare acestui eveniment. Butonul poate fi selectat folosind tastatura, dar şi caracterul
subliniat din numele butonului (litera cheie) şi tasta Alt. Butonul este selectat şi se declanşează
evenimentul Click (controlul poate deveni control curent apăsînd tasta TAB). O altă metodă este
focalizarea prin program folosind metoda SetFocus.

Proprietatea Caption
Proprietatea Caption stabileşte textul afişat de buton.

Proprietatea Accelerator
Această proprietate stabileşte litera care poate fi folosită în combinaţie cu tasta Alt pentru a apăsa
butonul. Dacă litera există în textul afişat de buton, aceasta va fi subliniată.

Proprietăţile BackColor şi ForeColor


Proprietatea BackColor stabileşte culoarea de fundal a controlului, în timp ce proprietatea
ForeColor stabileşte culoarea textului afişat.

Proprietatea Default
Această proprietate de tip boolean stabileşte dacă butonul de comandă este buton implicit al
formularului, adică este activat prin apăsarea tastei ENTER chiar dacă alt buton are focusul.
Pe un formular numai un singur buton poate fi buton implicit. Valoarea implicită a acestei
proprietăţi este FALSE, adică butonul respectiv nu este cel implicit.

Proprietatea Cancel
Opusul proprietăţii Default e proprietatea Cancel. Aceasta stabileşte dacă butonul de comandă
este butonul de anulare al formei. Dacă are valoarea TRUE, procedura eveniment asociată
butonului poate fi apelată doar apăsând tasta Esc (indiferent de locaţia actuală a focusului).
Valoarea implicită a acestei proprietăţi este FALSE, iar pe un formular un singur buton poate să
joace rolul butonului de anulare.
Teodora Frunză 65/105
CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Proprietatea Picture
Proprietatea Picture permite afişarea unei imagini butonului de comandă.
Procedurile eveniment specifice butoanelor de comandă sunt: BeforeDragOver,
BeforeDropOrPaste, Click, DblClick, Enter, Error, Exit, KeyDown, KeyUp, MouseDown,
MouseMove.

d) Butoane de opţiune

Butonul OptionButton desemnează un control care poate avea (de cele mai multe ori) două
stări: selectat sau neselectat.
Aceste controale se folosesc pentru opţiuni care se exclud reciproc; se utilizează de obicei grupuri
de butoane din care utilizatorul poate alege unul. Gruparea se realizează desenând butoanele de
opţiune în interiorul unui control de tip container (Frame sau GroupBox) sau sunt desenate
direct pe formular (care joacă rolul unui container implicit).
Din fiecare grup de butoane de opţiune utilizatorul poate selecta numai un singur buton, restul
din grup devin automat deselectate.
Un buton de opţiune poate fi selectat la momentul execuţiei în mai multe feluri: pric click pe el,
folosind tasta TAB pentru selectarea unui buton din grup sau cu ajutorul unei taste de comandă
rapidă.

Proprietatea Caption
Proprietatea Caption stabileşte textul afişat lângă buton.

Proprietatea Accelerator
Această proprietate stabileşte litera care poate fi folosită în combinaţie cu tasta Alt pentru a apăsa
butonul. Dacă litera există în textul afişat de buton, aceasta va fi subliniată.

Proprietăţile BackColor şi ForeColor


Proprietatea BackColor stabileşte culoarea de fundal a controlului, în timp ce proprietatea
ForeColor stabileşte culoarea textului afişat.

Proprietăţile Value
Această proprietate de tip boolean determină dacă opţiunea reprezentată de buton este selectată
sau nu. Dacă se alege valoarea TRUE butonul respectiv este selectat, iar celelalte butoane din
acelaşi container sunt deselectate. Dacă se alege valoarea FALSE butonul nu este selectat
(valoare implicită).

Proprietăţile Alignment şi TextAlign


Proprietatea Alignment stabileşte alinierea imaginii faţă de textul butonului. Valoarea 0 –
fmAlignmentLeft stabileşte ca imaginea să fie în stânga, iar 1- fmAlignmentRight aliniază
imaginea în dreapta.
Proprietatea TextAlign stabileşte alinierea textului: 1 – fmTextAlignLeft stabileşte ca textul să fie
aliniat în stânga, 2 – fmTextAlignCenter stabileşte ca textul să fie aliniat la centru, iar 3-
fmTextAlignRight aliniază textul în dreapta.

Evenimentul implicit este Click.

e) Caseta de validare
Casetele de validare (CHECK BOX) sunt folosite în aplicaţii pentru a oferi utilizatorului opţiuni
multiple din care acesta poate alege. Deoarece casetele de validare sunt independente unele de
altele utilizatorul poate selecta oricâte casete la un moment dat.

Teodora Frunză 66/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Controlul are (de cele mai multe ori) două stări: selectat sau neselectat. Controlul are proprietăţi
similare butonului de opţiune.

f) Bare de derulare orizontală şi verticală

Barele de derulare ScrollBar constituie o metodă uşoară de navigare printr-o listă lungă de
elemente sau printr-o cantitate mare de informaţii, derulând fie pe verticală, fie pe orizontală
controlul.

Proprietăţile Min şi Max


Proprietăţile Min şi Max permit stabilirea sau citirea valorii minime, respectiv maxime care se
poate reprezenta pe bara de defilare. Stabilesc aşadar domeniul de variaţie al butonului glisant.
Astfel:
a) stabilirea maxime şi minime
bara.min=valoare
bara.max=valoare
b) citirea valorii maxime şi minime
valoare=bara.min
valoare=bara.max
Implicit valoarea Min este 0, iar Max este 32767. Min şi Max sunt valori întregi deci pot lua valori
între (-32768, 32767).

Proprietatea Value
Această prorpietate (de tip întreg) permite citirea sau stabilirea prin program a poziţiei actuale a
butonului glisant. Poate lua valori în intervalul (Min,Max). Implicit are valoarea 0.

Proprietatea SmallChange
Proprietatea Small Change (de tip întreg) stabileşte deplasarea butonului glisant când se execută
clic pe unul din butoanele cu săgeţi.

Proprietatea LargeChange
Proprietatea Large Change (de tip întreg) stabileşte deplasarea butonului glisant când se execută
clic pe o porţiune a barei de derulare, între butonul glisant şi butonul cu săgeată.

Evenimentele asociate acestui control:


1) CHANGE – se declanşează când proprietatea Value se modifică (fie prin folosirea
mouse-ului, fie prin cod)
2) SCROLL – se declanşează atunci când poziţia butonului de glisare se modifică prin
tragere (nu cu clic pe butoanele săgeţi)
După ce apare evenimentul Scroll, se declanşează automat şi evenimentul Change.

g) Controlul spin

Controlul SpinButton este folosit pentru a incrementa/decrementa valori. De obicei acest


control este folosit împreună cu o casetă de text sau etichetă care afişează valoarea. Proprietăţile
importante ale controlului sunt Min, Max, Value şi SmallChange, similare aceloraţi proprietăţi
ale barei de derulare ScrollBar.

Teodora Frunză 67/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

h) Caseta cu listă

O casetă cu listă (List Box) afişează o listă cu elementele din care utilizatorul selectează unul sau
mai multe. Elementele sunt şiruri de caractere.

Proprietăţile BackColor şi ForeColor


Proprietatea BackColor stabileşte culoarea de fundal a controlului, în timp ce proprietatea
ForeColor stabileşte culoarea textului afişat.

Proprietatea Value
Această proprietate returnează valoarea selectată din listă, în cazul în care lista este cu selecţie
simplă.

Proprietatea ListStyle
Această proprietate se referă la stilul listei şi are următoarele valori: 0 - fmListStylePlain –
valoarea implicită, în zona alocată controlului apar doar elementele şi 1- fmListStyleOption - în
stânga fiecărui element apare o un buton de opţiuni sau o căsuţă de validare.

Proprietatea ListCount
Această proprietate determină în execuţie numărul de elemente al controlului.

Proprietatea ColumnCount
Proprietatea se referă la numărul de coloane afişate de control. Valoarea implicită este 1.

Proprietatea BoundColumn
Proprietatea stabileşte care din coloanele afişate este folosită pentru a returna valori. Valoarea
implicită este 1.

Proprietatea ColumnHeads
Dacă e true, proprietatea afişează antetele de coloană. Această proprietate e utilă atunci când
datele din coloane provin din domenii Excel.

Proprietatea MultiSelect
Proprietatea MultiSelect se referă la posibilitatea de selectare simultană a mai multor elemente şi
la modalitatea de selectare. Valorile posibile sunt:
0 – fmMultiSelectSingle (valoare implicită) se selectează un singur element;
1 – fmMultiSelectMulti utilizatorul poate selecta mai multe elemente (clic pe
fiecare element, iar pentru a deselecta clic pe elementul selectat);
2 – fmMultiSelectExtended selecţie multiplă extinsă (SHIFT, respectiv CTRL)

Proprietatea List
Dacă informaţiile necesare listei sunt sub formă de tablou, atunci acestea pot fi încărcate direct în
control cu ajutorul proprietăţii List:
Dim localitati(1 To 3) As String
localitati(1) = "Timisoara"
localitati(2) = "Arad"
localitati(3) = "Resita"
ListBox1.List = localitati
În perioada de execuţie poate fi utilizată pentru citirea elemntelor listei:
listă.list(i)
(i – numărul elementului din listă - indexul)
Proprietatea RowSource

Teodora Frunză 68/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Atunci când informaţiile necesare completării listei sunt în domenii din foile de calcul Excel,
deosebit de utilă e proprietatea Rowsource care determină încărcarea listei:
ListBox2.RowSource = "Salariat!A2:G38"
Proprietatea ListIndex
Această proprietate (de tip întreg) permite citirea indicelui elementului selectat. Dacă nu a fost
selectat nici un element, atunci Listindex=-1. De exemplu: i=listă.listindex permite citirea indicelui
selectat, iar listă.listindex=i determină selectarea elemntului de pe poziţia i. Proprietata ListIndex
nu poate fi folosită pentru liste cu selecţie multiplă.
În execuţie se poate folosi pentru selectarea unui element.

Proprietatea Selected
Această proprietate reţine un tabel cu valori true/false şi testează dacă elementul al i-lea din listă
a fost selectat:
listă.selected(i)
Metodele acestui control:
Metoda AddItem
Cu ajutorul aceste metode se adaugă un elemnt la un control ListBox sau ComboBox:
numecontrol.AddItem Item, Index
unde Item este un şir de caractere ce reprezintă elemntul listei, iar Index este opţional pentru a
specifica poziţia în control. Implicit, valoarea lui Index porneşte de la 0.
Metoda Clear
Această metodă şterge toate elementele din control:
numecontrol.Clear

Metoda RemoveItem
Metoda şterge un element specificat din listă:
numecontrol.RemoveItem Index
unde Index este poziţia elementului ce va fi şters din listă.

i) Caseta combinată

Controlul casetă combinată (Combo Box) integrează facilităţile unei casete de text cu cele ale
unei casete cu listă. Acest control permite utilizatorului să selecteze un element fie introducând
text în caseta combinată, fie selectându-l din listă.
O casetă combinată se potriveşte mai bine când există o listă de opţiuni sugerate, iar caseta cu
lista atunci când alternativele trebuie limitate la cele din listă. Casetele combinate economisesc
din spaţiul formularului, lista e derulată doar când se dă clic pe butonul de deschidere.
Proprietăţile sunt asemănătoare cu cele de la caseta cu listă.

Proprietatea Style
Proprietatea Style poate lua următoarele valori:
a) 0 – fmStyleDropDownCombo - listă combinată derulantă (stilul implicit)
– permite introducerea de date
b) 2 – fmStyleDropDownList listă derulantă (nu se permite introducerea
datelor)
Proprietatea Text
Proprietatea Text ajută la obţinerea valorii elementului selectat; este corespunzătoare textului din
zona de editare a controlului la momentul execuţiei.

Proprietatea ListIndex
Teodora Frunză 69/105
CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Proprietatea Listindex determină poziţia în listă a elementului selectat. Dacă nu a fost selectat nici
un element, valoarea e -1.

Apare la acest control evenimentul DropDown în momentul în care utilizatorul efectuează un


click pe butonul .

j) Controlul Image

Acest control îl puteţi folosi pentru a afişa o imagine grafică pe formular – de exemplu imaginea
cu logo-ul firmei. Imaginea grafică va fi păstrată în fişierul Excel, astfel încât, atunci când veţi
distribui fişierul altor persoane, imaginea să fie disponibilă.
Proprietatea Picture
Această proprietate stabileşte fişierul de tip imagine ce se va încărca în control.

Proprietatea PictureSizeMode
Proprietatea stabileşte modul de afişare a imaginii în control. Valorile posibile sunt:
a) 0- fmPictureSizeModeClip – “taie” imaginea din fişier la dimeniunea
controlului
b) 1- fmPictureSizeModeStretch – redimensionează imaginea la dimensiunile
controlului
c) 2- fmPictureSizeModeZoom – redimensionează imaginea la dimensiunile
controlului, cu păstrarea proporţiilor imaginii originale

k) Butoane Toggle

Controalele de tip ToggleButton are două stări: apăsat sau ridicat. Trecerea între aceste două stări
se face prin clic. Proprietatea Value a butonului poate fi True, dacă butonul a fost apăsat sau
False , dacă butonul a fost ridicat. Acest buton e similar conceputul de selectare a unei căsuţe de
validare Checkbox.

l) Controlul MultiPage
Un control MultiPage permite crearea casetelor cu mai multe pagini (similare casetei
FormatCells). Contolul funcţionează ca şi container pentru alte controale. Implicit controlul are
două pagini, dar cu clic dreapta se pot insera, şterge paginile. Controlul ajută la organizarea mai
bună a datelor pe care utilizatorul trebuie să le introducă. Fiecare pagină a controlului este un
obiect de tip Page.

m) Controlul TabStrip
Acest control seamănă ca aspect cu controlul MultiPage, dar, spre deosebire de acesta, nu
acţionează ca şi container pentru controale. Controlul este o colecţie de obiecte de tip Tab.
Un control MultiPage permite crearea casetelor cu mai multe pagini (similare casetei
FormatCells). Implicit controlul are două pagini, dar cu clic dreapta se pot insera, şterge paginile.
Controlul ajută la organizarea mai bună a datelor pe care utilizatorul trebuie să le introducă.
Fiecare pagină a controlului este un obiect de tip Page.

Teodora Frunză 70/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

n) Controlul RefEdit
Acest control e folosit pentru a selecta domenii dintr-o foaie de calcul. Proprietatea Value
returnează ca String selecţia făcută.

Alte proprietăţi şi metode comune controalelor:


- proprietatea Enable: are valoarea True (valoare implicită) dacă e activ şi False dacă e inactiv
- proprietatea Visible: are valoarea True (valoare implicită) dacă e vizibil şi False dacă e
ascuns
- proprietatea Locked: are valoarea False (valoare implicită) dacă poate fi folosit şi True în
caz contrar (e read-only)
- proprietatea TabStrop: are valoarea True (valoare implicită) dacă se poate ajunge la control
folosind tasta Tab şi False în caz contrar
- proprietatea TabIndex: valoarea acestuia reprezintă poziţia în ordinea de parcurgere a
controalelor cu ajutorul tastei Tab
- metoda SetFocus: această metodă poate fi apelată pentru orice control şi determină ca acel
control să primească focusul.

Metode şi proprietăţi utile ale formularului


- proprietatea Caption: stabileşte textul afişat de formular.
- proprietatea BackColor: stabileşte culoarea de fundal a controlului
- proprietatea ForeColor: stabileşte culoarea textului afişat
- proprietatea Picture: stabileşte fişierul de tip imagine ce se va încărca în control.
- proprietatea ShowModal: stabileşte dacă execuţia programului va aştepta finalizarea lucrului
cu fomularul sau nu; implicit valoarea e True, adică utilizatorul trebuie să lucreze cu
formularul şi apoi să efectueze alte operaţii; valoarea False înseamnă că utilizatorul poate
folosi formularul şi poate efectua alte operaţii cu Excel fără a-l închide.
- metoda Show: determină afişarea unui formular (de exemplu: formular.show )
Închiderea formularului se realizează cu ajutorul metodei Unload a obiectului VBA. De
exemplu:
Private Sub Iesire_Click()
Unload Me
End Sub
Obs:Obiectul Me reprezintă formularul curent

Evenimente importante la nivel de formular:


- Initialize : evenimentul apare înainte de afişarea formei.
- Terminate: evenimentul apare la ieşirea de pe formular (cu butoanele Ok sau Cancel)
- Click: evenimentul se declanşează la clic pe formular, în afara controalelor

Evenimente importante la nivel de fişier:


- Activate: se declanşează atunci când un fişier e activat
- BeforeClose: se declanşează înainte de închiderea fişierului
- BeforePrint: apare înainte de a tipări informaţii din fişier
- BeforeSave: apare înainte a salva fişierul
- Deactivate: apare atunci când fişierul nu mai e activ
- NewSheet: se declanşează la crearea unei noi foi de calcul
- Open: se declanşează la deschiderea fişierului
- SheetActivate: apare la activarea unei foi
- SheetChange: apare la modificarea oricărei celule din fişier
- SheetDeactivate: apare atunci când o foaie pierde activarea
- SheetPivotTableUpdate: apare imediat după comanda de actualizare a tabelului pivot

Teodora Frunză 71/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

- SheetSelectionChange: apare la selectarea unei celule sau a unui domeniu de pe orice foaie
din fişier

Evenimente importante la nivel de foaie de lucru:


- Activate: se declanşează atunci când o foaie e activată
- Calculate: apare atunci când datele de pe foaie se recalculează
- Change: apare la modificarea oricărei celule de pe foaie
- Deactivate: apare atunci când fişierul nu mai e activ
- NewSheet: se declanşează la crearea unei noi foi de calcul
- Open: se declanşează la deschiderea fişierului
- PivotTableUpdate: apare imediat după comanda de actualizare a tabelului pivot de pe foaia
de lucru
- SelectionChange: apare la selectarea unei celule sau a unui domeniu

Aplicaţie practică:
1) Creaţi fişierul Formulare UserForm.xlsm
2) Introduceţi în prima foaie butoanele Introduceţi sesizarea şi Şterge sesizarea, ca în
imaginea următoare:

3) La clic pe butonul Introduceti sesizarea va apărea formularul Sesizare, ce conţine


următoarele elemente:

4) La clic pe butonul Stergeti sesizarea va apărea formularul Sterge sesizarea, ce conţine


următoarele elemente:

5) Iniţializaţi formularul Sesizare cu următoarele valori:


- în casetele de text pentru zi, luna, an introduceţi ziua, luna şi anul
corespunzătoare datei curente;
- blocaţi casetele de text zi, luna, an
Teodora Frunză 72/105
CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

- scoateţi casetele de text zi, luna, an din lista de parcurgere a tab-urilor


- în lista cu tipul incidentelor adăugaţi elementele: Memorii incompatibile,
HDD defect, Placa de baza defecta, placa video defecta; stabiliţi ca prima
valoare afişată de listă să fie Memorii incompatibile
- opţiunea Reparare este implicită
- la durata stabiliţi pentru incrementare minimul la 0, maximul la 600, iar pasul
de incrementare la 5
6) Pe formularul Sesizare stabiliţi ca orice modificare a butonului de incrementare să se
reflecte în durată
7) Pe formularul Sesizare efectuaţi următoarele operaţii la clic pe butonul Inserare:
- Scrieţi un ciclu care să oblige utilizatorii să introducă o numele celui de a
rezolvat incidentul; (în caz că nu se introduce nimic în caseta de text cu
numele celui ce a rezolvat incidentul, programul afişează un mesaj şi cursorul
revine în caseta de text)
- Completaţi tabelul din foaia Sheet 1 cu datele introduse de utilizator pe
formular;
- Reiniţializaţi valorile controalelor de pe formular astfel încât să poată fi
introduse şi alte sesizări
8) În procedura de terminare a formularului Sesizare reiniţializaţi valorile controalelor asfel
încât să valorile lor să fie cele iniţiale.
9) Butonul Anulare de pe formularul Sesizare să determină închiderea ferestrei.

Rezultatul în fişierul Excel va fi similar cu exemplul următor:

10) Iniţializaţi formularul Şterge sesizarea astfel încât valoarea controlului să fie şirul vid.
11) Pe formularul Şterge sesizarea, la clic pe butonul Şterge se şterge rândul aferent celulei
selectate.
12) La clic pe butonul Anulare de pe formularul Şterge sesizarea se va închide fereastra.

Rezultatul în fişierul Excel va fi similar cu exemplul următor, după ştergerea sesizărilor 4 şi 2:

Teodora Frunză 73/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

5. Tabele
Un tabel Excel e un obiect nou în versiunea 2007. Tabelul e în fapt o listă cu funcţionalităţi
avansate cum ar fi: calculele, totalizările, sortările sau filtrările. Un tabel Excel e creat fie dintr-un
domeniul Excel, fie dintr-o sursă externă. Un tabel este un obiect de tip ListObject, iar toate
tabelele dintr-un fişier se găsesc în colecţia ListObjects.

5.1 Crearea unui tabel din VBA


Un tabel nou se crează cu ajutorul metodei Add a unui obiect de tip ListObjects.
Sintaxa:
tabele.Add(tip_sursa, sursa, sursa_legata, antet, destinatie)
unde:
tip_sursa – indică tipul datelor sursă pentru tabel. Poate avea una din următoarele valori: 0
(xlSrcExternal) – sursă externă de date (site Microsoft Windows SharePoint Services), 1
(xlSrcRange) – domeniu, 2 (xlSrcXml) – XML, 3 (xlSrcQuery) – query (argument opţional)
sursa – dacă tip_sursă e xlSrcRange, atunci sursa e un obiect de tip range ce specifică domeniul;
sursa_legata – valoarea booleană ce precizează dacă sursa externă va fi legată sau nu de tabel.
(argument opţional)
antet – o constantă ce precizează dacă datele au linie de antet sau nu. Dacă datele sursă nu au
antet, Excel va genera automat o linie de antet. Valorile posibile sunt 0 (XlGuess) – Excel
determină dacă tabelul are antet, 1 (xlYes) – datele nu sunt sortate, 2 (xlNo) – datele vor fi
sortate (valoare implicită).
destinatie – on obiect de tip Range ce precizează o singură celulă destinaţie – colţul stânga sus al
viitorului tabel. (argument opţional)
Exemplu:
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$D$10"), False, xlGuess).Name = "tab"
5.2 Obţinerea informaţiilor dintr-un tabel
Obiectul tabel, de tip ListObject are câteva proprietăţi şi metode utile:
- proprietatea ListColumns returnează o colecţie de tip ListColumns ce reprezintă toate
coloanele tabelului
- proprietatea ListRows returnează o colecţie de tip ListRows ce reprezintă toate rândurile
tabelului
- proprietatea DataBodyRange returnează un obiect de tip Range cu toate datele tabelului,
excluzând linia de antet
- proprietatea HeaderRowRange returnează un obiect de tip Range cu antetul tabelului
- proprietatea InsertRowRange returnează un obiect de tip Range cu rândurile inserate (dacă
există)
- proprietatea ShowTotals de tip boolean afişează sau ascunde rândul de total al tabelului
- proprietatea Range returnează un obiect de tip Range cu toate datele tabelului
- proprietatea Name returnează sau stabileşte numele tabelului
- proprietatea ShowAutoFilter , de tip boolean, afişează sau ascunde săgeţile filtrului tabelului
- proprietatea TotalRowRange returnează un obiect de tip Range cu rândul de total
- proprietatea AutoFilter permite filtrarea datelor tabelului
- proprietatea Sort permite sortarea datelor tabelului
- proprietatea TableStype stabileşte stilul aplicat tabelului
- metoda Delete şterge obiectul de tip tabel (inclusiv datele acestuia)

Numărul de rânduri dintr-un tabel poate fi aflat cu ajutorul proprietăţii Count a obiectului
ListRows, iar numărul de coloane cu aceeaşi proprietate a obiectului ListColumns.

Teodora Frunză 74/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Exemplu: Afişaţi numărul de rânduri şi coloane a tabelului din prima foaie. Scrieţi în celula M1
adresa rândului de antet a tabelului, iar în M2 adresa datelor tabelului, excluzând rândul de antet.
Ascundeţi săgeţile corespunzătoare filtrului.
Dim tabel As ListObject
Set tabel = Worksheets(1).ListObjects(1)
MsgBox “Tabelul are: ” & tabel.ListRows.Count & ” randuri”
MsgBox “Tabelul are: ” & tabel.ListColumns.Count & ” coloane”
Range("M1").Value = tabel.HeaderRowRange.Address
Range("M2").Value = tabel.DataBodyRange.Address
tabel.ShowAutoFilter = False

5.3 Inserarea unui rând


De multe ori lucrul cu tabele presupune introducerea de noi informaţii. Acest lucru înseamnă
introducerea de noi rânduri în tabel.
Un rând nou se introduce cu ajutorul metodei Add a obiectului ListRows.
Sintaxa:
randuri.Add(pozitie)
unde
randuri - un obiect de tip ListRows
pozitie – un număr întreg ce precizează unde va fi inserat noul rând; dacă nu e precizat, rândul va
fi inserat la sfârşit

Exemplul următor inserează un rând nou pe a doua poziţie:


Activesheet.ListObjects(1).ListRows.Add(2)

Exemplu: În prima foaie din fişier există un tabel ca cel de mai jos. Scrieţi procedura VBA de
inserare a unui rând nou la sfârşit. Completaţi acest rând cu următoarele date: (01/01/2009,
imprimanta, Danemarca, 200).
Private Sub IntroducereDate()
Dim tabel As ListObject
Dim rand As ListRow
Dim r As Range
Set tabel = Worksheets(1).ListObjects(1)
tabel.ListRows.Add
Set rand = tabel.ListRows(tabel.ListRows.Count)
Set r = rand.Range
r(1) = "01/01/2009"
r(2) = "imprimanta"
r(3) = "Danemarca"
r(4) = "200"
End Sub

5.4 Inserarea unei coloane cu valori calculate


O coloană se inserează similar cu un rând, folosind metoda Add a obiectului ListColumns.
Sintaxa:
coloane.Add(pozitie)
unde
coloane- un obiect de tip ListColumns

Teodora Frunză 75/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

pozitie – un număr întreg ce indică unde va fi inserată noua coloană; dacă nu e precizată, coloana
va fi inserată la sfârşit

Exemplul următor inserează o coloană nouă pe a treia poziţie:


Activesheet.ListObjects(1).ListColumns.Add(3)

Exemplu: În tabelul următor introduceţi la sfârşit o coloană cu titlul TVA, în care calculaţi tva-ul
ca 19% din Vanzari.
Private Sub ColoanaTVA()
Dim tabel As ListObject
Dim col_tva, col_vanzari As ListColumn
Dim r As Range
Dim formula As String
Set tabel = ActiveSheet.ListObjects(1)
tabel.ListColumns.Add
Set col_tva = tabel.ListColumns(tabel.ListColumns.Count)
Set col_vanzari =tabel.ListColumns(
tabel.ListColumns.Count - 1)
Set r = col_tva.Range
formula = "=" & tabel.Name & "[[#This Row],[" &
col_vanzari.Name & "]]*19% "
r(1).Value = "TVA"
r(2).FormulaR1C1 = formula
End Sub

5.5 Totalizarea datelor


Avem posibilitatea de a afişa la finalul tabelului un rând de total şi de a afişa pe acesta suma
(media, minimul, maximul, numărul) datelor de pe coloane. Pentru acest lucru trebuie să
efectuăm următoarele:
- afişare rând total: cu ajutorul proprietăţii ShowTotals a tabelului
- afişarea totalului pe coloane: pentru fiecare coloană pe care dorim să efectuăm totalizări,
apelăm la proprietatea TotalsCalculation a unui obiect de tip ListColumn. Proprietatea
poate avea una din următoarele valori:

Nume Valoare Descriere


xlTotalsCalculationNone 0 Nu face nici un calcul
xlTotalsCalculationSum 1 Suma
xlTotalsCalculationAverage 2 Media
xlTotalsCalculationCount 3 Numără celulele nevide.
xlTotalsCalculationCountNums 4 Numără celulele numerice
xlTotalsCalculationMin 5 Minimul
xlTotalsCalculationMax 6 Maximul
xlTotalsCalculationStdDev 7 Deviaţia standard
xlTotalsCalculationVar 8 Varianţa
xlTotalsCalculationCustom 9 Efectuează un total particularizat

Exemplu: În tabelul din exemplul anterior afişaţi rândul de total şi afişaţi suma valorilor pe
coloanele Vanzari şi TVA:

Private Sub RandTotal()


Dim tabel As ListObject

Teodora Frunză 76/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Set tabel = ActiveSheet.ListObjects(1)


tabel.ShowTotals = True
tabel.ListColumns(4).TotalsCalculation = xlTotalsCalculationSum
tabel.ListColumns(5).TotalsCalculation = xlTotalsCalculationSum
End Sub

5.6 Modificarea informaţiilor din tabel


Pentru a modifica informaţii din tabel, datele de pe rânduri sau coloane trebuie accesate. Acestea
vor fi reţinute în obiecte de tip Range, care sunt ulterior parcurse pentru testarea şi modificarea
datelor.
Ştergerea rândurilor sau coloanelor se realizează cu ajutorul metodei Delete a obiectelor ListRow
sau ListColumn, iar aplicarea unui stil tabelului implică apelarea proprietăţii TableStyle a
obiectului de tip ListObject şi precizarea numelui stilului între ghilimele.

Exemplu1: În tabelul din exemplul anterior, dorim să modificăm valoarea vanzărilor la 1000 în
data de 28.04.2006. Pentru acest lucru, reţinem coloanele cu data şi valoare în două obiecte de tip
ListColumn, iar domeniile corespunzătoare acestora le reţinem în obiecte de tip Range. Vom
parcurge domeniul cu date pentru a găsi rândul în care se găseşte valoarea de 28.04.2006 şi în
momentul în care am găsit rândul, vom scrie în coloana cu vânzările, în rândul găsit, valoarea de
1000.

Sub Modifica()
Dim tabel As ListObject
Dim col_data, col_vanzari As ListColumn
Dim r, modif As Range
Dim i As Integer
Set tabel = ActiveSheet.ListObjects(1)
Set col_data = tabel.ListColumns(1)
Set col_vanzari = tabel.ListColumns(tabel.ListColumns.Count - 1)
Set r = col_data.Range
Set modif = col_vanzari.Range
For i = 1 To r.Count
If r(i).Value = "4/28/2006" Then
modif(i).Value = "1000"
End If
Next i
End Sub

Exemplu2: Tabelului din exemplele anterioare, aplicaţi-i stilul TableStyleLight10. Ştergeţi coloana
5 şi rândul 3 din tabel.

Sub Modifica2()
Dim tabel As ListObject
Set tabel = ActiveSheet.ListObjects(1)
tabel.TableStyle = "TableStyleLight10"
tabel.ListColumns(5).Delete
tabel.ListRows(3).Delete
End Sub

Teodora Frunză 77/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

6. Grafice

6.1 Crearea unui grafic


Dim grafic As Chart
Set grafic = ActiveSheet.Shapes.AddChart.Chart
grafic.SetSourceData Source:=Range("'Stoc'!$A$1:$D$5")
grafic.ChartType = xlColumnClustered
grafic.PlotBy = xlRows

Un grafic Excel este o sumă de obiecte, fiecare cu proprietăţile şi metodele sale. Din această
cauză, lucrul cu grafice din VBA poate fi mai dificil şi, din păcate, macro-comenzile nu sunt de
ajutor în Excel 2007-2010.

6.2 Locaţia unui grafic


În Excel, un grafic se află:
 ca obiect pe o foaie de lucru, pe care se pot găsi şi alte grafice
 între-o foaie separată de grafic, ce conţine un singur grafic
Cele mai multe grafice sunt create manual, dar acest lucru este posibil şi cu ajutorul comenzilor
VBA. De asemenea, putem folosi VBA pentru a modifica graficele existente.

Pentru grafice aflate pe o foaie de lucru, pentru a ajunge la obiectul de tip grafic (Chart), ierarhia
este următoarea:
Application
Workbook
Worksheet
ChartObject
Chart

În cazul graficelor aflate pe o foaie separată de grafic, ierarhia de obiecte este:


Application
Workbook
Chart
În primul caz, în care graficul se găseşte pe o foaie de lucru, acesta (obiectul Chart) este
identificat cu ajutorul colecţiei de obiecte de tip grafic ChartObject. În cazul al doilea, în care
obiectul este pe o foaie de grafic, ierarhia este diferită, deoarece nu mai intervine nici obiectul
foaie de lucru (Worksheet) şi nici colecţia de obiecte de tip grafic (ChartObject), ci graficul este
identificat direct după numele foii de tip grafic.

Exemplu 1: Modificaţi titlul pentru graficul din foaia Sheet1 în „Vanzari”.


With WorkSheets("Sheet1").ChartObjects(1).Chart
.HasTitle = True
ChartTitle. Text = "Vanzari"
End With

Exemplu 2: Modificaţi titlul pentru graficul din foaia Chart1 de tip grafic.
With Charts("Chart")
.HasTitle = True
ChartTitle. Text = "Vanzari"
End With

Teodora Frunză 78/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

6.3 Crearea unui grafic aflat pe o foaie de lucru


În Excel 2007-2010, colecţia ChartObject este un caz special de obiecte de tip Shape. Din acest
motiv, ChartObject este membru al colecţiei Shapes, iar pentru a crea un grafic nou se foloseşte
metoda AddChart a colecţiei Shapes.
ActiveSheet.Shapes.AddChart
Metoda AddChart are următoarele argumente:
 Type – tipul graficului. Dacă argumentul este omis, tipul graficului va fi cel implicit –
coloană. Pentru a specifica un anumit tip, se folosesc constantele din enumerarea
XlChartType (de exemplu: xlArea, xlColumnClustered, xl3DColumn, xl3DPie,
xl3DPieExploded, xlLine, xlLineMarkers )
 Left – poziţia din stânga a graficului, în puncte. Dacă parametrul este omis, graficul va fi
centrat orizontal.
 Top – poziţia din partea de sus a graficului, în puncte. Dacă parametrul este omis, graficul
va fi centrat vertical.
 Width – lăţimea graficului, în puncte. Dacă parametrul este omis, dimensiunea va fi 354.
 Height – înălţimea graficului, în puncte. Dacă parametrul este omis, dimensiunea va fi 210.

Exemplu1: Creaţi cu datele din foaia activă un grafic de tip linie.


Sub CreeazaGrafic1()
Dim MyChart As Chart
Set MyChart = ActiveSheet.Shapes.AddChart(xlLineMarkers).Chart
End Sub

Folosirea metodei AddChart a colecţiei Shapes pentru crearea unui grafic este o variantă nouă,
introdusă în Excel 2007. Pentru a păstra compatibilitatea există şi metoda Add a colecţiei
ChartObject, care, însă, nu permite specificarea tipului graficului la crearea acestuia. În acest caz,
pentru va fi folosită proprietatea ChartType a obiectului de tip grafic, dacă dorim alt tip de grafic,
diferit faţă de cel implicit. În plus, argumentele Left, Top, Wisth, Height trebuie precizate.

Exemplu2: Creaţi cu datele din foaia activă un grafic de tip linie. Folosiţi varianta din versiunile
anterioare de Excel
Sub CreeazaGrafic2()
Dim MyChart As Chart
Dim DataRange As Range
Set DataRange = ActiveSheet.Range("A1:C7")
Set MyChart = ActiveSheet.ChartObjects.Add(10, 10, 354, 210).Chart
MyChart.SetSourceData Source:=DataRange
MyChart.ChartType = xlColumnClustered
End Sub

În acest exemplu am folosit proprietatea ChartType pentru a preciza tipul graficului. Mai mult,
am indicat şi domeniul cu datele sursă pentru grafic cu ajutorul metodei SetSourceData.

6.4 Crearea unui grafic pe o foaie de grafic


Pentru a crea un grafic pe o foaie de tip grafic vom folosi metoda Add a colecţiei Charts.
Argumentele metodei Add sunt:

 Before – precizează înaintea cărei foi va fi introdusă foaia de grafic; argument opţional

Teodora Frunză 79/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

 After - precizează după care foaie va fi introdusă foaia de grafic; argument opţional
 Count – indică numărul de foi introduse; argument opţional
 Type – tipul graficului – o constantă din enumerarea XlChartType; argument opţional

Exemplu3: Creaţi cu datele din foaia activă un grafic de tip linie într-o foaie nouă, aflată după
foaia Sheet1.
Sub CreeazaFoaieGrafic1()
Charts.Add after:=Worksheets("Sheet1")
ActiveChart.ChartType = xlLineMarkers
End Sub

Exemplu4: Creaţi cu datele din domeniul A1:C7 din foaia activă un grafic de tip coloană într-o
foaie nouă, aflată după foaia Sheet1.
Sub CreeazaFoaieGrafic()
Dim MyChart As Chart
Dim DataRange As Range
Set DataRange = ActiveSheet.Range("A1:C7")
Set MyChart = Charts.Add(, Worksheets("Sheet1"))
MyChart.SetSourceData Source:=DataRange
ActiveChart.ChartType = xlColumnClustered
End Sub

6.5 Activarea unui grafic din VBA


Un grafic se activează imediat la clic pe el. Din VBA activarea se face cu ajutorul metodei
Activate:
- Pentru graficul Chart1 aflat pe o foaie de lucru:
ActiveSheet.ChartObjects("Chart 1").Activate
sau
ActiveSheet.Shapes("Chart 1").Select
- Pentru graficul Chart1 aflat pe o foaie de grafic:
Sheets("Chart1").Activate
După activare, graficul poate fi referit cu ajutorul proprietăţii ActiveChart.
În VBA, modificarea unui grafic nu necesită activarea sa. Astfel, următoarele două exemple
conduc la acelaşi rezultat:
Sub ModificareTipGrafic1()
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.ChartType = xlBarClustered
End Sub

Sub ModificareTipGrafic2()
ActiveSheet.ChartObjects("Chart 1").Chart.ChartType = xlBarClustered
End Sub

În primul caz graficul a fost activat şi apoi a fost modificat tipul acestuia în bară, în timp ce în al
doilea caz modificarea s-a efectuată fără a activa graficul.

6.6 Mutarea unui grafic


Transformarea unui grafic din obiect într-o foaie de lucru în foaie de grafic se face cu ajutorul
metodei Location a obiectului de tip Chart. Metoda are două argumente:
 Where – unde va fi mutat graficul; argument necesar; o valoare din enumerarea
xlChartLocation, ce conţine constantele xlLocationAsNewSheet – foaie nouă de tip
Teodora Frunză 80/105
CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

grafic, xlLocationAsObject – obiect într-o foaie existentă, xlLocationAutomatic –


programul Excel controlează locaţia graficului
 Name - precizează numele foii de grafic sau numele foii de lucru în care va fi mutat
obiectul; argument opţional, cu excepţia cazului în care argumentul precedent este
xlLocationAsObject

Exemplu1: Mutaţi graficul din Sheet1 într-o foaie de grafic cu numele Gf1.
Sub Grafic1()
Sheets("Sheet1").ChartObjects(1).Chart.Location xlLocationAsNewSheet, "Gf1"
End Sub

Exemplu2: Mutaţi graficul din foaia de grafic Gf1 în foaia de lucru Sheet1.
Sub Grafic1()
Charts("Gf1").Location xlLocationAsObject, "Sheet1"
End Sub

6.7 Determinarea activării unui grafic


Un prim imbold în a stabili dacă un grafic este activ este verificarea valorii proprietăţii
TypeName pentru obiectul Selection:
TypeName(Selection) = "Chart"

Însă valoarea acestei expresii nu este aproape niciodată True. Dacă utilizatorul a dat clic în grafic,
selecţia poate fi dată de o parte a graficului (ex. o serie de date, titlul graficului, legenda etc).
Varianta corectă de a determina activarea unui grafic este de a determina dacă valoarea lui
ActiveChart este Nothing:
If ActiveChart Is Nothing Then
MsgBox "Selectaţi un grafic."
Exit Sub
Else
MsgBox ActiveChart.Name
End If

6.8 Ştergerea unui grafic


Pentru a şterge un grafic dintr-o foaie de lucru, trebuie să-i cunoaştem numele sau indexul.
Ştergerea se face cu ajutorul metodei Delete a colecţiei ChartObjects.
Următoarea comandă şterge graficul cu numele Chart1 aflat în foaia activă
ActiveSheet.ChartObjects("Chart 1").Delete
sau
ActiveSheet.Shapes("Chart 1").Delete

Pentru a şterge toate graficele de pe o foaie de lucru, folosiţi comanda:


ActiveSheet.ChartObjects.Delete
sau
ActiveSheet.Shapes.Delete

Pentru a şterge o foaie de grafic trebuie să-i cunoaştem numele sau indexul. Comanda următoare
şterge foaia de grafic cu numele Chart1:
Charts("Chart1").Delete
Ştergerea tuturor foilor de grafic se face cu ajutorul comenzii:
ActiveWorkbook.Charts.Delete
Ştergerea foilor de grafic conduce la apariţia, pentru utilizator, a ferestrei următoare:

Teodora Frunză 81/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

în care utilizatorul trebuie să confirme ştergerea. Dacă nu doriţi ca utilizatorului să-i apară
fereastra de confirmare, folosiţi următoarea secvenţă de comenzi:
Application.DisplayAlerts = False
ActiveWorkbook.Charts("Chart1")..Delete
Application.DisplayAlerts = True

6.9 Formatarea graficelor cu ajutorul VBA


Formatarea graficelor direct în Excel, fără VBA, presupune,de obicei, lucrul cu următoarele
etichete specifice:
 Design /Chart Layouts
 Design /Chart Styles
 Layout / Labels
 Layout / Axes
 Layout / Background
Observaţie: Dacă înregistraţi o macro-comandă pentru formatarea graficelor, acestea nu se
păstrează în Excel 2007-2010.

Stabilirea modului de afişare (layout) se face cu ajutorul metodei Apply Layout a unui obiect de
tip Chart. Metoda are două argumente
 Layout – specifică numărul modului de afişare, de la 1 la 10.
 ChartType – specifică tipul graficului, una din valorile enumerării XlChartType;
argument opţional
Exemplu:
ActiveChart.ApplyLayout 10

Stabilirea stilului unui grafic se face cu ajutorul proprietăţii ChartStyle a unui obiect de tip Chart.
Proprietatea ia valori între 1 şi 48.
Exemplu:
ActiveChart.ChartStyle = 30
Metoda ClearToMatchStyle elimină toate formatările aplicate de utilizator unui grafic. Această
metodă se foloseşte împreună cu ChartStyle pentru a asigura aplicarea standard a stilului indicat.

Metoda SetElement controlează aspectul majorităţii elementelor unui grafic. Metoda are un
singur argument. Valoarea argumentului va fi una din cele 120 constante descriptive ale
enumerării MsoChartElementType.
Exemplu: Stabiliţi ca pentru graficul activ titlul să fie afişat în partea de sus, iar legenda să nu fie
afişată.
ActiveChart.SetElement msoElementChartTitleAboveChart
ActiveChart.SetElement msoElementLegendNone

Exemplu: Pentru tabelul cu stocurile de produse, afişat mai jos, creaţi în VBA un grafic formatat,
ca cel din imagine.

Teodora Frunză 82/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Sub creaza_grafic()
Dim grafic1 As Chart
' creare grafic
Set grafic1 = ActiveSheet.Shapes.AddChart.Chart
' datele sursă pentru grafic
grafic1.SetSourceData Source:=Range("'Stoc'!$A$1:$A$5,'Stoc'!$E$1:$E$5")
' lăţimea şi înălţimea graficului
grafic1.ChartArea.Width = 400
grafic1.ChartArea.Height = 300
' tipul graficului
grafic1.ChartType = xlPieExploded
' stilul graficului
grafic1.ChartStyle = 26
' stabilirea unei culori ca fundal pentru titlu
grafic1.ChartTitle.Format.Fill.ForeColor.RGB = RGB(220, 230, 242)
' aplicarea unui aspect tridimensional graficului
With grafic1.ChartArea.Format.ThreeD
.Visible = msoTrue
.BevelTopType = msoBevelDivot
.BevelTopDepth = 12
.BevelTopInset = 32
End With
' stabilirea titlului graficului
grafic1.ChartTitle.Text = "Situatia stocurilor pe Trimestrul 1"
' rotirea graficului cu 45 de grade
grafic1.Rotation = 45
' eliminarea legendei
grafic1.Legend.Clear
' afişarea etichetelor de date şi a procentului
grafic1.ApplyDataLabels xlDataLabelsShowLabelAndPercent
End Sub

6.10 Parcurgerea tuturor graficelor


În multe cazuri e necesară efectuarea anumitor operaţii pe toate graficele. De exemplu,
formatarea similară a mai multor grafice aflate pe aceeaşi foaie de lucru poate fi efectuată cu
ajutorul VBA.

Teodora Frunză 83/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Exemplu1: Pentru toate graficele din foaia activă stabiliţi următoarele proprietăţi:
- tipul graficului – linie cu marcatori
- modul de afişare (layout) – nr. 3
- stilul graficului – nr. 12
- fiecare grafic să aibă titlul afişat deasupra, să nu fie afişată legenda şi nici titlurile de pe axele
de valori şi categorie
- axa valorilor să fie între 0 şi 1000

Sub FormateazaToateGraficele1()
Dim ChtObj As ChartObject
For Each ChtObj In ActiveSheet.ChartObjects
With ChtObj.Chart
.ChartType = xlLineMarkers
.ApplyLayout 3
.ChartStyle = 12
.ClearToMatchStyle
.SetElement msoElementChartTitleAboveChart
.SetElement msoElementLegendNone
.SetElement msoElementPrimaryValueAxisTitleNone
.SetElement msoElementPrimaryCategoryAxisTitleNone
.Axes(xlValue).MinimumScale = 0
.Axes(xlValue).MaximumScale = 1000
End With
Next ChtObj
End Sub

Exemplu2: Rezolvaţi problema de mai sus în varianta în care aplicaţi aceeaşi formatare tuturor
foilor de tip grafic.

Sub FormateazaToateGraficele2()
Dim cht as Chart
For Each cht In ActiveWorkbook.Charts
With cht
.ChartType = xlLineMarkers
.ApplyLayout 3
.ChartStyle = 12
.ClearToMatchStyle
.SetElement msoElementChartTitleAboveChart
.SetElement msoElementLegendNone
.SetElement msoElementPrimaryValueAxisTitleNone
.SetElement msoElementPrimaryCategoryAxisTitleNone
' stabilirea valorilor minime şi maxime pentru axa valorilor
.Axes(xlValue).MinimumScale = 0
.Axes(xlValue).MaximumScale = 1000
End With
Next cht
End Sub

Exemplu3: Stabiliţi toate graficele din foaia activă astfel încât acestea să fie de aceeaşi
dimensiune, aranjate pe pe două coloane.

Sub AliniereGrafice()
Dim W As Long, H As Long

Teodora Frunză 84/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Dim TopPosition As Long, LeftPosition As Long


Dim ChtObj As ChartObject
Dim i As Long
W = 300
H = 200
TopPosition = 100
LeftPosition = 20
For i = 1 To ActiveSheet.ChartObjects.Count
With ActiveSheet.ChartObjects(i)
.Width = W
.Height = H
.Left = LeftPosition + ((i - 1) Mod 2) * W
.Top = TopPosition + Int((i - 1) / 2) * H
End With
Next i
End Sub

6.11 Modificarea datelor utilizate de grafic


Exemplele de până acum au folosit proprietatea SourceData pentru a preciza domeniul de valori
folosit pentru grafic.
Datele folosite pentru fiecare serie a graficului sunt determinate de funcţia SERIES. De fiecare
dată când selectaţi într-un grafic o serie de date, formula aceasta apare în bara de formule.
Funcţia SERIES nu poate fi folosită într-o celulă Excel, însă argumentele sale pot fi editate.
Funcţia SERIES are următoarea sintaxă:
=SERIES(series_name, category_labels, values, order, sizes)
Argumentele funcţiei sunt:
 series_name – referinţa la o celulă ce conţine numele seriei, folosit în legendă. Dacă graficul
are o singură serie, numele va fi folosit ca titlu pentru grafic. Numele seriei poate fi şi un
şir de caractere scris între ghilimele. Dacă numele este omis, Excel va crea un nume
implicit – Series 1, Series 2 etc.
 category_labels – referinţa la un domeniu de celule ce conţin etichetele pentru axa
categoriilor. Dacă este omis, Excel va introduce numere întregi începând cu 1. Pentru un
grafic XY, acest argument precizează valorile X. Dacă domeniul este discontinuu,
adresele trebuie separate de virgule şi incluse între paranteze. Etichetele pot fi şi şiruri de
texte separate de virgulă şi incluse între acolade.
 values – referinţa la un domeniu ce conţine valori ale seriei. Pentru un grafic XY, acest
argument indică valorile Y. Dacă domeniul este discontinuu, adresele trebuie separate de
virgule şi incluse între paranteze. Valorile pot fi şi constante separate de virgulă şi incluse
între acolade.
 order – un număr întreg ce specifică ordinea de afişare a seriei. Acest argument e relevant
doar dacă pe grafic sunt mai multe serii de date. Intr-un grafic coloană, acest argument
indică ordinea de afişare a coloanelor. Nu pot fi folosite adrese de celule pentru a preciza
valoarea argumentului.
 Sizes – doar pentru grafice bubble chart – referinţa la un domeniu ce conţine valori
pentru dimensiunea bulelor. Dacă domeniul este discontinuu, adresele trebuie separate de
virgule şi incluse între paranteze. Valorile pot fi şi constante separate de virgulă şi incluse
între acolade.
Domeniile folosite de funcţia SERIES sunt totdeauna absolute şi includ numele foii de lucru.
Exemple:
=SERIES(Stoc!$A$2;Stoc!$B$1:$D$1; Stoc!$B$2:$D$2;1)
=SERIES(Stoc!$A$2;Stoc!$B$1:$D$1;{20; 15; 8};2)
=SERIES( , , (Sheet1!$B$2:$B$3,Sheet1!$B$5:$B$7), 1)
Teodora Frunză 85/105
CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

=SERIES(Sheet1!$B$1, , budget.xlsx!date_importante,1)
Pentru un obiect de tip Series, proprietatea Values corespunde cu al treilea argument al funcţiei
Series prezentate mai sus, iar proprietatea XValues corespunde cu al doilea argument

Exemplu1: Într-o foaie Excel se află un sondaj de opinie al clienţilor. Datele de la prima întrebare
sunt folosite pentru a crea un grafic direct în Excel. Pentru a fi cât mai interactiv, graficul ar
trebui să reprezinte datele de pe linia selectată de utilizator.

Pentru a verifica dacă utilizatorul a ales alt rând, evenimentul captat este SelectionChange pentru
foaia de lucru în care se află tabelul şi graficul:
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Call UpdateChart
End Sub

Codul scris în modul, pentru actualizarea graficului este:


Sub ActualizareGrafic ()
Dim ChtObj As ChartObject
Dim UserRow As Long
Set ChtObj = ActiveSheet.ChartObjects(1)
'rândul selectat de utilizator este rândul curent
UserRow = ActiveCell.Row
'dacă rândul selectat este mai mic decât 4 sau este gol, atunci graficul va fi ascuns
If UserRow < 4 Or IsEmpty(Cells(UserRow, 1)) Then
ChtObj.Visible = False
Else
'valorile graficului sunt cele de pe coloanele 2-6 ale rândului curent
ChtObj.Chart.SeriesCollection(1).Values = _
Range(Cells(UserRow, 2), Cells(UserRow, 6))
'titlul graficului se află în prima celulă a rândului curent
ChtObj.Chart.ChartTitle.Text = Cells(UserRow, 1).Text
ChtObj.Visible = True
End If
End Sub

Teodora Frunză 86/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Exemplu2: Cu datele din tabelul de mai jos creaţi un grafic coloană care să evidenţieze valorile
peste medie şi sub medie. Valorile sub medie să fie reprezentate cu coloane în jos.

Sub creeaza_si_formateaza_grafic()
Dim grafic As Chart
Dim seria As Series
Dim axaX, axaY As Axis
Dim i As Integer, j As Integer
Dim media, sumaMediilor As Double

Set grafic = ActiveSheet.Shapes.AddChart.Chart


grafic.SetSourceData Source:=Range("'Stoc'!$A$1:$D$5")
grafic.ChartType = xlColumnClustered
grafic.PlotBy = xlRows

sumaMediilor = 0
For Each seria In grafic.SeriesCollection
'calculul mediei pe fiecare serie si adunarea in variabila sumaMediilor
sumaMediilor = sumaMediilor + WorksheetFunction.Average(seria.Values)
Next seria
'calculul mediilor tuturor datelor din serii
media = sumaMediilor / grafic.SeriesCollection.Count

Set axaX = grafic.Axes(xlCategory)


Set axaY = grafic.Axes(xlValue)

With axaX
'afisare titlu pentru axa X
.HasTitle = True
.AxisTitle.Text = "Trimestrul 1"
'etichetele axei X sunt scrise in partea de jos a graficului
.TickLabelPosition = xlTickLabelPositionLow
'afisare linii de grila majore pentru axa X
.HasMajorGridlines = True
'formatare axa X cu dimensiune medie si culoare rosie
.Border.Weight = xlMedium
.Border.Color = RGB(255, 0, 0)
End With

With axaY
'afisare titlu pentru axa Y
.HasTitle = True

Teodora Frunză 87/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

.AxisTitle.Text = "Stoc"
'axa X va intersecta axa Y in valoarea media
.CrossesAt = media
'afisare linii de grila majore pentru axa Y
.HasMajorGridlines = True
'valoarea minima indicata pentru scara Y este 0
.MinimumScale = 0
'valoarea maxima indicata pentru scara Y este maximul valorilor domeniului, rotunjit la
'10
.MaximumScale = _
WorksheetFunction.RoundUp(WorksheetFunction.Max(Range("B2:D5")), -1)
End With

'afisarea si formatarea tilului graficului


grafic.HasTitle = True
grafic.ChartTitle.Text = "Situatia stocurilor pe trimestrul 1"
grafic.ChartTitle.Characters.Font.Size = 16

End Sub

6.12 Exportul unui grafic în format imagine


În multe cazuri e utilă exportarea unui grafic într-un fişier de tip imagine. O variantă este
folosirea capturii de ecran, o altă variantă fiind cea de a scrie un simplu cod VBA.
Metoda Export a obiectului Chart ne ajută să salvăm un grafic într-un fişier imagine. Metoda are
următoarele argumente:
 Filename – numele fişierului de tip String
 FilterName – formatul fişierului; argument opţional
 Interactive – are valoarea True dacă dorim afişarea unei ferestre de dialog pentru salvare şi
False în caz contrar; valoarea implicită este False

Exemplu: Exportaţi graficul activ în fişierul grafic.gif.


ActiveChart.Export FileName:= "C:\grafic.gif", FilterName:="GIF"

Fişierele imagine pot fi GIF, JPEG sau PNG.


Observaţie: metoda Export poate eşua în caz că programul Excel nu e instalat cu filtrele de
export grafic.

6.13 Evenimente asociate graficelor


În Excel, graficele au următoarele evenimente asociate:
Eveniment Când se declanşează evenimentul
Activate Evenimentul apare atunci când un grafic este activat.
BeforeDoubleClick Apare la dubluclic pe un grafic aflat pe o foaie de lucru. Acest eveniment
apare înainte de acţiunea dubluclic.
BeforeRightClick Apare la clic dreapta pe un grafic aflat pe o foaie de lucru. Acest eveniment
apare înainte de acţiunea clic dreapta.
Calculate Apare atunci când date noi sau modificate sunt afişate pe grafic.
Deactivate Un grafic este deselectat.
DragOver Apare atunci când un domeniu de celule este dus (acţiunea drag) deasupra
unui grafic.

Teodora Frunză 88/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

DragPlot Apare atunci când un domeniu de celule este dus şi lăsat prin tragere
(acţiunea drag and drop) deasupra unui grafic.
MouseDown Apare atunci când butonul mouse-ului este apăsat deasupra unui grafic.
MouseMove Apare atunci când un indicatorul mouse-ului este deplasat deasupra unui
grafic.
MouseUp Apare atunci când butonul mouse-ului este eliberat deasupra unui grafic.
Resize Apare atunci când obiectul grafic este redimensionat.
Select Apare atunci când un element al graficului este selectat.
SeriesChange Apare atunci când valorile afişate de grafic se modifică.

Exemplu1: Afişarea unui ChartTip.


Pentru datele din tabelul de mai jos este creat un grafic tip coloană. Pe grafic este desenată o
casetă de text în care vor apare informaţii aflate în celulele foii de lucru, atunci când utilizatorul
deplasează mouse-ul deasupra coloanelor graficului.

Private Sub Chart_MouseMove(ByVal Button As Long, ByVal Shift As Long, _


ByVal × As Long, ByVal Y As Long)
Dim ElementId As Long
Dim arg1 As Long, arg2 As Long
Dim NewText As String
On Error Resume Next

ActiveChart.GetChartElement X, Y, ElementId, arg1, arg2


If ElementId = xlSeries Then
NewText = Sheets("Sheet1").Range("Comments").Offset(arg2, arg1)
Else
NewText = ""
End If
ActiveChart.Shapes(1).TextFrame.Characters.Text = NewText
End Sub

Această procedură monitorizează toate deplasările mouse-ului deasupra unui grafic.


Coordonatele mouse-ului sunt conţinute în variabilele X şi Y care sunt pasate procedurii prin
argumentele sale. Elementul principal în această procedură este metoda GetChartElement. Dacă
valoarea lui ElementID este xlSeries, atunci indicatorul mouse-ului este deasupra unei serii de
date. Variabila NewText conţine informaţii din anumite celule, informaţii care vor apare ca text
în căsuţa de text.

Teodora Frunză 89/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Exemplu2: Derularea datelor unui grafic.


În exemplul următor tabelul are peste 5219 de rânduri cu date culese în 20 de ani pentru două
produse. În fişier sunt definite mai multe nume:
 Start – numele celulei F1
 NrZile – numele celulei F2
 Pas – numele celulei F3
 Date – numele formulei: =OFFSET(Sheet1!$A$1,Start,0,NrZile,1)
 ProdA – numele formulei: =OFFSET(Sheet1!$B$1,Start,0,NrZile,1)
 ProdB – numele formulei: =OFFSET(Sheet1!$C$1,Start,0,NrZile,1)
Formulele de mai sus indică domeniile pentru Data, Produs A şi Produs B între rândul egal cu
valoarea start şi rândul egal cu valoarea nrzile.

Fiecare funcţie SERIES codul scris pentru grafic foloseşte aceste nume:
 seria pentru Produsul A are formula:
=SERIES(Sheet1!$B$1;'grafic_derulat.xlsm'!Date;' grafic_derulat.xlsm'!ProdA;1)
 seria pentru Produsul B are formula:
=SERIES(Sheet1!$C$1; 'grafic_derulat.xlsm'!Date; 'grafic_derulat.xlsm'!ProdB;2)
 valorile de pe axa X au formula:
='grafic_derulat.xlsm'!Date
Folosirea numelor permite utilizatorului folosirea unor valori pentru Start şi NrZile şi afişarea
datelor corespunzătoare pe grafic.
Codul VBA care permite derularea graficului este activat cu ajutorul butonului Start/Stop.

Public AnimatieInDerulare As Boolean

Sub AnimateChart()
Dim ValStart As Long, domeniu As Long
If AnimatieInDerulare Then
AnimatieInDerulare = False
End
End If
AnimatieInDerulare = True
ValStart = Range("Start")
For domeniu = ValStart To 5219 - Range("NrZile") Step Range("Pas")
Range("Start") = domeniu

Teodora Frunză 90/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

DoEvents
Next domeniu
AnimatieInDerulare = False
End Sub

Procedura AnimateChart foloseşte variabila publică AnimatieInDerulare pentru a vedea dacă


derularea trebuie oprită sau pornită. Derularea rezultă din ciclul în care domeniul valorilor pentru
serii şi valorile axei X sunt modificate (datorită modificării datei de start). Astfel graficul este
actualizat continuu cu o nouă dată de start. Pasul determină în acest caz cât de repede (valoare
mare) va fi derulat graficul.

Teodora Frunză 91/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

7. Tabele pivot
Tabelele pivot sunt o componentă esenţial în lucrul cu programul Excel. Acestea au apărut în
Excel 5 şi de atunci au fost dezvoltate în versiunile următoare. Tabelele pivot reprezintă un
element esenţial în centralizarea datelor.

7.1 Noutăţi aduse tabelelor pivot în Excel 2007-2010


În Excel 2007-2010 au fost aduse următoarele îmbunătăţiri în lucrul cu tabelele pivot:
 Pe un tabel pivot pot fi introduse acum mai multe rânduri şi coloane, mai multe câmpuri
(16000, faţă de 255 în Excel 2003)
 Posibilitatea de a aplica un filtru pe etichete (de ex. afişarea doar a etichetelor ce conţin
un anume cuvânt)
 Posibilitatea de a aplica un filtru valorilor (de ex. afişaţi doar produsele care au vânzări
mai mari de 100000)
 Posibilitatea de a efectua formatare condiţionată pe datele tabelului pivot (de exemplu
afişarea barelor de date)
 Persistenţa formatărilor pentru graficele pivot – acestea îşi păstrează formatările şi după
actualizare (refresh)
 Stiluri – a fost creată o galerie de stiluri pentru a face ca un tabel pivot să arate foarte
bine.
Observaţie: tabelele pivot din Excel 2007 nu sunt compatibile cu versiunile anterioare de Excel.
În cazul în care creaţi tabele pivot pentru alţii, folosiţi salvarea în format compatibil versiunii
Excel 97-2003.

7.2 Crearea unui tabel pivot cu ajutorul unei macrocomenzi


Exemplu: Într-o foaie de lucru Excel avem un tabel cu datele referitoare la vânzările pe diverse
categorii în mai multe ţări. Tabelul conţine următoarele coloane: Data, Categoria, Tara si Vanzari.

Pentru crea un tabel pivot simplu, înregistrăm o macrocomandă cu ajutorul căreia construim un
tabel pivot care va următoarea structură:
 Tara: câmp în zona de pagină (PageField)
 Categoria: câmp în zona de rând (RowField)
 Vanzari: câmp în zona de valori (DataField)

Sub MacroPivot()
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Echipamente!R1C1:R53C4", Version:=xlPivotTableVersion10).CreatePivotTable _
TableDestination:="Sheet3!R3C1", TableName:="PivotTable1", DefaultVersion _

Teodora Frunză 92/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

:=xlPivotTableVersion10
Sheets("Sheet1").Select
Cells(3, 1).Select
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Categoria")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Tara")
.Orientation = xlPageField
.Position = 1
End With
ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
"PivotTable1").PivotFields("Vanzari"), "Sum of Vanzari", xlSum
ActiveSheet.PivotTables("PivotTable1").DisplayFieldCaptions = False
End Sub

Dacă executaţi acest macro, va produce probabil o eroare. Observaţi că numele foii de lucru nou
create este Sheet1, iar dacă aceasta există deja, macro-ul va da o eroare.
Examinând codul VBA scris de macrocomandă, se observă câteva elemente utile:
 PivotCaches – colecţia de obiecte PivotCache dintr-un fişier (sursa de datele utilizată de
tabelul pivot se păstrează într-o zonă cache; o dată creată această zonă, şi alte tabele pivot
o pot accesa)
 PivotTables – colecţia de obiecte PivotTable dintr-o foaie de lucru
 PivotFields – colecţia de câmpuri a unui obiect PivotTable
 PivotItems – colecţia de elemente individuale din cadrul unui câmp
 CreatePivotTable – o metodă care creează un tabel pivot folosind datele din cache
 AddDataField – o metodă de a adăuga câmpuri în zona de date (Values) a tabelului pivot

7.3 Simplificarea codului scris de macrocomanda


Codul scris de macrocomandă poate fi simplificat astfel încât să fie mai uşor de înţeles şi mai
puţin sensibil la erori:

Sub CreeazaPivot()
Dim PTCache As PivotCache
Dim PT As PivotTable
' creeaza cache
Set PTCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:=Range("A1").CurrentRegion)
'insereaza o noua foaie pentru pivot
Worksheets.Add
'creeaza tabelul pivot
Set PT = PTCache.CreatePivotTable(TableDestination:=ActiveSheet.Range("A3"), _
DefaultVersion:=xlPivotTableVersion12)
'alta varianta de a crea tabelul pivot
'Set PT = ActiveSheet.PivotTables.Add(PivotCache:=PTCache, _
'TableDestination:=Range("A3"), DefaultVersion:=xlPivotTableVersion12)
'introduce campuri pe pivot
With PT
.PivotFields("Tara").Orientation = xlPageField
.PivotFields("Tara").Position = 1
.PivotFields("Categoria").Orientation = xlRowField
.PivotFields("Categoria").Position = 1
Teodora Frunză 93/105
CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

.AddDataField PT.PivotFields("Vanzari"), "Total vanzari", xlSum


'dezactiveaza afisarea denumirii campurilor
.DisplayFieldCaptions = False
End With
End Sub

Tabelul pivot rezultat este următorul:

7.4 Zona cache a pivotului (PivotCaches)


Zona cache a pivotului este o zonă tampon (buffer) în care se păstrează datele. Acţionează ca un
canal de comunicaţie între sursa de date şi tabelul pivot. În Excel 2007-2010 se pot crea zone
cache cu ajutorul metodei Create a colecţiei PivotCaches. Această zonă poate fi accesată de mai
multe tabele pivot care folosesc aceeaşi sursă de date. Acest lucru este mai eficient decât forţarea
ca fiecare tabel pivot să aibă propria sursă de date. Crearea unui tabel pivot pe o zonă cache
poate fi efectuată cu ajutorul metodei CreatePivotTable a unui obiectului de tip PivotCache

În exemplul anterior zona cache este creată cu ajutorul metodei Create a colecţiei PivotCaches.
Tabelul pivot este creat cu ajutorul metodei CreatePivotTable a colecţiei PivotCaches. Ultima
secţiune de cod foloseşte obiectul PivotTables şi adaugă câmpuri în zona de pagină, de rând şi
zona de date.

7.5 Colecţia PivotTables


O altă variantă de a crea tabele pivot este metoda Add a colecţiei PivotTables. Dacă zona cache
este deja creată şi dorim crearea unui al doilea tabel pivot, codul este următorul:

Sub AdaugaPivot()
Dim PTCache As PivotCache
Dim PT As PivotTable
'accesarea PivotCache-ului existent
Set PTCache = ActiveWorkbook.PivotCaches(1)
'adaugarea unui nou pivot, în aceeaşi foaie
Set PT = ActiveSheet.PivotTables.Add(PivotCache:=PTCache, _
TableDestination:=Range("D3"))
With PT
.PivotFields("Tara").Orientation = xlRowField
.PivotFields("Tara").Position = 1
.PivotFields("Categoria").Orientation = xlRowField
.PivotFields("Categoria").Position = 2
.AddDataField PT.PivotFields("Vanzari"), "Total vanzari", xlSum
'dezactiveaza afisarea denumirii campurilor
.DisplayFieldCaptions = False
End With
End Sub
Teodora Frunză 94/105
CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

7.6 Câmpurile tabelului pivot


Antetul unei coloane din tabelul cu datele sursă poartă numele de câmp. Atunci când câmpurile
sunt folosite în tabelul pivot, ele devin obiecte de tip PivotField şi fac parte din colecţia
PivotFields a obiectului PivotTable. Colecţia PivotFields conţine toate câmpurile sursei de date,
precum şi câmpurile calculate, adăugate de utilizator, nu doar câmpurile vizibile pe tabelul pivot.
Adăugarea câmpurilor pe tabelul pivot se poate face prin două metode:
 folosind metoda AddFields a obiectului PivotTable
 folosind metoda PivotFields şi stabilind prin proprietatea Orientation locul de dispunere
a câmpului
Exemplu: Următoarele două rânduri de cod realizează acelaşi lucru şi anume adăugarea câmpului
”Categoria” în zona de rând a tabelului pivot.
ActiveSheet.PivotTables(1).AddFields RowFields:=”Categoria”, AddToTable:=True
ActiveSheet.PivotTables(1).PivotFields("Categoria").Orientation = xlRowField
Cu ajutorul metodei AddFields pot fi introduse mai multe câmpuri de rând, coloană sau pagină.
Aceste câmpuri înlocuiesc câmpurile existente pe tabelul pivot dacă parametrul AddToTable nu e
stabilit la True. Metoda AddFields nu poate fi folosită pentru a adăuga sau înlocui câmpuri în
zona de date.
Dacă mai multe câmpuri sunt în aceeaşi zonă, proprietatea Position a obiectului PivotField
defineşte ierarhia în care acestea vor apărea.
Exemplu: În codul anterior, câmpul Tara si Categoria erau ambele dispuse în zona de rând, iar
afisarea acestora a fost stabilită cu valorile 1 şi respectiv 2 a proprietăţii Position.
.PivotFields("Tara").Position = 1
.PivotFields("Categoria").Position = 2

7.7 Modificarea funcţiei afişate de tabelul pivot


Pentru un tabel pivot creat deja, modificarea funcţiei din zona de date se face cu ajutorul
proprietăţii function a obiectului corespunzător de tip PivotField. Formatarea datelor afişate se
poate efectua cu ajutorul proprietăţii NumberFormat.

Sub ModificaFunctia()
Dim PTCache As PivotCache
Dim PT As PivotTable
'accesarea PivotCache-ului existent
Set PTCache = ActiveWorkbook.PivotCaches(1)
'accesarea tabelui pivot existent, caruia dorim sa-i modificam functia
Set PT = ActiveSheet.PivotTables("PivotTable4")
With PT.DataFields("Total vanzari")
.Caption = "Media vanzarilor"
.Function = xlAverage
.NumberFormat = "0.00"
End With
End Sub

Observaţi că am modificat numele câmpului din Total vanzari în Media vanzarilor. Dacă vom
modifica ulterior această funcţie, accesul la acest câmp se va face cu noul nume - Media
vanzarilor.
Funcţiile disponibile în tabelul pivot sunt următoarele:
Funcţia Descriere
xlAverage Media
xlCount Numărare

Teodora Frunză 95/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

xlCountNums Numărare valori numerice


xlMax Maximum
xlMin Minimum
xlProduct Produs
xlStDev Deviaţia standard a unui eşantion
xlStDevP Deviaţia standard a unei populaţii
xlSum Suma
xlUnknown Nu e specificată nici o funcţie
xlVar Variaţia, bazată pe un eşantion
xlVarP Variaţia, bazată pe o populaţie

7.8 Câmpuri calculate


În tabelul pivot se pot introduce câmpuri noi, ca rezultat al unor calcule ce pot implica şi
câmpurile existente. De exemplu, dorim să introducem în tabelul pivot un câmp calculat cu
numele Profit iar formula de calcul este =10%*Vanzari.

Codul următor creeaza un tabel pivot pe o foaie nouă şi afişează vânzările totale şi profitul pe
fiecare ţară.

Sub PivotCampuriCalculate()

Dim PTCache As PivotCache


Dim PT As PivotTable
'accesarea PivotCache-ului existent
Set PTCache = ActiveWorkbook.PivotCaches(1)
Worksheets.Add
'adaugarea unui nou pivot
Set PT = ActiveSheet.PivotTables.Add(PivotCache:=PTCache, _
TableDestination:=Range("A3"))
With PT
With .PivotFields("Tara")
.Orientation = xlRowField
.Position = 1
End With
With .PivotFields("Vanzari")
.Orientation = xlDataField
.Position = 1
.NumberFormat = "#,### €"
.Caption = "Total vanzari"
End With
' calculeaza profitul (sterge campul daca acesta exista deja)
On Error Resume Next
.PivotFields("Profit").Delete

Teodora Frunză 96/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

On Error GoTo 0
.CalculatedFields.Add Name:="Profit", Formula:="=10%*Vanzari"
' afiseaza profitul
With .PivotFields("Profit")
.Orientation = xlDataField
.Position = 2
.Caption = "Profit 10% din vanzari"
End With
'dezactiveaza afisarea denumirii campurilor
.DisplayFieldCaptions = False
End With
End Sub

Observaţie: O dată ce aţi calculat câmpul Profit, acesta este adăugat în cache şi poate fi folosit şi
în alte tabele pivot. Dacă doriţi să rulaţi de mai multe ori codul de mai sus, trebuie să ne asigurăm
că vom şterge câmpul Profit anterior (în caz contrar va genera o eroare, acesta existând deja) şi
apoi îl vom crea din nou. Instrucţiunea On Error asigură faptul că secvenţa de instrucţiuni va
continua în cazul în care câmpul Profit nu există.

7.9 Elemente ale câmpurilor tabelului pivot


Fiecare obiect de tip PivotField are o colecţie PivotItems asociată. Accesarea se face cu ajutorul
metodei PivotItems a obiectului PivotField. Această colecţie conţine valori unice ale câmpurilor.
De exemplu, câmpul Tara are ca valori unice: Anglia, Belgia, Danemarca, Franta, Germania,
Irlanda, Italia, Norvegia, Olanda, Portugalia, Spania. Aceste valori constituie colecţia PivotItems
pentru câmpul Tara.

7.10 Gruparea datelor


Datele pot fi grupate funcţie de elementele câmpurilor. De exemplu vânzările sunt coordonate pe
zone:
Zona 1: Anglia, Irlanda, Norvegia
Zona 2: Franta, Spania, Portugalia
Zona 3: Olanda, Belgia, Danemarca
Zona 4: Germania, Italia
O altă grupare utilă este dată de gruparea după data calendaristică şi afişarea totalului vânzărilor
din fiecare lună. Rezultatul grupării dorim să fie următorul:

În mod obişnuit, în Excel gruparea datelor poate fi efectuată manual, prin selecţia elementelor ce
vor fi grupate şi apelul comenzii Group din meniul rapid. În cazul grupării datelor calendaristice
sau a datelor numerice, comanda Group poate fi apelată direct, fără a mai selecta datele.

Codul VBA scris pentru gruparea datelor este următorul:

Teodora Frunză 97/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Sub GrupareDate()
Dim PTCache As PivotCache
Dim PT As PivotTable
Dim Rng As Range
Dim PF As PivotField
Dim Zona1, Zona2, Zona3, Zona4 As Range
'crearea zona cache noua, pentru a nu afecta celelalte tabele pivot
Set PTCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:=Range("A1").CurrentRegion)
Worksheets.Add
'adaugarea unui nou pivot
Set PT = ActiveSheet.PivotTables.Add(PivotCache:=PTCache,
TableDestination:=Range("A3"))
'definire cu pivot
With PT
.PivotFields("Data").Orientation = xlRowField
.PivotFields("Tara").Orientation = xlColumnField
.AddDataField .PivotFields("Vanzari"), "Total vanzari", xlSum
'localizarea primei valori din campul Data
Set Rng = .PivotFields("Data").DataRange.Cells(1, 1)
'gruparea datelor dupa luna
Rng.Group Start:=True, End:=True, Periods:=Array(False, False, False, False, _
True, False, False)
Set PF = .PivotFields("Tara")
Set Zona1 = Application.Union(PF.PivotItems("Anglia").DataRange.Cells(0, 1), _
PF.PivotItems("Irlanda").DataRange.Cells(0, 1), _
PF.PivotItems("Norvegia").DataRange.Cells(0, 1))
Zona1.Group
With .PivotFields("Tara2").PivotItems("Group1")
.Caption = "Zona 1"
.Position = 1
End With
Set Zona2 = Application.Union(PF.PivotItems("Franta").DataRange.Cells(0, 1), _
PF.PivotItems("Spania").DataRange.Cells(0, 1), _
PF.PivotItems("Portugalia").DataRange.Cells(0, 1))
Zona2.Group
With .PivotFields("Tara2").PivotItems("Group2")
.Caption = "Zona 2"
.Position = 2
End With
Set Zona3 = Application.Union(PF.PivotItems("Olanda").DataRange.Cells(0, 1), _
PF.PivotItems("Belgia").DataRange.Cells(0, 1), _
PF.PivotItems("Danemarca").DataRange.Cells(0, 1))
Zona3.Group
With .PivotFields("Tara2").PivotItems("Group3")
.Caption = "Zona 3"
.Position = 3
End With
Set Zona4 = Application.Union(PF.PivotItems("Germania").DataRange.Cells(0, 1), _
PF.PivotItems("Italia").DataRange.Cells(0, 1))
Zona4.Group
With .PivotFields("Tara2").PivotItems("Group4")
.Caption = "Zona 4"

Teodora Frunză 98/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

.Position = 4
End With
PT.PivotFields("Tara").Orientation = xlHidden
'dezactiveaza afisarea denumirii campurilor
.DisplayFieldCaptions = False
'modifica numele implicit GrandTotal in Total
.GrandTotalName = "Total"
'aplica un stil
.TableStyle2 = "PivotStyleMedium2"
'nu se afiseaza totalurile de pe coloana
.ColumnGrand = False
'aplica o formatare conditionata ultimei coloane din tabelul pivot
.DataBodyRange.Columns(5).FormatConditions.AddDatabar
End With
End Sub

În codul de mai sus gruparea se face cu ajutorul obiectului Range. În primul caz, în care au fost
grupate datele pe luni, am folosit instrucţiunea:
Rng.Group Start:=True, End:=True, Periods:=Array(False, False, False, False, _
True, False, False)
care stabileşte practic valorile cerute în mod obişuit de Excel în fereastra Grouping.

Valoarea True pentru Start şi End înseamnă că data de start este data cea mai mică găsită şi data
de final este data cea mai mare găsită. Gruparea se face după lună prin stabilirea valorii True
pentru a 5-a valoare a tabloului Periods.
Pentru a grupa „manual” datele, în funcţie de zone, au fost selectate, cu ajutorul VBA, denumirile
ţărilor şi apoi grupate.
Observaţie: pentru a ajunge la celula ce urmează a fi selectată a fost folosită proprietatea
DataRange. Proprietatea DataLabel, ce era folosită în versiunile anterioare de Excel, nu
funcţionează pe Excel 2007-2010.

7.11 Eliminarea grupării datelor


Pentru a elimina gruparea datelor se foloseşte metoda Ungroup a unui obiect de tip Range.
Pentru a elimina gruparea creată anterior, se vor selecta domeniile cu numele câmpurilor Data şi
Tara 2 şi se va utiliza metoda Ungroup.

Sub AnulareGrupare()
Dim Rng1, Rng2 As Range
Set Rng1 = ActiveSheet.PivotTables(1).PivotFields("Data").DataRange
Rng1.Ungroup
Set Rng2 = ActiveSheet.PivotTables(1).PivotFields("Tara2").DataRange
Rng2.Ungroup
End Sub

Teodora Frunză 99/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

7.12 Introducerea valorilor calculate în tabelele pivot


În cazul în care trebuie să facem calcule în tabelul pivot în care sunt implicate valori ale
câmpurilor (PivotItems) vom folosi metoda Add a colecţiei CalculatedItems. Valorile calculate
nu por fi folosite pe zone cache în care există grupări, din acest motiv e bine ca tabelul pivot ce
conţine valori calculate să fie creat pe o zonă cache nouă.
De exemplu, pentru datele anterioare trebuie să calculăm totalul de taxe plătite pe fiecare ţară.
Procentele aferente sunt următoarele:
Tara Taxe aplicate
Anglia 21%
Belgia 18%
Danemarca 14%
Franta 22%
Germania 24%
Irlanda 17%
Italia 15%
Norvegia 9%
Olanda 11%
Portugalia 14%
Spania 15%

Codul ce calculează aceste taxe este următorul:

Sub CalculTaxe()
Dim PTCache As PivotCache
Dim PT As PivotTable
Dim Rng As Range
Dim PF As PivotField
Dim Zona1, Zona2, Zona3, Zona4 As Range
Dim FormulaText As String
'creare nou cache, pentru a nu avea conflicte cu eventualele grupari
Set PTCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:=Range("A1").CurrentRegion)
Worksheets.Add
'adaugarea unui nou pivot
Set PT = ActiveSheet.PivotTables.Add(PivotCache:=PTCache,
TableDestination:=Range("A3"))
With PT
.PivotFields("Categoria").Orientation = xlRowField
.PivotFields("Tara").Orientation = xlColumnField
FormulaText = _
"=Anglia*21%+Belgia*18%+Danemarca*14%+Franta*22%+Germania*24%+" & _
"Irlanda*17%+Italia*15%+Norvegia*9%+Olanda*11%+Portugalia*14%+Spania*15%"
.PivotFields("Tara").CalculatedItems.Add Name:="Taxe", Formula:=FormulaText
.AddDataField .PivotFields("Vanzari"), "Total vanzari", xlSum
.RowGrand = False
'dezactiveaza afisarea denumirii campurilor
.DisplayFieldCaptions = False
'modifica numele implicit GrandTotal in Total
.GrandTotalName = "Total"
'aplica un stil
.TableStyle2 = "PivotStyleMedium5"

Teodora Frunză 100/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

End With
End Sub

Tabelul pivot rezultat este:

7.13 Ştergerea valorilor calculate în tabelele pivot


Pentru a şterge o valoare calculată, determinăm câmpul ce conţine acea valoare şi numele valorii
şi folosim metoda Delete.

Sub StergereCalculTaxe()

ActiveSheet.PivotTables(1).PivotFields("Tara").PivotItems("Taxe").Delete

End Sub

7.14 Grafice pivot


Graficele pivot au fost introduse pentru prima dată în Excel 2000. Acestea sunt grafice normale,
însă sunt legate de un tabel pivot. Dacă modificaţi structura tabelului pivot se va modifica
automat graficul şi similar, dacă modificaţi de pe grafic aranjarea câmpurilor, acest lucru va fi
vizibil în tabelul pivot asociat.

Exemplu: Pentru tabelul pivot alăturat dorim să contruim un grafic pivot de tip pie.

Codul de mai jos creează graficul pivot asociat tabelului:

Sub CreeazaGraficPivot()
Dim Sh As Shape
Dim gfPiv As Chart
Teodora Frunză 101/105
CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Dim seria As Series


Set Sh = ActiveSheet.Shapes.AddChart(xlPieExploded)
Set gfPiv = Sh.Chart
gfPiv.SetSourceData Source:=ActiveSheet.PivotTables(1).TableRange1
' ascunderea câmpurilor pivot
ActiveWorkbook.ShowPivotChartActiveFields = False
' eliminarea legendei
gfPiv.Legend.Clear
' stabilirea unui stil şi a titlului graficului
gfPiv.ChartStyle = 26
gfPiv.ChartTitle.Text = "Total vanzari"
' adaugarea etichetelor si a procentelor
gfPiv.ApplyDataLabels xlDataLabelsShowLabelAndPercent
' aplicarea unei culori pe suprafata graficului
gfPiv.ChartArea.Format.Fill.ForeColor.RGB = RGB(244, 192, 0)
' introducerea etichetelor si procentelor in interiorul sectorului aferent
gfPiv.SeriesCollection(1).DataLabels.Position = xlLabelPositionInsideEnd
' pozitionarea graficului pivot intr-un anumit domeniu
With Range("D3:K24")
Sh.Left = .Left
Sh.Top = .Top
Sh.Width = .Width
Sh.Height = .Height
End With
End Sub

Teodora Frunză 102/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Anexa Funcţii utile în VBA


Funcţii Descriere
Abs Returnează valoarea absolută a unui număr.
Array Returnează un obiect de tip variant ce conţine un tablou.
CBool Converteşte o expresie în tipul de date boolean.
CByte Converteşte o expresie în tipul de date byte.
CCur Converteşte o expresie în tipul de date currency.
CDate Converteşte o expresie în tipul de date data.
CDbl Converteşte o expresie în tipul de date double.
CDec Converteşte o expresie în tipul de date decimal.
Choose Selectează şi returnează o valoarea dintr-o listă de argumente.
Chr Converteşte un caracter în şir de caractere.
CInt Converteşte o expresie în tipul de date integer.
CLng Converteşte o expresie în tipul de date long.
CSng Converteşte o expresie în tipul de date single.
CStr Converteşte o expresie în tipul de date string.
CVar Converteşte o expresie în tipul de date variant.
Date Returnează data curentă.
DateAdd Adaugă un interval de timp unei date calendaristice.
DateDiff Returnează intervalul de timp între două date calendaristice.
DatePart Returnează o parte specificată a unei date calendaristice.
DateSerial Converteşte o dată calendaristică într-un număr serial.
DateValue Converteşte un şir de caractere într-o dată calendaristică.
Day Returnează ziua dintr-o dată calendaristică.
DoEvents Determină execuţia, astfel încât sistemul de operare poate procesa alte evenimente.
Error Returnează un mesaj de eroare corespunzător numărului erorii.
Format Returnează o expresie într-un anumit format.
FormatCurrency Returnează o expresie formatată cu simbolul monetar implicit al sistemului.
FormatDateTime Returnează o expresie formatată ca dată sau oră.
FormatNumber Returnează o expresie formatată ca număr.
FormatPercent Returnează o expresie formatată ca procent.
Hour Returnează ora dintr-o dată calendaristică.
InputBox Afişează o casetă de dialog în care utilizatorul poate introduce informaţii.
InStr Returnează poziţia unui şir de caractere din alt şir de caractere.
InStrRev Returnează poziţia unui şir de caractere din alt şir de caractere, de la sfârşitul şirului.
Int Returnează partea întreagă a unui număr.
IsArray Returneată True dacă o variabilă e un array.
IsDate Returneată True dacă o variabilă e de tip data.
IsEmpty Returneată True dacă o variabila nu a fost iniţializată.
IsError Returnează True dacă expresia este o eroare.
IsNull Returnează True dacă expresia conţine o valoare Null.
IsNumeric Returnează True dacă expresia este numerică.
IsObject Returnează True dacă expresia este un obiect.
LBound Returnează primul indice al unui array.
LCase Returnează un şirul de caractere convertit la litere mici.
Left Returnează un anumit număr de caractere de la începutul şirului de caractere.
Len Returnează lungimea şirului de caractere.
LTrim Returnează o copie a şirului de caractere ce nu conţine spaţii la începutul şirului.
Mid Returnează un număr de caractere din interiorul unui şir de caractere.

Teodora Frunză 103/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

Minute Returnează minutele dintr-o dată calendaristică.


Month Returnează luna dintr-o dată calendaristică.
MonthName Returnează numele lunii dintr-o dată calendaristică ca şir de caractere.
MsgBox Afişează o casetă de mesaj.
Now Returnează data şi ora curentă a sistemului.
QBColor Returnează codul de culoare RGB (roşu, verde, albastru).
RGB Returnează un număr ce reprezintă valoarea RGB a unei culori.
Right Returnează un anumit număr de caractere de la sfârşitul şirului de caractere.
Round Returnează numărul rotunjit.
RTrim Returnează o copie a şirului de caractere ce nu conţine spaţii la sfârşitul şirului.
Second Returnează secundele dintr-o dată calendaristică.
Sqr Returnează rădăcina pătrată a unui număr.
Str Returnează şirul de caractere al unui număr.
StrComp Returnează o valoare ce indică rezultatul comparării şirurilor de caractere.
String Returnează un caracter repetat sau un şir.
StrReverse Returnează şirul de caractere inversat.
Switch Evaluează o listă de expresii booleene şi returnează valoarea asociată primei expresii
adevărate.
Time Returnează ora, minutele şi secundele curente a sistemului.
Timer Returnează numărul de secunde de la miezul nopţii până la ora curentă.
TimeSerial Returnează timpul pentru ora, minutul şi secunda specificată.
TimeValue Converteşte un şir de caractere într-un număr serial.
Trim Returnează un şir de caractere fără spaţii la începutul şi la sfârşitul şirului.
TypeName Returnează un şir cu descrierea tipului de dată a unei variabile.
UBound Returnează ultimul indice al unui array.
UCase Returnează un şirul de caractere convertit la majuscule.
Val Returnează numărul dintr-un şir de caractere.
VarType Returnează o valoare ce indică subtipul unei variabile.
Weekday Returnează un număr de indică în a câta zi din săptămână este o anumită dată
calendaristică.
WeekdayName Returnează numele zilei din săptămână pentru o anumită dată calendaristică.
Year Returnează anul pentru o dată calendaristică.

Instrucţiuni Acţiune
AppActivate Activeată o fereastră de aplicaţie.
Call Apelează altă procedură.
Const Declară o constantă.
Dim Declară o variabilă şi tipul său de date (opţional).
Do-Loop Ciclează un set de instrucţiuni.
End Dacă este folosit singur conduce la închiderea programului. Folosit împreună cu If,
With, Sub, Function, Property, Type, sau Select determină închiderea blocului.
Enum Declară o enumerare.
Erase Reiniţializează un array-
Error Simulează o anumită eroare.
Event Declară un eveniment definit de utilizator.
Exit Do Determină ieşirea dintr-un ciclu Do-Loop.
Exit For Determină ieşirea dintr-un ciclu For-Next.
Exit Function Determină ieşirea din funcţie.
Exit Sub Determină ieşirea din procedură.
For Each-Next Ciclează un set de instrucţiuni pentru fiecare membru al mulţimii de obiecte.

Teodora Frunză 104/105


CURS EXCEL VBA INFOTIM ETA2U TRAINING CENTER

For-Next Ciclează un set de instrucţiuni pentru de un anumit număr de ori.


Function Declară numele şi argumentele funcţiei.
GoTo Transferă execuţia către o anumită instrucţiune dintr-o procedură.
If-Then-Else Verifică o expresie şi, funcţie de valoarea sa de adevăr, determină următoarele
instrucţiuni.
On Error Gives specific instructions for what to do in the case of an error
On…GoSub Ramuri a unei condiţii.
On…GoTo Ramuri a unei condiţii.
Option Explicit Forţează declararea explicită a variabilelor.
Option Private Stabileşte un modul ca fiind privat.
Private Declară o variabilă sau un array local.
Public Declară o variabilă sau un array public.
RaiseEvent “Aruncă” un eveniment definit de utilizator.
Rem Comentariu (la fel ca şi caracterul apostrof)
Resume Reia execuţia în momentul terminării rutinei de tratare a erorii.
Select Case Verifică o expresie şi, funcţie de valoarea sa de adevăr, determină următoarele
instrucţiuni.
Set Asignează referinţa unui obiect unei variabile sau proprietăţi.
Static Declară o variabilă ca fiind statică.
Stop Determină o “pauză” pentru program.
Sub Declară numele şi argumentele unei proceduri.
While…Wend Ciclează un set de instrucţiuni atât timp cât o condiţie rămâne adevărată.
With Stabileşte o serie de proprietăţi pentru un obiect.

Teodora Frunză 105/105

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