suport de curs excel avansat

45
@2003 SC INTERCONSULT 2001 SRL – Suport curs EXCEL Avansat Tel/fax: 0248-262340 www.formare.ro 1/45 C U P R I N S C U P R I N S ---------------------------------------------------------------------------------------------------------------------------- 1 1. INTRODUCERE --------------------------------------------------------------------------------------------------------------------- 2 2. Elemente de programare în VBA pentru EXCEL ------------------------------------------------------------------------------ 2 2.1. Variabile si tipuri de date folosite în VBA--------------------------------------------------------------------------------- 3 2.2. Descrierea unui obiect --------------------------------------------------------------------------------------------------------- 5 2.3. Bara de controale standard ---------------------------------------------------------------------------------------------------- 8 2.4. Editorul VBA ------------------------------------------------------------------------------------------------------------------ 14 2.5. Foaia de calcul, proprieti, metode, evenimente------------------------------------------------------------------------ 15 2.6. Proceduri i funcii predefinite --------------------------------------------------------------------------------------------- 17 2.6.1. InputBox ------------------------------------------------------------------------------------------------------------------ 17 2.6.2. MsgBox ------------------------------------------------------------------------------------------------------------------- 18 2.7. Afiarea valorii unei celule-------------------------------------------------------------------------------------------------- 18 2.8. Copierea unei zone de celule cu ajutorul unui buton de comand ---------------------------------------------------- 20 3. Instruciuni VBA ------------------------------------------------------------------------------------------------------------------- 22 3.1. Instruciunea de decizie If ..Then...Else (Dac….Atunci…..In caz contrar)---------------------------------------- 22 3.2. Instruciunea de decizie Select Case … End Select --------------------------------------------------------------------- 24 3.3. Instruciunea repetitiv For … Next (pentru.........urmatorul) --------------------------------------------------------- 25 3.4. Instruciunea repetitiv Do While … Loop------------------------------------------------------------------------------- 26 3.5. Instruciunea repetitiv Do Until … Loop -------------------------------------------------------------------------------- 27 4. Proceduri i funcii ----------------------------------------------------------------------------------------------------------------- 28 4.1. Proceduri ----------------------------------------------------------------------------------------------------------------------- 28 4.2. Funcii -------------------------------------------------------------------------------------------------------------------------- 30 5. Aplicaii VBA ---------------------------------------------------------------------------------------------------------------------- 32 5.1. Aplicaia 1 – Afiarea valorii i adresei celulei curente ---------------------------------------------------------------- 32 5.2. Aplicaia 2 – Calcularea numrului înregistrrilor nevide dintr-o foaie de calcul --------------------------------- 33 5.3. Aplicaia 3 – Cutarea automat a unui cuvânt citit de la tastatur--------------------------------------------------- 34 5.4. Aplicaia 4 – Folosirea casetei list si controlului de tip list derulant. -------------------------------------------- 36 5.5. Aplicaia 5 – Actualizarea dinamic a unui grafic ---------------------------------------------------------------------- 37 5.6. Aplicaia 6 – Crearea unui configurator automat ------------------------------------------------------------------------ 38 5.7. Aplicaia 7 – Crearea unui formular i completarea automat a acestuia ------------------------------------------- 41 5.8. Aplicaia 8. -Crearea unui tabel pivot. ------------------------------------------------------------------------------------ 43

Upload: hristachema771801

Post on 23-Nov-2015

152 views

Category:

Documents


29 download

DESCRIPTION

excel

TRANSCRIPT

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 1/45

    C U P R I N S

    C U P R I N S ---------------------------------------------------------------------------------------------------------------------------- 1 1. INTRODUCERE--------------------------------------------------------------------------------------------------------------------- 2 2. Elemente de programare n VBA pentru EXCEL ------------------------------------------------------------------------------ 2

    2.1. Variabile si tipuri de date folosite n VBA--------------------------------------------------------------------------------- 3 2.2. Descrierea unui obiect --------------------------------------------------------------------------------------------------------- 5 2.3. Bara de controale standard ---------------------------------------------------------------------------------------------------- 8 2.4. Editorul VBA------------------------------------------------------------------------------------------------------------------ 14 2.5. Foaia de calcul, proprieti, metode, evenimente------------------------------------------------------------------------ 15 2.6. Proceduri i funcii predefinite --------------------------------------------------------------------------------------------- 17

    2.6.1. InputBox ------------------------------------------------------------------------------------------------------------------ 17 2.6.2. MsgBox ------------------------------------------------------------------------------------------------------------------- 18

    2.7. Afiarea valorii unei celule-------------------------------------------------------------------------------------------------- 18 2.8. Copierea unei zone de celule cu ajutorul unui buton de comand ---------------------------------------------------- 20

    3. Instruciuni VBA ------------------------------------------------------------------------------------------------------------------- 22 3.1. Instruciunea de decizie If ..Then...Else (Dac.Atunci..In caz contrar)---------------------------------------- 22 3.2. Instruciunea de decizie Select Case End Select --------------------------------------------------------------------- 24 3.3. Instruciunea repetitiv For Next (pentru.........urmatorul) --------------------------------------------------------- 25 3.4. Instruciunea repetitiv Do While Loop------------------------------------------------------------------------------- 26 3.5. Instruciunea repetitiv Do Until Loop-------------------------------------------------------------------------------- 27

    4. Proceduri i funcii ----------------------------------------------------------------------------------------------------------------- 28 4.1. Proceduri ----------------------------------------------------------------------------------------------------------------------- 28 4.2. Funcii -------------------------------------------------------------------------------------------------------------------------- 30

    5. Aplicaii VBA ---------------------------------------------------------------------------------------------------------------------- 32 5.1. Aplicaia 1 Afiarea valorii i adresei celulei curente ---------------------------------------------------------------- 32 5.2. Aplicaia 2 Calcularea numrului nregistrrilor nevide dintr-o foaie de calcul --------------------------------- 33 5.3. Aplicaia 3 Cutarea automat a unui cuvnt citit de la tastatur--------------------------------------------------- 34 5.4. Aplicaia 4 Folosirea casetei list si controlului de tip list derulant. -------------------------------------------- 36 5.5. Aplicaia 5 Actualizarea dinamic a unui grafic ---------------------------------------------------------------------- 37 5.6. Aplicaia 6 Crearea unui configurator automat ------------------------------------------------------------------------ 38 5.7. Aplicaia 7 Crearea unui formular i completarea automat a acestuia ------------------------------------------- 41 5.8. Aplicaia 8. -Crearea unui tabel pivot. ------------------------------------------------------------------------------------ 43

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 2/45

    1. INTRODUCERE

    Acest curs i propune s v familiarizeze cu opiunile avansate ale MS EXCEL, ce includ:

    definirea i editarea de macrocomenzi elemente de programare n Visual Basic for Application;

    crearea de formulare;

    Manipularea tabelelor Pivot Toate aceste informaii vor completa cunotinele deja acumulate privind lucrul cu foile de calcul tabelar MS Excel, astfel nct s fac din acesta un instrument puternic care s preia mare parte din sarcinile dumneavoastr de serviciu.

    2. Elemente de programare n VBA pentru EXCEL Firma Microsoft a implementat pentru programul Excel un editor VBA (Visual Basic for

    Applications) care s extind funcionalitatea Excel. Visual Basic for Aplications poate fi utilizat pentru dezvoltarea de functii specializate pentru foaia de lucru. Cu ajutorul acestuia se pot scrie programe sau modifica macrouri complexe care pot fi folosite de ctre utilizator pentru a automatiza unele activiti i a extinde capabilitatea Excel.

    Ideea de limbaj de programare si program. Un program reprezinta un set de instructiuni ce spun calculatorului sa faca ceva anume.

    Cel mai simplu tip de program este o secventa de instuctiuni pe care calculatorul o implementeaza in mod automat. Aceste instructiuni sunt adesea numite si declaratii. De exemplu in limbajul de programare Visual BASIC putem avea : Sub Adunare() a = 10 b = 33 c = a + b Msgbox c End Sub

    Desi unele din cuvintele folosite mai sus pot prea fr sens, nu este greu de presupus ca aplicaia va spune calculatorului s adune doua numere si apoi s afieze rezultatul. In acest caz, va fi utilizat comanda MsgBox message box pentru a afisa rezultatul n foaia de lucru curent.

    Setul de instructiuni nu trebuie sa fie ambiguu, iar ordinea instructiunilor trebuie sa aiba logica. In caz contrar programul nu va rula asa cum se doreste. De exemplu, la programul de mai sus simpla inversare a doua declaratii (rndul 4 cu rndul 5) va face ca programul sa nu afiseze rezultatul, deoarece afisarea se face inaintea adunarii propriu-zise.

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 3/45

    Un alt exemlu de program util in Excel este un program ce face ca, intr-o lista de nume, numele care incep cu A sa fie scrise cu font ingrosat (bold).

    Pentru a efectua aceasta operatie calculatorul trebuie sa cunoasca urmatoarele informatii: Unde incepe lista. Unde se termina lista. Cum se parcurg itemii (articolele) din lista. Care este caracteristica distinctiva a itemilor ce trebuie modificati. Cum se vor modifica itemii.

    Aceste informatii trebuie sa fie similare cu urmatoarele: 1. Se va lucra cu foaia de lucru Sheet1 (sau Feuil1). 2. Se incepe cu celula B3 si se continua pana se intalneste o celula goala, 3. Se verifica prima litera a cuvntului din celula curenta. 4. Daca valoarea este A, continutul celulei se va scrie ingrosat (bold). In caz contrar se lasa asa cum este. 5. Se trece la celula urmatoare. Acest exemplu va fi realizat efectiv n cadrul unei lecii ulterioare.

    2.1. Variabile si tipuri de date folosite n VBA Variabilele reprezinta elementele cu care interactioneaza programul

    Codul este compus din variabile, operatori (+,-, etc) si declaratii. Conceptual vorbind variabilele reprezinta obiectele cu care lucreaza programul. De exemplu, o variabila poate reprezenta un numar cu care se vor efectua calcule matematice, un sir de caractere ce trebuie editat, o foaie de lucru, etc. In cadrul unui program se poate manipula orice din cadrul Excel. Pentru a interationa cu acesti itemi trebuie:

    Creata o variabila de tipul potrivit. S i se dea o valoare initiala variabilei. Sa se efectueze operatii sau sa se execute declaratii pentru a modifica variabila sau pentru a interactioana cu ea.

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 4/45

    Tipuri de date La declararea sau crearea unei variabile, se va tine cont de tipul de date ce va fi pstrat de

    variabil. Variabilelor li se pot atribui anumite valori in functie de tipul de date ce a fost declarat . La variabile se face referire in functie de tipul de date retinut; spre exemplu o variabil poate fi de tip ntreg, respectiv va retine valori intregi (Integer). Daca nu se stie sigur tipul de date pe care il va retine variabila poate fi declarata ca Variant. Acest tip de variabile pot reprezenta orice.

    Tipurile de date cele mai uzuale sunt reprezentate in tabelul de mai jos:

    Principalele tipuri de date folosite n cadrul VBA sunt prezentate n tabelul urmtor:

    Tip dat Interval de valori

    Boolean

    Adevarat (True) sau fals(False)

    Byte

    0255.

    Currency

    922,337,203,685,477.5808 la 922,337,203,685,477.5807.

    Date

    1 Ianuarie 100 la 31 Decembrie 9999 si timp de la 0:00:00 la 23:59:59.

    Double

    1.79769313486231 la 4.94065645841247E-324 pentru valori negative; si de la 4.94065645841247E-324 pana la 1.79769313486232E308 pentru valori pozitive.

    Integer

    32,768 la 32,767.

    Long 2,147,483,648 la 2,147,483,647. Object

    Tip de data complex

    Single

    3.402823E38 la 1.401298E-45 pentru valori negative; si de la 1.401298E-45 pana la 3.402823E38 for pentru valori pozitive.

    String

    Sir de caractere.

    Variant Tip de dat care le include pe toate celalalte

    Declararea variabilelor

    De obiei, in cadrul orcarui limbaj de programare, pentru a putea folosi o variabila, aceasta trebuie declarata la inceputul programului. Dupa ce se va decide tipul de data potrivit pentru variabila, declararea are sintaxa:

    Dim NumeVariabila [As TipData]

    Exemple:

    Dim Contor As Integer

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 5/45

    Dim NumeFoaieLucru As String Dim ValoareCelula As Variant Dim Salariu As Currency

    Variabilele sunt de dou tipuri: - globale (sunt recunoscute n tot programul); - locale (sunt recunoscute doar n interiorul unei proceduri sau funcii); In cazul in care nu se specific tipul variabilei, acesteia i se atribuie tipul de data Variant. Asadar variabila ValoareCelula poate fi declarata mai simplu astfel:

    Dim ValoareCelula

    2.2. Descrierea unui obiect

    Obiectele sunt acei itemi ce pot fi manipulati in cod. Practic obiectele permit utilizatorului sa gandeasca si sa dezvolte aplicatii folosind termenii pe care i intalneste in viata de zi cu zi. In Excel exista un obiect Workbook (registrul de lucru), un obiect Worksheet (foaie de lucru), un obiect Range (grup de celule), un obiect Cell (o celula) sau un un obiect PivotTable (tabel pivot), sau chiar un obiect Comment (comentariu). Orice item cu care se poate interactioana folosind meniurile Excel poate fi considerat un obiect.

    Obiectele VBA se pot caracteriza cu ajutorul a trei elemente : proprieti, metode i evenimente.

    Proprietati si metode Proprietatile sunt caracteristicile ce descriu un obiect iar metodele sunt operatii ce pot fi

    efectuate de acel obiect. Iata un exemplu pentru a explica diferenta dintre acestea. Se considera o locuinta. Acesta poate fi considerate un obiect cu numele Resedinta. Acest obiect poate avea o proprietate numita Tip, ce poate indica daca locuinta este un apartament sau o casa. Poate avea de asemnea o proprietate numita Inchiriat ce va avea valoarea adevarat daca locuinta este inchiriata sau fals daca aceasta este proprietate personal. Lista de mai jos reprezinta alte proprietati pe care le poate avea obiectul Resedinta.

    - Culoare zugraveli - Nr. dormitoare - Nr. bi - Suprafaa - Temperatura (ambientala) Obiecul Resedinta poate avea o metoda de racire (folosind un obiect Aer Conditionat) si

    o metoda de incalzire (folosind un obiect Centrala Termica). In multe cazuri, dar nu intotdeauna, folosirea unei metode modifica una sau mai multe proprietati. In cazul curent , metodele de incalzire si racire vor modifica proprietatea Temperatura.

    a) Proprietile reprezint caracteristicile obiectului respectiv, putnd fi de orice tip, inclusiv Object (obiect). Aceste proprieti pot fi modificate. Modificarea unui parametru se face altfel :

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 6/45

    numeObiect.numeProprietate = Valoare In tabelul de mai jos sunt prezentate sintetic principalele proprieti ale unui obiect VBA:

    Nume proprietate/parametru Descriere Color Acest parametru indic culoarea obiectului; de obicei culoarea

    este stabilit cu ajutorul tabelei de proprieti, care pune la dispoziia utilizatorului o serie de culori standard.

    Caption Reprezint textul care este afiat pe obiect i este un parametru de tip String (ir de caractere).

    Enabled Acest parametru indic dac obiectul este activ sau nu i este de tipul Boolean. Dac parametrul are valoarea True, atunci

    obiectul este activ. Dac parametrul are valoarea False atunci obiectul este inactiv.

    Font Acest parametru este folosit pentru stabilirea caracteristicilor fontului folosit pentru scrierea textului de pe obiect.

    ForeColor Prin acest parametru se poate stabili culoarea fontului pentru scrierea textului de pe obiect.

    Height Reprezint nlimea obiectului i este un parametru de tipul Single.

    Left Reprezint coordonata (de pe axa X) a colului stnga sus a obiectului; Acest parametru este de tipul Single.

    PrintObject Stabilete dac obiectul este printabil sau nu i este un parametru de tip Boolean; Dac valoarea este True atunci obiectul este printabil; Dac valoarea este False atunci obiectul nu este printabil (nu apare la imprimant).

    Top Reprezint coordonata (de pe axa Y) a colului stnga sus a obiectului; Acest parametru este de tipul Single.

    Width Reprezint lungimea obiectului i este un parametru de tipul Single.

    Visible Stabilete dac obiectul este vizibil sau nu; Acest parametru este de tipul Boolean; Dac valoarea parametrului este True, atunci obiectul este vizibil; Dac valoarea parametrului este False, atunci obiectul nu este vizibil n foaia de calcul.

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 7/45

    Exemplu 1:

    CommandButton.Caption = START

    unde CommandButton reprezint numele obiectului, iar Caption este un parametru care reprezint textul ce va fi afiat pe obiect. Dup cum se poate observa, ntre obiect i parametru se include un punct separator.

    b) Metodele sunt proceduri sau funcii care pot s aib un numr diferit de parametri i reprezint operaiile care se pot efectua asupra unui obiect. Apelarea unei metode o vom ilustra prin cteva exemple :

    Exemplu 1 :

    Foaie2.Activate

    unde Foaie2 reprezint un obiect de tip foaie de calcul Excel, iar Activate este o metod prin care se realizeaz activarea foii de calcul Foaie2.

    Exemplu 2:

    Foaie1.Move Sheets(2)

    unde Foaie1 reprezint un obiect de tip foaie de calcul Excel, iar Move este o metod cu ajutorul creia se mut obiectul Foaie1 pe poziia a doua n registrul de calcul.

    Observaie: Metodele obiectelor pot fi doar apelate nu i modificate.

    c) Evenimentele sunt proceduri care pot s aib un numr diferit de parametri i reprezint reacia obiectului la diferite aciuni ale utilizatorului; procedura se apeleaz automat la o aciune a utilizatorului asupra unui obiect. Un eveniment trebuie declarat, iar declararea unui eveniment se face ntr-o procedur special generat automat de VBA. Sintaxa unui eveniment este urmtoarea:

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 8/45

    Private Sub numeObiect_numeEveniment(lista as tipDat) Bloc_instructiuni

    End Sub Principalele evenimente ale unui obiect sunt sintetizate n tabelul de mai jos:

    Nume eveniment Descriere

    Click Acest eveniment este declanat n momentul care se efectueaz un click pe obiect.

    DoubleClick Acest eveniment este declanat n momentul n care se efectueaz un dubluclick pe obiect.

    MouseDown Acest eveniment este declanat n momentul n care butonul stng/drept al mous-ului este apsat iar cursorul mous-ului se afl pe obiect .

    MouseMove Acest eveniment este declanat n momentul n care mous-ul este micat pe obiect.

    MouseUp Acest eveniment este declanat n momentul n care butonul stng/drept al mous-ului nu mai este apsat iar cursorul mous-ului se afl pe obiect .

    Folosirea controalelor Adaugarea unui control

    Pentru a adauga un control intr-o foaie de lucru, trebuie mai intai afisata bara de controale standard, iar apoi de pe aceasta se va selecta controlul dorit. Conturul acesteia se va desena cu mouse-ul pe foaia de lucru. Pozitia, dimensiunea si proprietatile controlului nu sunt importante initial deoarece acestea pot fi modificate oricand. Acestor controale li se vor asocia mai tarziu coduri VBA.

    2.3. Bara de controale standard

    Bara de controale standard se afieaz pe ecran astfel: din meniul Outils se alege opiunea Personaliser; va aprea o fereastr cu trei butoane din care se alege opiunea Barres doutils i se bifeaz

    opiunea Commandes;

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 9/45

    Bara de controale este ilustrat n figura de mai jos.

    Aceast bar este format din trei pri distincte i anume: prima parte este format din butoane funcionale (1, 2 i 3) utile pentru conceperea programului n VBA; a doua parte este format din butoanele 4 14, corespunztoare tipurilor de controale uzuale (obiectelor fizice din program) i a treia parte cuprinde doar butonul 15 care este folosit pentru a aduga noi controale.

    Butonul 1 este folosit pentru intrarea/ieirea din modul de proiectare. Dac acest buton este activat, n foaia de calcul pot fi adugate noi controale (obiecte fizice). n acest caz controalele de pe foaia de calcul nu sunt active. n cazul n care butonul nu este apsat controalele sunt active, iar programul poate fi rulat.

    Butonul 2 este folosit pentru afiarea unui tabel cu ajutorul cruia se pot vizualiza principalele proprieti (parametri) ale controlului activ din foaia de calcul sau chiar al foii de calcul.

    Butonul 3 este folosit pentru activarea editorului de cod VBA.

    Observaie: Pentru inserarea unei control pe foaia de calcul se apas pe butonul corespunztor controlului (unul dintre butoanele 4 14), dup care, cu ajutorul mous-ului, se insereaz controlul pe foaia de calcul (procedeu identic cu inserarea unei imagini).

    Numele i tipul obiectului pentru care sunt afiate proprietile

    Valoarea unui parametru(proprietate)

    Numele parametrului ( proprietii )

    1 2 3 4 5 6 7 8 9 11 12 13 14 15 10

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 10/45

    Descrierea controalelor

    Butonul 4 reprezint un control de tipul csu de selectare (CheckBox) i are dou stri selectat sau deselectat. Se utilizeaz atunci cnd este necesar selectarea uneia sau mai multor opiuni dintr-o list.

    Butonul 5 reprezint un control de tipul caset de text (TextBox) i este folosit pentru introducerea de la tastatur a unor date.

    Butonul 6 reprezint un control de tipul buton de comand (CommandButton) i este folosit pentru executarea unor comenzi (blocuri de instruciuni). Este unul dintre cele mai folosite controale.

    Butonul 7 este un control de tipul buton radio (OptionButton ) i are dou stri selectat/neselectat. Dac pe o foaie de calcul se gsesc mai multe astfel de controale,

    numai unul dintre ele poate s fie n starea selectat. Butonul 8 reprezint un control de tipul caset list (ListBox) i este folosit pentru

    afiarea unor valori.

    Butonul 9 reprezint un control de tipul list derulant(ComboBox) i este folosit pentru alegerea unei valori dintr-o list derulant.

    Cea mai important metod a controalelor ListBox i ComboBox este AddItem. Metoda AddItem are un parametru de tip Variant i este folosit pentru a aduga o nou valoare n list.

    Exemplu:

    Private Sub CommandButton1_Click() Dim nume_nou As String

    Dim nr As Integer

    nr = Int(20 * Rnd) + 1 genereaz un nr. ntreg aleator ntre 1 i 20 nume_nou = "Model" + CStr(nr) CStr convertete variabilele numerice n variabile de tip ir ComboBox1.AddItem nume_nou ListBox1.AddItem nume_nou End Sub

    Not: Apostroful reprezint un comentariu. Comentariile nu influeneaz logica programului,

    avnd rol exclusiv de informare. Este indicat s folosim ct mai multe comentarii explicative, astfel nct la o modificare ulterioar a aplicaiei s ne putem aduce aminte uor logica de care ne-am folosit la programarea iniial.

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 11/45

    n acest exemplu, prin evenimentul click corespunztor controlului CommandButton1, variabilei nume_nou i se atribuie valoarea Modelxx (unde xx este un nr.aleator cuprins ntre 1 i 20), dup care aceasta este adugat n lista derulant (ComboBox1) i n lista simpl (ListBox1).

    Butonul 10 reprezint un control de tipul buton comutator (ToggleButton), care are dou stri: apsat i neapsat.

    Butonul 11 reprezint un control de tipul buton de incrementare/decrementare (SpinButton) i incrementeaz(crete)/decrementeaz(descrete) valoarea parametrului Value de cte ori este apsat una din cele dou sgei(n sus sau n jos).

    Butonul 12 reprezint un control de tipul bar derulant (ScrollBar) i poate fi folosit pentru defilarea unor controale sau foi de calcul. Aceasta bar de defilare poate s fie vertical sau orizontal. Orientarea barei de defilare se stabilete cu ajutorul parametrului Orientation; dac acest parametru are valoarea 0 atunci bara este orizontal, iar dac este 1 atunci bara este vertical.

    Butonul 13 reprezint un control de tip etichet (Label) i de obicei este folosit pentru etichetarea altor controale sau afiarea unor valori nemodificabile.

    Butonul 14 este folosit pentru a insera n foaia de calcul un control de imagine (Image). Cel mai important parametru al acestui control este Picture. Acest parametru este folosit pentru a stabili ce imagine va conine acest control.

    Butonul 15 (More controls) este folosit pentru a aduga noi controale care nu se gsesc n bara standard. Dup ce se apas click pe buton va aprea o list derulant din care se poate alege controlul dorit.

    2.Exemplu: In continuare este ilustrat folosirea controalelor ntr-o foaie de calcul Excel. Se observ obiecte de tip: buton de comand, etichete (label), butoane de validare (check box), butoane de incrementare, list derulant etc.

    Butonul More controls

    Un control din list

    Lista derulant

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 12/45

    Functia MsgBox

    Functia MsgBox este folosita pentru a afisa informatii pentru utilizatorii programului, sau pentru a colecta date de intare de tipul Da/Nu/Inchide. Sintaxa de baza a acestei functii este :

    MsgBox(text[, butoane] [, titlu] )

    Parametrul text reprezinta textul ce va fi afisat, parametrul butoane controleaza ce butoane sunt afisate. Daca nu se da nici o valoare pentru acest parametru, cea implicit este 0 (Doar OK). Titlul este textul afisat in bara de titlu a casetei de dialog.

    Aceasta functie poate afisa mesaje simple ca cel de mai jos:

    MsgBox "Aceasta este o functie utila."

    -Butonul de comanda este exemplul perfect pentru a demonstra avantajele oferite de controale.

    1. Daca bara de controale nu este vizibila, se poate afisa selectand View>Toolbars>Control Toolbox 2. Se executa click pe butonul Command Button de pe bara de controale. 3. Se executa apoi click in locatia din foaia de lucru unde va fi plasat coltul stanga-sus al butonului de comanda. Daca se execta doar click, butonul de comanda va avea dimensiunea implicita. Pentru a da dimensiunea dorita, se va desena conturul butonului cu butonul click apasat.

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 13/45

    4. Se executa click dreapta pe buton si se selecteaza Proprieties. Va aparea o fereastra cu proprietati ca in figura de mai sus. Se vor seta proprietatile dupa cum urmeaza:

    5. Se executa click dreapta pe buton si apoi se va selecta View Code. Va fi pornit editorul VBA. Implicit cursorul va fi plasat in procedura asociata butonului. 6. Se executa click pe sageata casetei combo din partea de sus a ferestrei codului. Vor fi afisate toate evenimetele la care va raspunde butonul. 7. In procedura numita cmdExemplu_Click, se introduce declaratia:

    MsgBox Ati executat click!

    8. Se revine in Excel si se executa click pe butonul Exit Design Mode de pe bara de controale. 9. Se inchide fereastra de proprietati si bara de controale. 10. Se testeaza butonul. Rezultatul este afisat in figura de mai jos.

    cmdExemplu

    Exemplu

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 14/45

    2.4. Editorul VBA Dup inserarea controalelor n foaia de calcul, urmtorul pas l constituie scrierea codului

    VBA pentru fiecare control (obiect) n parte. Editorul VBA se acceseaz prin apsarea combinaiei de taste Alt + F11. Fereastra de

    vizualizare conine: o bar de titlu, o bar de meniuri, o bar standard i dou cadrane. n cadranul din partea stng sunt afiate foile de lucru.

    Cadranul foilor de calcul

    Cadran de editare cod VBA

    Lista cu obiecte

    Lista evenimentelor obiectului

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 15/45

    Dac dorim s accesm codul corespunztor unei anumite foi de lucru se execut dublu-click pe iconia foii respective. n cadranul din partea dreapt se scrie codul corespunztor foii respective.

    2.5. Foaia de calcul, proprieti, metode, evenimente

    Foaia de calcul este principalul obiect de lucru n programarea scripturilor Excel. Principalele proprieti ale unei foi de calcul sunt prezentate n tabelul de mai jos:

    Nume proprietate Descriere Name Acest parametru indic numele foi respective;

    Cells(i , j) Acest parametru indic valoarea celulei de pe rndul i coloana j; j poate fi att de tip integer ct i string

    Range("celul1:celul2") Este un parametru de tip obiect, prin care se face o referire la o zon de celule.

    n editorul VBA proprietile foii de calcul sunt afiate automat ntr-o list derulant dup ce este scris numele foii de calcul urmat de delimitatorul punct, ca n exemplul ce urmeaz:

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

    Exemple: MsgBox Feuil1.Name

    ' afieaz numele primei foi de calcul

    Feuil1.Name = " Foaie1 "

    ' numele primei foi de calcul este schimbat cu Foaie1

    Proprietate a foii de calcul

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 16/45

    MsgBox Feuil1.Cells(2, "A") ' afieaz coninutul celulei de pe rndul 2, coloana A

    Feuil1.Cells(4, 2)= "100" ' Valoarea celulei de pe rndul 4, coloana 2 (adic B) devine egal cu 100

    Feuil1.Range("A1:D10").Font.Italic = True ' n domeniul celulelor A1:D10, fontul devine de tip nclinat (italic)

    Feuil1.Cells (1, "A").Interior.Color = vbBlue ' Celula A1 va fi colorat n albastru Principalele metode ale unei foi de calcul sunt prezentate n tabelul ce urmeaz:

    Nume metod Descriere Activate Realizeaz activarea unei foi de calcul;

    Select Realizeaz selectarea unei foi de calcul; (similar cu Activate) Delete Realizeaz tergerea unei foi de calcul;

    PrintOut From, To, Copies

    Realizeaz tiprirea foii de calcul la care se face referire; Aceast metod are 3 parametri de tip ntreg; From indic numrul pagini de la care se ncepe printarea; To indic numrul pagini pn la care se printeaz; Copies reprezint numrul de copii de tiprit;

    n editorul VBA metodele foii de calcul sunt afiate automat ntr-o list derulant dup ce este scris numele foii de calcul urmat de delimitatorul punct.

    Exemple:

    Feuil1.Activate

    ' realizeaz activarea foii de calcul Feuil1 Feuil2.Delete

    ' realizeaz tergerea foii de calcul Feuil2

    Metod a foii de calcul

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 17/45

    Feuil3.Move Sheets(2) ' realizeaz mutarea foii de calcul Feuil3 naintea foii de calcul Feuil2

    Feuil1.PrintOut 1,2,1 ' realizeaz printarea primelor dou pagini ale foii de calcul ntr-un singur exemplar

    Principalele evenimente ce pot fi atribuite unei foi de calcul sunt prezentate n tabelul de mai jos: Nume eveniment Descriere

    Activate Se realizeaz activarea unei foi de calcul;

    Change Se schimb foaia activ;

    SelectChange Realizeaz schimbarea celulei sau zonei curente cu alt celul sau zon (range)

    2.6. Proceduri i funcii predefinite 2.6.1. InputBox

    Unele proceduri sau funcii nu mai trebuie s fie definite deoarece ele sunt recunoscute implicit de calculator. Principalele funcii i proceduri predefinite sunt : InputBox i MsgBox. Funcia predefinit InputBox : este o funcie cu ajutorul creia se introduc date de la tastatura ( se citete de la tastatur). Vom prezenta n cele ce urmeaz un exemplu prin care vom ilustra modul n care se poate apela funcia MsgBox:

    Dim nume as String

    ------------------------------

    nume = InputBox(Introduceti numele :) -> ne solicita sa atribuim o valoare variabilei nume -------------------------------

    Apelarea funciei va afia pe ecran o fereastr de dialog , ca n figura de mai jos. n aceast fereastr se gsete o caset n care se introduce datele.

    Butonul pe care se apas pentru acceptarea datelor

    Butonul pe care se apas pentru anularea datelor

    Caseta pentru introducerea datelor

    Mesajul pentru introducerea datelor

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 18/45

    Dup ce aceasta fereastr apare pe ecran, se introduc datele, dup care se apas butonul Ok. Altfel variabilei nume i se atribuie valoarea citit de la tastatur (n cazul de mai sus Popescu).

    2.6.2. MsgBox Procedura standard MsgBox este folosit pentru afiare intr-o fereastr de dialog special a unei text (numere).

    Vom exemplifica folosirea acestei proceduri printr-un exemplu. Dim textul as String

    Private Sub CommandButton1_Click() textul = Am apelat procedura MsgBox MsgBox textul

    End Sub n acest caz apelarea acestei proceduri are ca efect afiarea pe ecran a ferestrei de mai jos:

    2.7. Afiarea valorii unei celule

    Vom realiza o prim aplicaie care va afia pe ecran valoarea unei celule din alt foaie de calcul dect cea care este activ.

    Pentru acesta vom crea un nou fiier Excel, iar n prima foaie de calcul vom insera un buton de comand, cruia i vom schimba parametrul Caption (din cel implicit CommandButton1 n Afieaz ) cu ajutorul tabelei de proprieti (parametri).

    Textul afiat

    Butonul pe care se apas pentru ca aceast fereastr s se nchid

    Tabela de proprieti (parametri)

    Butonul de comand cu parametrul Caption schimbat

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

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 19/45

    Dup aceasta vom activa editorul de cod VBA (apsnd pe al treilea buton) i din lista derulant cu obiecte de pe prima foaie de calcul vom alege CommandButton1, iar din lista de evenimente corespunztoare lui vom alege evenimentul Click.

    Codul corespunztor evenimentului Click este urmtorul:

    Private Sub CommandButton1_Click() Dim continut_celula As Variant continut_celula = Feuil2.Cells(1, "A") MsgBox continut_celula End Sub

    n aceast secven de cod variabila coninut_celula se declar ca fiind de tip Variant deoarece n ea se reine coninutul celulei (care poate fi de orice tip), iar Feuil2 este numele celei de-a doua foi de calcul din care vom afia valoarea celulei aflat pe primul rnd i prima coloan Dup scrierea codului se nchide editorul de cod VBA i se iese din modul de proiectare (se apas pe primul buton de pe bara de controale standard). Acum poate fi folosit butonul de pe prima foaie de calcul. Dac se efectueaz un click pe buton atunci coninutul primei celule din a doua foaie de calcul va fi afiat pe ecran.

    Controlul CommandButton1

    Lista derulant cu obiectele care se afl pe prima foaie de calcul

    Declararea evenimentului Click corespunztor controlului CommandButton1

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 20/45

    2.8. Copierea unei zone de celule cu ajutorul unui buton de comand

    n a doua aplicaie vom realiza copierea unei zone de celule dintr-o foaie de calcul n alta cu ajutorul unui buton de comand. Stabilim parametrul name pentru primele dou foi de calcul dintr-un fiier Excel astfel: prima foaie se va numi Foaie1 (cea n care se va copia), iar cea de-a doua se va numi Foaie2 (cea din care se va copia). Dup aceasta vom insera un buton de comand pe prima foaie de calcul i vom edita codul pentru evenimentul Click al butonului:

    Private Sub CommandButton1_Click() Foaie2.Range("A1:B2").Value = Foaie1.Range("A1:B2").Value End Sub Parametrul Range este de tip obiect i reprezint o zon de celule. Zona de celule la care

    parametrul Range face referire se scrie ntre paranteze rotunde i ghilimele astfel: se scrie adresa celulei aflate n colul stnga sus, urmat de : , dup care se scrie adresa celulei aflate n colul dreapta jos al zonei de celule. Parametrul Range fiind de tip Object are i el la rndul lui mai muli parametri, ntre care i parametrul Value. Acest parametru face referire la coninutul

    celulelor din zona de memorie respectiv.

    Butonul CommadButton1 din prima foaie de calcul

    Modul de proiectare este inactiv

    Afiarea pe ecran a coninutului primei celule din cea de-a doua foaie de calcul cu ajutorul funciei MsgBox

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 21/45

    Exemple:

    Exemplul 1. Private Sub Worksheet_Activate()

    MsgBox "a fost activat foaia de calcul" End Sub

    n acest exemplu este afiat un mesaj atunci cnd este activat o foaie de calcul.

    Exemplul 2 Dim linie As Integer Dim coloana As Integer Dim continut As String Private Sub Afisare_Click() linie = InputBox("introduceti rindul :") ' introduceti randul de pe care se face citirea. coloana = InputBox("introduceti coloana:") 'introduceti coloana de pe care se face citirea. Feuil2.Cells(1, 1) = Feuil1.Cells(linie, coloana) ' muta continutul randului si coloanei cerute in alta pagina. Feuil2.Activate End Sub Acest exemplu copiaza o zona de celula de la o alta locatie.

    TEMA: -Sa se introduca de la tastatura randul si coloana de unde se face citirea. -sa se coloreze in galben scrisul si in albastru fundalul in celula unde se afiseza valoarea celulei

    Zona de celule din prima foaie de calcul n care a fost copiat coninutul unei zone de celule din cea de-a doua foaie de calcul

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 22/45

    3. Instruciuni VBA

    ntr-un program datele sunt prelucrate cu ajutorul instruciunilor. Instruciunile se mpart n dou categorii: instruciuni de decizie i instruciuni repetitive; 3.1. Instruciunea de decizie If ..Then...Else (Dac.Atunci..In caz contrar)

    Instruciunea If ..Then...Else are urmtoarea sintax:

    If cond1 then Bloc_instruciuni (a) End If sau

    If cond1 then Bloc_instruciuni1

    Else (b) Bloc_instruciuni2

    End If

    n cazul (a) instruciunea evalueaz condiia cond1 i dac este adevrat execut blocul de instruciuni Bloc_instruciuni, iar dac este fals atunci instruciunea nu execut nimic. n cazul (b) instruciunea evalueaz condiia cond1 i dac este adevrat execut blocul de instruciuni Bloc_instruciuni1, iar dac este fals execut blocul de instruciuni Bloc_instruciuni2.

    Exemplu1 :

    Dim i as Integer , j as Integer , k as Integer Dim u as String

    Private Sub CommandButton1_Click() i = 9 j = 100 k = 0 If i < 100 then u = a

    k = k + 1 else u = b

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 23/45

    j = j- 2 End If End Sub

    Tema: -Depanare cu F8

    -Introduceti etichete pentru i,j si k -Introduceti caseta de unde sa il citeasca pe i -Introducerea unei etichete pentru a nota ce afiseaza alta eticheta (vizibil sau nu) -Preluarea variabilelor j si k din celule -Colorarea butoanelor in funtie de valori

    n cele ce urmeaz vom prezenta modul de executare al acestei secvene de cod. Iniial se atribuie valorile i=9, j=100 i k=0, apoi se execut instruciunea If n modul urmtor : se verific dac i

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 24/45

    instruciune If nu se execut deoarece u = b i condiia nu este ndeplinit (iar aceast instruciune If nu are ramura Else).

    3.2. Instruciunea de decizie Select Case End Select Instruciunea Select Case .. End Select are urmtoarea sintax:

    Select Case val Case val1 , val2 , : Bloc_instructiuni1

    Case lis1 , lis2 , : Bloc_instructiuni2 Case str1 , str2 , : Bloc_instructiuni3 Case Else Bloc_instructiuni4

    End Select unde val este o variabil iar val1, val2, ., lis1,lis2, .., str1, str2 reprezint valori de acelai tip cu cel al variabilei val sau expresii care returneaz un rezultat de acelai tip cu cel al variabilei val. Aceast instruciune se execut astfel: dac val se gsete n lista sau intervalul de valori sau expresii val1, val2, atunci se execut Bloc_instruciuni1; dac val se gsete n lista sau intervalul de valori sau expresii lis1, lis2, atunci se execut Bloc_instruciuni2 etc.; dac val nu se gsete n nici una dintre aceste liste de valori instruciunea Select Case nu execut nimic.

    Exemplu :

    Dim i as Integer

    Dim p as Boolean Dim u as String

    Dim v as String

    Private Sub CommandButton1_Click() i = 35

    Select Case i Case 10 , 20 : p = True

    Case 30 to 50 : u = abcd v`erific dac i [30,50] Case 60 , 70 : v = False

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 25/45

    Case Else End Select End Sub TEMA: -Sa se schimbe numele butonului in Select Case . -Sa se introduca de la tastatura valoarea lui i. - Sa se afiseze cu MsgBox daca i a indeplinit sau nu conditia. -Butonul Select Case sa isi schimbe culoarea in functie de rezultat.

    Modul de executare al secvenei de cod l vom prezenta n cele ce urmeaz. Se face i = 35 apoi se execut instruciunea Select Case altfel: se verific dac variabila i este egal cu 10 sau cu 20, dar cum i = 35 se continu executarea instruciuni verificnduse dac variabila i aparine intervalului (30,50]; cum i este egal cu 35 se face u = abcd . Similar se execut instruciunea CASE pn la capt.

    3.3. Instruciunea repetitiv For Next (pentru.........urmatorul) Instruciunea For . Next are urmtoarea sintax :

    For contor = val1 To val2

    Bloc_instruciuni

    Next unde contor, val1, val2 sunt toate de acelai tip. Aceast instruciune realizeaz executarea Bloc_instruciuni de val2 val1 ori; instruciunea are astfel un numr cunoscut de repetri. Observaie: val2 trebuie s fie mai mare dect val1 pentru ca instruciunea s se execute; dac val2 este mai mic dect val1 atunci Bloc_instruciuni nu se va executa.

    Exemplu 1:

    Dim i as Integer , k as Integer Dim m as Long

    Private Sub CommandButton1_Click() k = 0 m = 0

    For i = 1 To 5

    k = k +1

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 26/45

    m = m+i

    Next

    End Sub Aceast secven de cod se execut de cinci ori astfel : prima execuie face k = 1 i m = 0 + 1; a doua execuie face k = 2 i m = 1 + 2; a treia execuie face k = 3 i m = 3 +3; a patra execuie face k = 4 i m = 3 + 4; a cincea execuie face k = 5 i m = 7 + 5.

    Pentru al doilea exemplu se va folosi o variabila de tipul de date ir (array). O variabila array este o variabila ce poate stoca mai multe valori de acelasi tip. Declararea array se face dupa sintaxa:

    Dim NumeSir(numar elemente) As Tip

    Exemplu 2 :

    Dim I As Integer

    Dim sir(10) As Integer Private Sub CommandButton1_Click() For I = 0 To 9 sir(I) = Cells(I + 1, A ).Value Next I

    For I = 0 To 9 Cells(I + 1, B ).Value = sir(I)^2 Next I

    End Sub Aceasta secventa de cod insereaza valorile primelor zece randuri ale coloanei A intr-un sir, iar apoi plaseaz patratul acestor valori in primele zece randuri ale coloanei B. TEMA: - Depanare cu F8. -Sa se introduca de la tastatura k si m (InputBox) -Sa se afiseze valorile lui k si m pe doua coloane. - Sa se puna un buton pe foaia de calcul care sa faca patratul val lui k si sa le afiseze in col B

    3.4. Instruciunea repetitiv Do While Loop Instruciunea Do While Loop are urmtoarea sintax:

    Do While condiie Bloc_instrucini

    Loop

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 27/45

    Aceast instruciune execut Bloc_instrucini atta timp ct este ndeplinit condiia.

    Exemplu :

    Dim i as Integer

    Private Sub CommandButton1_Click() i = 0

    Do While i

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 28/45

    j = 0 Do Until j >=2

    j =j + 1 Loop

    End Sub TEMA: -Valoarea lui j sa fie afisata pe coloana B de la randul 1 in jos - Sa se introduca variabila (Text Box) pana unde se executa j

    Aceast secven este executat pn cnd condiia este ndeplinit i anume: La prima execuie i=0, se verific dac i >=2 i cum nu este adevrat, se incrementeaz i cu o unitate (i=i+1) => i=1; la a doua execuie i=1, se verific dac i>=2 i cum nu este adevrat se face i=2. Cum variabila i devine egal cu 2 aceast instruciune nu mai este executat.

    4. Proceduri i funcii

    n general un program este format din proceduri (evenimente) i funcii. De multe ori ntr-un program sunt secvene de cod care se repet. Pentru a evita scrierea repetat a acestor secvene, se utilizeaz funciile i procedurile, care se scriu o singur dat i apoi se apeleaz dup nume de cte ori este nevoie.

    4.1. Proceduri

    O procedur este un subprogram care efectueaz anumite operaii solicitate de programul apelant, putnd returna anumite valori.

    O procedur are urmtoarea sintax:

    Private Sub numeProcedur ( Lista_de_parametri as tipData ) Bloc_instruciuni End Sub

    Exemplu 1 :

    ___________________________________

    Private Sub mesaj (cuvant as String) Dim msj as String

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 29/45

    msj = Mesajul este : + cuvant MsgBox msj

    End Sub __________________________________

    Pe aceast procedur am numit-o mesaj i are un singur parametru cuvant de tipul String (ir). Variabila msj este local i poate fi folosit doar n procedura mesaj. n procedura mesaj variabilei msj i se atribuie valoarea Mesajul este : concatenat cu valoarea variabilei cuvant, care apoi este afiat pe ecran cu procedura predefinit MsgBox. Apelarea unei proceduri se face prin numele su urmat de lista de parametri efectivi. Spre exemplu apelarea proceduri mesaj se face altfel :

    Dim pm as String

    Private Sub CommandButton1_Click() pm = prima procedur

    mesaj pm apelarea proceduri mesaj End Sub Apelarea proceduri mesaj cu parametru efectiv pm are ca efect afiarea pe ecran a textului:

    Mesajul este: prima procedur Observaie :

    Variabila cuvant este un parametru formal, deoarece de la un apel la altul aceast variabila i schimb valoarea ;

    Variabila pm este parametru efectiv deoarece reprezint valoarea cu care programul lucreaz efectiv;

    Parametrul formal i parametrul efectiv trebuie, obligatoriu, s fie de acelai tip.

    Exemplu 2 :

    ______________________________________________________

    Private Sub mesaje ( cuvant1 as String , cuvant2 as String ) Dim msj1 as String , msj2 as String msj1 = Primul mesaj este : + cuvant1 msj2 = Al doilea mesaj este : + cuvant2

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 30/45

    MsgBox msj1 MsgBox msj2 End Sub

    _______________________________________________________

    Procedura mesaje are doi parametri i anume cuvant1 i cuvant2. Variabilele msj1 i msj2 sunt locale i pot fi folosite doar n aceast procedur. n procedur variabilei msj1 i se atribuie valoarea Primul mesaj este concatenat cu valoarea parametrului cuvant1, iar variabilei msj2 i se atribuie valoarea Al doilea mesaj este concatenat cu valoarea parametrului formal msj2. Dup aceasta, valorile variabilelor msj1 i msj2 sunt afiate pe ecran cu procedura predefinit MsgBox.

    Apelarea acestei proceduri se face in modul urmtor :

    Dim pm1 as String , pm2 as String

    Private Sub CommandButton1_Click() pm1 = prima procedur pm2 = a doua procedur mesaje pm1 , pm2 apelarea procedurii mesaje End Sub

    Apelarea procedurii mesaje cu parametri efectivi pm1, pm2 are ca efect afiarea pe ecran : Primul mesaj este : prima procedur Al doilea mesaj este : a doua procedur

    4.2. Funcii

    O funcie este un subprogram care calculeaz i returneaz programului apelant o singur valoare. Aceast valoare este asociat numelui funciei.

    Sintaxa unei funcii este urmtoarea :

    Private Function numeFuncie(lista_parametri as tipDat1) as tipDat2 Bloc_instruciuni NumeFuncie = val End Function

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 31/45

    Unde numeFuncie reprezint numele propriu-zis al funciei, lista_parametri reprezint o list de parametri de tipul tipDat1 iar val este o valoare de tipul tipDat2 pe care funcia o ntoarce n programul apelant.

    Exemplu :

    ______________________________________________________________________

    Private Function salariu(nr_ore as Integer , impozit as Single) as Single Dim sal as Single sal = nr_ore * 20 sal = sal impozit salariu = sal End Function

    Aceast funcie are doi parametri: nr_ore de tipul Integer i impozit de tipul Single. Ea returneaz un rezultat de tipul Single - salariu. Variabila local sal este folosit pentru a calcula un salariu. Dup ce s-a calculat salariul, se asociaz valoarea salariului cu numele funciei (salariu = sal). Apelarea unei funcii se face prin numele funciei urmat n parantez de lista de parametri efectivi.

    Exemplu :

    Dim n_ore as Integer

    Dim imp as Single Dim valoare_sal as Integer Private Sub CommandButton1_Click() n_ore = 200

    imp = 900 valoare_sal = salariu(n_ore , imp) > apelul funciei salariu

    MsgBox valoare_sal End Sub TEMA: -Sa se introduca de la tastatura nr . de ore lucrate. -Sa se introduca de la tastaura tariful orar. -Sa se imparta impozitul in trei grupe de impozitare, iar acesta s fie citit din celule. -Numarul de ore sa fie citit dintr-un tabel cu zilele lucrate si nr. de ore pe ziua respectiva.

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 32/45

    Prin apelul funciei salariu s-a reinut n variabila valoare_sal valoarea returnat de funcia salariu pentru parametri efectivi n_ore i imp. Dup aceasta, valoare_sal va fi afiat pe ecran cu ajutorul procedurii speciale MsgBox.

    Observaie : apelarea unei funcii se poate face numai n membrul drept al unei operaii de atribuire.

    5. Aplicaii VBA

    In acest capitol vom realiza o serie de aplicaii ce se pot constitui n puncte de plecare pentru realizarea unor aplicaii personalizate, n funcie de necesitile fiecrui utilizator n parte.

    5.1. Aplicaia 1 Afiarea valorii i adresei celulei curente

    Aceast aplicaie va afia noua valoare i adresa unei celule ori de cte ori este modificat. Pentru acesta vom apela la evenimentul Change al foii de lucru curente (WorkSheet). Acest eveniment este declanat dup ce valoarea unei celule a fost modificat.

    Observaie: ntotdeauna obiectul care desemneaz foaia de lucru activ din lista derulant cu controale indiferent de numele acesteia este WorkSheet. Pentru realizarea acestei aplicaii nu este nevoie de nici un control, ci trebuie doar editat un cod pentru evenimentul Change al foii de calcul.

    Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim adresa_cel As Variant Dim continut_cel As Variant Dim mesaj As String adresa_cel = Target.Address continut_cel = Target.Value mesaj = "Valoarea celulei " + Cstr(adresa_cel) + " este acum " + Cstr(continut_cel) MsgBox mesaj End Sub

    Dac modificm valoarea unei celule va fi afiat un mesaj care conine adresa i noua valoare a celulei.

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 33/45

    5.2. Aplicaia 2 Calcularea numrului nregistrrilor nevide dintr-o foaie de calcul

    Vom realiza o aplicaie care va afia numrul de nregistrri nevide ale unei foi de calcul presupunnd c acestea sunt aezate n ordine. Numrul de nregistrri va fi afiat folosind un buton de comand. Pentru a afla numrul de nregistrri nevide construim o funcie care returneaz acest numr.

    Private Function numar_inr() As Integer Dim inc as Integer

    inc = 1

    Do While Feuil1.Cells(inc, 1) "" inc = inc + 1

    Loop

    numar_inr = inc - 1

    End Function Aceast funcie folosete o variabil inc care se incrementeaz atta timp ct coninutul celulei din linia inc i coloana 1, nu este nul. Dup ce instruciunea While este executat valoarea returnat de funcie este egal cu valoarea variabilei inc-1.

    Observaie: Valoarea returnat de funcie este inc-1 deoarece incrementarea s-a nceput de la 1 i nu de la zero.

    Incrementarea se ncepe de la unu deoarece celula cu adresa (0, 1) nu exist. n continuare vom scrie codul pentru evenimentul Click al butonului de comand.

    Valoarea celulei A1 a fost schimbat din celula1 n aaaa

    Dup ce celula A1 nu mai este celula activ , va fi afiat acest mesaj.

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 34/45

    Private Sub CommandButton1_Click() Dim nr as Integer

    nr = numar_inr

    MsgBox nr

    End Sub

    Valoarea returnat prin apelarea funciei numar_inr este reinut n variabila nr, care va fi afiat pe ecran.

    5.3. Aplicaia 3 Cutarea automat a unui cuvnt citit de la tastatur

    Vom realiza o aplicaie care va cuta ntr-o foaie de calcul un cuvnt (citit de la tastatur) i va returna un mesaj dac acest cuvnt este gsit sau un alt mesaj dac nu este gsit. Afiarea rezultatelor se va face cu ajutorul unui buton de comand. Pentru realizarea acestei aplicaii vom folosi funcia din aplicaia 4 numar_inr. Dim nume_c As String

    Dim apar As Integer

    Dim msj As String Dim k As Integer Private Sub CommandButton1_Click() nume_c = InputBox("Introduceti numele : ") For k = 1 To numar_inr

    Ultima nregistrare

    Numrul de nregistrri

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 35/45

    If ActiveSheet.Cells(k, 1) = nume_c Then apar = apar + 1

    ActiveSheet.Cells(k, 1).Interior.Color = vbGreen End If Next k If apar 0 Then

    msj = "Numele " + nume_c + " a fost gasit de " + CStr(apar) + " ori" MsgBox msj

    Else msj = "Numele " + nume_c + " nu a fost gasit" MsgBox msj End If End Sub _______________________________________

    Private Function numar_inr() As Integer Dim inc As Integer

    inc = 1

    Do While ActiveSheet.Cells(inc, 1) "" inc = inc + 1

    Loop

    numar_inr = inc - 1

    End Function TEMA: -Inserarea a inc 2 coloane si cautarea dupa oricare dintre ele. -Folosirea functiilor Ucase si Lcase. -Introducerea unor butoane radio in functie de care sa se coloreze rezultatele. -Afisarea in etichete a rezultatului gasit si de cate ori a fost gasit. n variabila nume_c este reinut valoarea citit de la tastatur, iar n variabila apar sunt reinute numrul de apariii al numelui cutat nume_c. Dac valoarea lui apar este diferit de zero atunci nseamn c numele a fost gsit de un numr de ori, iar celulele unde apare acest nume vor fi colorate n rou i este afiat un mesaj. Dac valoarea variabilei apar este zero atunci numele nu a fost gsit i este afiat un alt mesaj.

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 36/45

    5.4. Aplicaia 4 Folosirea casetei list si controlului de tip list derulant. Caseta lista (list box) si controlul de tipul list derulant (combo box) ofera utilizatorilor

    posibilitatea de a alege obiecte dintr-o lista. Exista doua diferente majore intre un combo box si un list box. Prina diferenta o constituie faptul ca lista derulanta arata continutul numai atunci cand este desfasurata (click pe sageata din dreapta listei). A doua diferenta este ca din caseta lista se pot selecta mai multe obiecte, in timp ce folosind controlul de tipul list derulant se poate selecta un singur obiect.

    Pentru a ilustra lucrul cu liste vom crea un exemplu ce va conine urmtoarele obiecte: Un formular UserForm1, un buton de comand CommandButton1, o list combo

    ComboBox1 i o list simpl ListBox1, ca n figura de mai jos:

    Aplicaia va funciona astfel: La deschiderea fiierului Excel va fi afiat formularul UserForm1. La fiecare apsare de buton va fi ncrcat n cele dou liste ComboBox1 i ListBox1 un

    ir de caractere de forma modelXX , unde XX este un numr generat aleator cuprins ntre 1 i 20.

    Codul este urmtorul: Private Sub Workbook_Open() UserForm1.Show End Sub

    Dim nume_nou As String Dim msg As String Dim nr As Integer

    Numele cutat

    Mesajul afiat

    UserForm1

    ComboBox1

    ListBox1

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 37/45

    Private Sub CommandButton1_Click() nr = Int(20 * Rnd) + 1 ' genereaz un nr. ntreg aleator ntre 1 i 20 nume_nou = "Model" + CStr(nr) ' CStr convertete variabilele numerice n variabile de

    tip ir ComboBox1.AddItem nume_nou

    ListBox1.AddItem nume_nou

    End Sub

    TEMA: -Sa se introduca in foaua de calcul un firmular. -Introducere de butoane in acesta (ComboBox , ListBox , ComandButon....) -Apelarea formularului in alta foaie de calcul cu ajutorul unui buton.

    5.5. Aplicaia 5 Actualizarea dinamic a unui grafic Vom concepe o aplicaie care realizeaz actualizarea dinamic a unui grafic. Aceast

    aplicaie este util n cazul graficelor care sunt des modificate (sunt inserate rnduri/nregistrri i coloane/cmpuri noi). Aplicaia cuprinde o singur foaie de calcul pe care se afl 3 serii de date i un buton Command1 numit Actualizare .

    Codul corespunztor aplicaiei este urmtorul.: Private Sub CommandButton1_Click()

    Call cauta(nr_c, nr_r) ' determina cte rnduri i coloane avem ocupate zona = "A1:" + Chr(64 + nr_c) + CStr(nr_r) ' Stabilete zona de date, iar chr(64) = "A", chr(65)="B" ... etc. Call grafic(zona) ' apeleaza funcia de trasare a graficului

    End Sub

    Function cauta(c, r) r = 1 Do Until Me.Cells(r, 1) = "" r = r + 1 Loop r = r - 1 c = 1 Do Until Me.Cells(1, c) = "" c = c + 1 Loop c = c - 1 End Function

    Function grafic(z) Range(z).Select selecteaz zona de date

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 38/45

    On Error Resume Next 'in caz de eroare merge mai departe Me.ChartObjects.Delete ' sterge toate graficele din foaia activ Charts.Add 'creaz un grafic nou Observaie: Liniile de cod urmtoare au fost generate printr-un macro, iar dup ce am observat logica lor am operat asupra lor modificrile dorite

    With ActiveChart

    .HasTitle = True .ChartTitle.Characters.Text = "Grafic productie" ' titlul graficului .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Zile" 'explicaia de pe abcis (categorie) .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Buc." ' explicaie pentru ordonat (valoare) .ChartType = xlLineMarkers ' indicm tipul graficului .SetSourceData Source:=Sheets("Foaie1").Range(z), PlotBy:=xlColumns 'indicm sursa de date .SeriesCollection(1).Name = "=""Depart.1""" ' Legenda .SeriesCollection(2).Name = "=""Depart.2""" .SeriesCollection(3).Name = "=""Depart.3""" .Location Where:=xlLocationAsObject, Name:="Foaie1" ' indicm locaia graficului

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

    TEMA: -Creati un tabel asemanator (din exemplu dat) cu actualizare automata. -Pe graficul initial din exemplu; la zile sa scrie data si sa afiseze data din ziua resptiva.

    -Titlul sa fie inserat dintr-o caseta text.

    5.6. Aplicaia 6 Crearea unui configurator automat

    Vom concepe o aplicaie care realizeaz completarea unei liste de componente a cror valoare va fi nsumat. Aplicaia este util n realizarea de configuraii specifice pentru un echipament (automobil, calculator etc.) i calcularea preului acestuia. Aplicaia cuprinde dou foi de calcul. Prima foaie conine lista componentelor i preurile acestora, iar n foaia a doua se realizeaz calculul listei particularizate. In prima foaie de calcul sunt dou butoane: unul pentru adugare elemente, iar cellalt pentru reiniializare.

    Codul corespunztor aplicaiei este: 1. Pentru prima foaie de calcul Dim cnt As Integer

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 39/45

    Private Sub Adauga_Click() 'procedura se activeaz prin click pe butonul "Adauga" (evenimentul click)

    Dim x As Integer, y As Integer

    Dim reper As String, valoare As Single 'Declarare variabile

    cnt = cnt + 1 ' cnt= numr nregistrri adugate n foaia "Vizualizare"

    x = ActiveCell.Row ' x = rndul celulei active y = ActiveCell.Column ' y = coloana celulei active If y 1 Then y = 1 aduce celula activ n coloana 1 End If reper = Feuil1.Cells(x, y) ' reper = numele reperului selectat valoare = Feuil1.Cells(x, y + 1) ' valoare = valoarea reperului selectat Feuil2.Cells(cnt, 1) = reper ' se adaug numele reperului n

    foaia 2 "Vizualizare" pe poziia cnt Feuil2.Cells(cnt, 2) = valoare ' se adaug valoarea reperului n foaia 2

    "Vizualizare" pe poziia cnt Feuil2.Cells(1, 3) = cnt ' se retine numrul de nregistrri din list End Sub Private Sub Terminare_Click() 'procedura se activeaz prin click pe butonul

    "Terminare" (evenimentul click) cnt = 0 'se initializeaz contorul ce retine nr.de nregistrri Feuil2.Activate ' este activat foaia 2 "Vizualizare" Feuil2.Cells.Select 'sunt selectate toate celulele din foaia 2 Selection.ClearContents ' terge coninutul zonei selectate Feuil2.Cells(1, 1).Select ' selecteaz prima celul Feuil1.Activate ' revenire n foaia 1 "Introducere" End Sub 2. Pentru a doua foaie de calcul Dim cnt As Integer

    Private Sub Worksheet_Activate() 'Procedura se execut prin activarea foii 2

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 40/45

    "Vizualizare" Dim adresa As String, sel As String 'Declararea variabilelor If Feuil2.Cells(1, 3) "" Then cnt = Feuil2.Cells(1, 3) + 1 Else Exit Sub End If 'se verific dac exist nregistrri n foaia 2; dac sunt se adaug o linie pt.TOTAL; dac nu sunt nregistrri se iese din procedur

    Feuil2.Cells(cnt, 1) = "TOTAL" 'In foaia 2 pe rndul cnt, coloana 1 se scrie "TOTAL"

    adresa = "B" + CStr(cnt) ' se calculeaz poziia celulei ce va conine valoarea total sel = "B1:B" + CStr(cnt - 1) ' variabila sel conine adresa zonei de celule ce

    vor fi totalizate Range(sel).Select ' este selectat zona de celule dup care se va face totalul Range(adresa).Activate 'Se activeaz celula unde va fi scris totalul ActiveCell.Formula = "=SUM(" + sel + ")" ' n celula activ se insereaz

    formula sum(sel) Columns("A:A").EntireColumn.AutoFit ' se potrivete ntreaga coloan la

    mrimea coninutului Columns("B:B").EntireColumn.AutoFit End Sub

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 41/45

    Tema: -Depanare program cu F8. -Modificarea configuratorului prin adaugarea altor doua coloane (cantitate si valoare) si a capatului de tabel.

    5.7. Aplicaia 7 Crearea unui formular i completarea automat a acestuia

    Vom crea o aplicaie care realizeaz completarea automat a unei cereri, n funcie de un nume care este citit de la tastatur. Aceast aplicaie va folosi dou foi de calcul. n cea de-a doua foaie de calcul se introduc datele care sunt completate n cerere. n prima foaie de calcul este realizat ablonul care va fi completat. Acest ablon este format dintr-un antet i dou butoane de comand. Primul buton va fi utilizat pentru completarea automat a datelor, iar cel de-al doilea pentru printarea acestei cereri. Pentru realizarea acestei aplicaii vom utiliza funciile numar_inr i

    gsete din aplicaiile anterioare. Codul corespunztor primei foi de calcul este urmtorul:

    ' Declar variabilele nrinreg - numar inregistrari si zona - zona cu date Dim nrinreg As Integer: Dim zona As String

    Private Sub Worksheet_Activate() ListBox1.ColumnCount = 3 Call numar_inr(nrinreg) zona = ("a1:c" & CStr(nrinreg)) ListBox1.List() = Foaie2.Range(zona).Value Foaie1.Select

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 42/45

    End Sub

    Private Sub CommandButton1_Click() 'citirea datelor se face din list box, coloana 1, 2 sau 3 ListBox1.BoundColumn = 1 LbNume.Caption = ListBox1.Value ListBox1.BoundColumn = 2 Lbsectia.Caption = ListBox1.Value ListBox1.BoundColumn = 3 LbSalariu.Caption = ListBox1.Value

    End Sub

    Private Sub CommandButton2_Click() Foaie1.PrintOut 1, 1, 1

    End Sub Private Function numar_inr(n) As Integer Dim inc As Integer

    inc = 1

    Do While Foaie2.Cells(inc, 1) "" inc = inc + 1

    Loop

    n = inc - 1

    End Function n evenimentul Click al butonului CommandButton2 este apelat metoda PrintOut a

    primei foi de calcul. Aceast metod are trei parametri: primul parametru(From) indic numrul pagini de la care ncepe printarea, al doilea parametru(To) indic numrul pagini pn la se printeaz, iar cel de-al treilea reprezint numrul de copii care este printat. n aceast aplicaie este printat o singur pagin, ntr-un singur exemplar. Prima foaie de calcul este prezentat in imaginea de mai jos:

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 43/45

    TEMA: -Depanare program cu F8. -Adaugarea in formular a unei functii pentru a afisa intr-o celula colana INDEX a listei cu angajati (nr de ordine al inregistrarii). -introducera in baza de date a inca 2 coloane -CNP si -MARCA (Generate aleator). -Completarea formularului prin dubluclick pe lista. -Modificati proprietatile PrintObject. -Crearea unui buton pentru completarea automata a formularului , pentru toate inregistrarile din baza de date.

    5.8. Aplicaia 8. -Crearea unui tabel pivot. Una din problemele des ntlnite n activitatea curent este necesitatea crerii de tabele

    pivot. Pentru a uura lucrul cu aceste tipuri de tabele vom imagina o aplicaie care ne va permite

    cu uurin modificarea cmpurilor tabelului pivot.

    Codul aplicaiei este urmtorul:

    Dim campPag As String, campRow1 As String Dim campCol1 As String, campDta As String Dim camp

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

    Butonul CommandButton1 Butonul CommandButton2

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 44/45

    Dim Myarray(10) Dim i As Integer, r As Integer

    Private Sub Workbook_Open() PivotFrm.pivotBtn.Enabled = False i = 1 'Stabilim nr.de coloane nevide din foaia de lucru camp = ActiveSheet.Cells(2, i) Do While camp "" camp = ActiveSheet.Cells(2, i) i = i + 1 Loop r = i - 3 'Stabilim nr.de coloane pentru listBox PivotFrm.PivotLst.ColumnCount = 1 'Incarcam listBoxul cu date (aceste date sunt cele din capul de tabel) For k = 0 To r PivotFrm.PivotLst.AddItem (ActiveSheet.Cells(2, k + 1)) Next k

    'Initializam campurile formularului PivotFrm.PagTxt.Value = campPag PivotFrm.RandTxt.Value = campRow1 PivotFrm.ColTxt.Value = campCol1 PivotFrm.DateTxt.Value = campDta

    'Selectam primul element din listBox PivotFrm.PivotLst.ListIndex = 0

    'PivotFrm.PivotLst.List(k) = Myarray()

    PivotFrm.Show 'PivotFrm.Visible = True

    End Sub

  • @2003 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat Tel/fax: 0248-262340

    www.formare.ro 45/45

    Tabelul pivot obtinut va arata asemanator cu cel din imaginea de mai jos: