+ All Categories
Home > Documents > Suport Curs Excel Avansat

Suport Curs Excel Avansat

Date post: 31-Oct-2015
Category:
Upload: medeea89
View: 399 times
Download: 80 times
Share this document with a friend
Description:
Suport Curs Excel Avansat

of 46

Transcript
  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 1/46

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 2/46

    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 (VBA);

    crearea de formulare;

    crearea de aplicatii.

    Toate aceste informaii vor completa cunotinele deja acumulate privind lucrul cu foile de calcul

    tabelar MS Excel, astfel nct s fac din acesta un instrument puternic care s preia mare parte

    din sarcinile dumneavoastr de serviciu.

    2. Elemente de programare n VBA pentru EXCEL

    In spatele MS Excel firma Microsoft a inclus un editor de comenzi VBA (Visual Basic

    for Applications), ce permite modificarea i scrierea de macrouri i aplicaii care s automatizeze

    lucrul cu foile de calcul Excel. Acest editor este de fapt un limbaj de programare de nivel nalt,

    utilizarea lui implicnd cunotine corespunztoare.

    2.1. Bara de controale standard

    Bara de controale standard se afieaz pe ecran astfel:

    din meniul Outils se alege opiunea Personalizer;

    va aprea o fereastr cu trei butoane din care se alege opiunea Barres doutils i se

    bifeaz opiunea Commandes;

    Caseta 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

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

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 3/46

    program) i a treia parte este format din butonul 15 care este folosit pentru a aduga noi

    controale.

    Butonul 1 este folosit pentru intrarea/ieirea din modul de proiectare. Dac acest buton

    este activat, n foaia de calcul pot fi adugate noi controale (obiecte fizice). n acest caz

    controalele de pe foaia de calcul nu sunt active. n cazul n care butonul nu este apsat

    controalele sunt active, iar programul poate fi rulat.

    Butonul 2 este folosit pentru afiarea unui tabel cu ajutorul cruia se pot vizualiza

    principalele proprieti (parametrii) ale controlului activ din foaia de calcul sau chiar al foii de

    calcul.

    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).

    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 csu 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

    Numele i tipul obiectului pentru

    care sunt afiate proprietile

    Valoarea unui

    parametru(proprietate)

    Numele parametrului

    ( proprietii )

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 4/46

    controale. Orice aplicaie pe care o crem poate fi executat prin apsarea unui buton de

    comand.

    Butonul 7 este un control de tipul buton radio (OptionButton ) i are dou stri

    selectat/neselectat. Dac pe o foaie de calcul se gsesc mai multe astfel de controale numai

    unul dintre ele poate s fie n starea selectat.

    Butonul 8 reprezint un control de tipul caset list(ListBox) i este folosit pentru

    afiarea unor valori selectate dintr-o list.

    Butonul 9 reprezint un control de tipul list derulant(ComboBox) i este folosit pentru

    alegerea unei valori dintr-o list derulant.

    Cea mai important metod a unui control ComboBox este AddItem. Metoda AddItem permite

    asugarea unei noi valori n lista derulant.

    Butonul 10 reprezint un control de tipul buton comutator (ToggleButton), care are dou

    stri: apsat i neapsat.

    Butonul 11 reprezint un control de tipul buton de incrementare/decrementare

    (SpinButton) i incrementeaz(crete)/decrementeaz(descrete) valoarea parametrului Value de

    cte ori este apsat una din cele dou sgei(n sus sau n jos).

    Butonul 12 reprezint un control de tipul bar derulant (ScrollBar) i poate fi folosit

    pentru defilarea unor controale sau foi de calcul. Aceasta bar de defilare poate s fie vertical

    sau orizontal. Orientarea barei de defilare se stabilete cu ajutorul parametrului Orientation;

    dac acest parametru are valoarea 0 atunci bara este orizontal iar dac este 1 atunci bara este

    vertical.

    Butonul 13 reprezint un control de tip etichet (Label) i de obicei este folosit pentru

    etichetarea altor controale.

    Butonul 14 este folosit pentru a insera n foaia de calcul un control de imagine (Image).

    Cel mai important parametru al acestui control este Picture. Acest parametru este folosit pentru a

    stabili ce fiier tip imagine va conine (afia) acest control.

    Butonul 15 (More controls) este folosit pentru a aduga noi controale care nu se gsesc

    n bara standard. Dup ce se apas click pe buton va aprea o list derulant din care se poate

    alege controlul dorit.

    Butonul More controls

    Un control din list

    Lista derulant

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 5/46

    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.

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 6/46

    2.2. 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. 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.3. Tipuri de date folosite n VBA

    Ca orice limbaj de programare i VBA folosete date i instruciuni care, structurate ntr-un anumit mod, permit execuia comenzilor dorite. Principalele tipuri de date folosite n cadrul VBA sunt prezentate n tabelul urmtor:

    Tip dat Descriere Operaii permise

    Integer (nr.ntreg) tip de dat numr ntreg cuprins ntre 32.768 i +32.767

    adunarea, scderea, nmulirea, mprirea, atribuirea

    Cadranul foilor de

    calcul

    Cadran de editare

    cod VBA

    Lista cu obiecte

    Lista

    evenimentelor

    obiectului

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 7/46

    Tip dat Descriere Operaii permise

    Long tip de dat numr ntreg cuprins ntre 2.147.483.648 i +2.147.483.647

    adunarea, scderea, nmulirea, mprirea, atribuirea

    Single (simpl precizie)

    tip de dat numr real (maxim 8 zecimale) Idem

    String (ir)

    Tip de dat ir de caractere atribuire, concatenarea (adunarea) i trunchierea

    Boolean (logic)

    tip de dat logic i este format din mulimea { TRUE (ADEVRAT) i FALSE (FALS)}

    operaii logice (AND, OR, etc) i atribuire

    Object (obiect)

    tip de dat complex

    Variant

    tip de dat care le include pe toate celelalte

    2.4. Linii de cod, proceduri, funcii, parametri

    Sarcina noastr este s crem mici aplicaii (programe) prin care s automatizm o parte

    din lucrrile zilnice. Pentru aceasta vom insera un buton de comand (CommandButton) n foaia

    de lucru, cu numele Btn1. Executnd dubluclick pe acesta vom ajunge n editorul Visual Basic.

    Aici ncepem s crem aplicaia dorit, prin scrierea de linii de comand. Liniile de

    comand conin cuvinte-cheie recunoscute de limbajul de programare, iar scrierea lor trebuie s

    respecte sintaxa specific VBA.

    Dac dorim s aflm sintaxa anumitor comenzi, putem genera un mic macro care s

    execute aceste comenzi, dup care s-l editm i s copiem din el liniile de cod care ne

    intereseaz.

    Liniile de cod care se repet le putem grupa n proceduri (subrutine) sau funcii. Acestea

    se pot apela dup numele lor ori de cte ori este nevoie. Procedurile i funciile pot avea

    parametri. Spre exemplu putem crea o functie numit stergere care poate avea ca parametru

    numele foii de calcul pe care dorim s o tergem.

    In principal, liniile de cod vor executa anumite operaiuni asupra unor obiecte VBA.

    2.5. Descrierea unui obiect

    Principalele elemente cu care vom lucra n cadrul VBA se numesc obiecte. Exemple de

    obiecte sunt: butoanele de comand, foaia de calcul, celula, rndul, coloana, etc.

    Obiectele VBA sunt identificate printr-un nume i se pot caracteriza cu ajutorul a trei

    elemente : proprieti, metode i evenimente.

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 8/46

    a) Proprietile reprezint caracteristicile obiectului respectiv; exemple de propieti:

    culoare, tip font, lime, nlime, etc. Aceste proprieti pot fi modificate conform sintaxei :

    numeObiect.numeProprietate = Valoare,

    Observm c proprietatea unui obiect este separat de numele obiectului printr-un punct.

    Citirea unei linii de cod ce include o niruire de obiecte i parametri se face de la dreapta

    la stnga, conform modelului urmtor:

    WorkSheets(Foaia1).Cells(1, "a").Font.Color = vbGreen, se

    citete de la dreapta la stnga, astfel: culoarea fontului celulei (1,a) din foaia de calcul cu

    numele Foaia1 va fi de culoare verde.

    Observm c obiectele i proprietile acestora sunt separate ntre ele printr-un punct.

    In tabelul de mai jos sunt prezentate sintetic principalele proprieti ale unui obiect VBA:

    Nume

    proprietate/parametru

    Descriere

    BackColor, Color,

    ColorIndex

    Acesti parametri 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 (logic). Dac parametrul are valoarea True

    (Adevrat), atunci obiectul este activ. Dac parametrul are

    valoarea False (Fals) atunci obiectul este inactiv.

    Font Acest parametru este folosit pentru stabilirea caracteristicilor

    fontului folosit pentru scrierea textului de pe obiect.

    ForeColor Prin acest parametru se poate stabili culoarea fontului pentru

    scrierea textului de pe obiect.

    Height Reprezint 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 (Logic); Dac valoarea este True

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 9/46

    Nume

    proprietate/parametru

    Descriere

    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.

    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. Exemple de metode: tergerea,

    copierea, activarea, etc.

    Apelarea unei metode o vom ilustra prin cteva exemple :

    Exemplul 1 :

    Pentru acest prim exemplu vom crea un fisier excel numit ziua1.xls, iar in prima foaie de calcul

    inserm 2 butoane de comand.

    La aceste butoane vom modifica proprietatea nume in Btn1, respectiv Btn2, proprietatea Caption

    in Buton 1, respectiv Buton 2.

    Executand dubluclick pe fiecare buton in parte vom intra in partea de cod a fiecaruia si scriem

    urmatorul cod:

    Private Sub Btn1_Click()

    MsgBox "Ati apasat butonul 1"

    Btn1.Enabled = False

    Btn2.Enabled = True

    End Sub

    Tema:

    1. Scrieti codul aferent celuilalt buton de comanda (Btn2), astfel incat la apasarea fiecaruia dintre

    butoane, sa se aplice metoda Enable=False pentru butonul apasat si Enable=True pentru celalalt

    buton de comanda.

    2. Modificati din liniile de cod, cateva proprietati ale butoanelor de comanda (ex. Forecolor )

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 10/46

    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; procedurile se apeleaz automat

    la o aciune a utilizatorului asupra unui obiect. Un eveniment trebuie declarat n prealabil, iar

    declararea unui eveniment se face ntr-o procedur special generat automat. Sintaxa unui

    eveniment este urmtoarea:

    Private Sub numeObiect_numeEveniment()

    Bloc_instructiuni

    End Sub

    Din exemplul precedent observam ca butoanelor de comanda Btn1 i Btn2 li s-a aplicat

    evenimentul Click().

    Exemplul 2:

    Private Sub Worksheet_Activate()

    MsgBox "Ati activat Foaia3"

    End Sub

    La activarea Foii3 de calcul va fi afiat un mesaj. Operaiunea este ilustrat n figura

    urmtoare

    Selectm obiectul Selectm evenimentul

    Foaia de calcul curent

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 11/46

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

    Nume eveniment Descriere

    Activate

    Evenimentul este declanat la activarea unui obiect (ex.

    Deschiderea unei foi de calcul)

    Click Acest eveniment este declanat n momentul care se efectueaz

    un click al butonului din stnga al mouse-lui pe obiect.

    (Ex.apsarea unui buton de comand)

    DoubleClick Evenimentul 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 .

    2.6. 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 (ir de caractere)

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

    zon de celule.

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 12/46

    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.

    Exemplul 3:

    In prima foaie de calcul din fisierul creat anterior sa se insereze un buton de comanda numit

    BtnFoaie, avand proprietatea Caption=Nume foaie

    Introducem urmatoarea linie de cod

    MsgBox Feuil1.Name

    ' afieaz numele primei foi de calcul

    Feuil1.Name = "Prima Foaie"

    ' numele primei foi de calcul este schimbat cu Prima Foaie

    MsgBox Feuil1.Cells(2, "A")

    ' 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)

    Principalele metode ale unei foi de calcul sunt prezentate n tabelul ce urmeaz:

    Nume metoda Descriere

    Activate Realizeaz activarea unei foi de calcul;

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

    Delete Realizeaz tergerea unei foi de calcul;

    Proprietate a

    foii de calcul

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 13/46

    Nume metoda Descriere

    PrintOut From,

    To, Copies

    Realizeaz printarea foii de calcul la care se face referire;

    Aceast metod are 3 parametri de tip numr ntreg; From indic numrul

    pagini de la care se ncepe printarea; To indic numrul pagini pn la care

    se printeaz; Copies reprezint numrul de copii printat;

    In editorul VBA metodele foii de calcul sunt afiate automat ntr-o list derulant, dup

    ce este scris numele foii de calcul urmat de delimitatorul punct.

    Exemple:

    Feuil1.Activate

    ' realizeaz activarea foii de calcul Feuil1

    Feuil2.Delete

    ' realizeaz tergerea foii de calcul Feuil2

    Feuil3.Move Sheets(2)

    ' realizeaz mutarea foii de calcul Feuil3 naintea foii de calcul Feuil2

    Feuil1.PrintOut 1,2,1

    ' realizeaz printarea primelor dou pagini ale foii de calcul ntr-un singur exemplar

    ActiveSheet

    `Prin intermediul aceste comenzi se lucreaza cu foaia activa

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

    Nume eveniment Descriere

    Activate Ruleaza codul la activarea unei foi de calcul;

    SelectChange Ruleaza codul la selectarea unei celule sau zone

    Metod a foii

    de calcul

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 14/46

    2.7. Declararea variabilelor VBA

    Variabilele sunt date cu care opereaz calculatorul i sunt de dou tipuri:

    globale (sunt recunoscute n tot programul);

    locale (sunt recunoscute doar n interiorul unei proceduri sau funcii);

    Pentru a fi recunoscut de calculator o variabil trebuie mai nti s fie declarat. Aceast

    declarare se face cu ajutorul cuvntului rezervat Dim.

    Sintaxa:

    Dim numeVariabil1 as tipVariabil, numeVariabil2 as

    tipVariabil...

    Exemplul 4:

    Dim valoare as Integer

    Private Sub BtnFoaie_Click()

    valoare = Feuil1.Cells(43, "b")

    MsgBox valoare

    End Sub

    Observatie: Pentru a prentmpina eventualele erori de scriere a variabilelor, pe prima linie

    de cod se va scrie instructiunea OPTION EXPLICIT. In caz contrar, dac o variabil

    declarat cu numele rind, spre exemplu, este apelata in program cu numele rand,

    programul nu va semnala greseala, in schimb rezultatul obtinut va fi eronat. Prin utilizarea

    instructiunii OPTION EXPLICIT programul va solicita declararea variabilei rand si

    qstfel vom observa greseala de scriere.

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 15/46

    2.8. Principalele operatii cu variabile

    a) Concatenarea mai multor iruri de caractere se realizeaza cu ajutorul operatorului +

    Ex.: sir1=Dumitru, sir2=Ilie

    sir3=sir1+ +sir2 => sir3=Dumitru Ilie

    b) Conversia unui tip de variabil (numeric, dat, etc.) n:

    1. ir de caractere - se realizeaza cu ajutorul intructiunii CStr(parametru).

    Conversia este necesar deoarece nu putem aduna un ir cu un numr.

    Ex.: sir1=Varsta este:, var1=45

    sir2= sir1+cstr(var1) => sir2=Varsta este:45

    2. numar intreg - se realizeaza cu ajutorul intructiunii CInt(parametru).

    Conversia se aplic numerelor zecimale (tip Single sau Double) pe care dorim

    s le transformm in numere intregi.

    Ex.: num1=154.5458452, CInt(num1)=154

    c) Rotunjirea unui tip de variabil numeric se realizeaz cu intructiunea:

    Round(variabila,nrZecimale)

    Ex.: num1=154.5458452, Round(num1,0)=154

    c) Generarea unui numar aleator se face cu functia Rnd(). Functia Rnd() genereaza aleatoriu

    numere zecimale intre 0 si 1. Pentru a genera numere cuprinse intr-un anumit interval (A si B),

    sintaxa este urmatoarea: A+B*Rnd()

    Ex.: numAleator=10+100*Rnd() => 43, 78, 51

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 16/46

    3. Instruciuni VBA

    ntr-un program datele sunt prelucrate cu ajutorul instruciunilor.

    Instruciunile se mpart n dou categorii: instruciuni de decizie i instruciuni repetitive;

    3.1. Instruciunea de decizie If End If

    Instruciunea If.End If are urmtoarea sintax:

    If cond1 then

    Bloc_instruciuni (a)

    End If

    sau

    If cond1 then

    Bloc_instruciuni1

    Else (b)

    Bloc_instruciuni2

    End If

    n cazul (a) instruciunea evalueaz condiia cond1 i dac este adevrat execut blocul de

    instruciuni Bloc_instruciuni, iar dac este fals atunci instruciunea nu execut nimic.

    n cazul (b) instruciunea evalueaz condiia cond1 i dac este adevrat execut blocul de

    instruciuni Bloc_instruciuni1, iar dac este fals execut blocul de instruciuni

    Bloc_instruciuni2.

    Exemplu1 5 :

    Private Sub BtnInstr_Click()

    Dim compar As Integer

    Dim numar As Integer

    numar = InputBox("Introduceti numarul")

    se introduce de la tastatura valoarea pentru numar

    compar = 30

    If numar

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 17/46

    Else

    MsgBox "Numarul este mai mare decat " + CStr(compar)

    End If

    End Sub

    Tema: Sa se afiseze mesajul sub forma Numarul X este mai mare decat 30

    3.2. Instruciunea de decizie Select Case End Select

    Instruciunea Select Case .. End Select are urmtoarea sintax:

    Select Case val

    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/expresii

    val1, val2, atunci se execut Bloc_instruciuni1; dac val se gsete n lista sau intervalul de

    valori/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 sau, dac exist,

    execut Bloc_instructiuni4, aferent lui CASE ELSE.

    Exemplul 6 :

    Private Sub BtnCase_Click()

    Dim valoare As Integer

    Dim mesaj As String

    valoare = InputBox("Introduceti o valoare intre 10 si 200:",

    "Instructiunea Case", 10)

    Observati modul de introducere al parametrilor instructiunii

    InputBox

    Select Case valoare

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 18/46

    Case 10 To 49: MsgBox "Valoarea este in intervalul 10-49"

    Case 50 To 100: MsgBox "Valoarea este in intervalul 50-100"

    Case 101 To 200: MsgBox "Valoarea este in intervalul 101-200"

    End Select

    End Sub

    Tema: In locul citirii de la tastatur s se preia valoarea dintr-o celul a foii de calcul curente.

    3.3. Instruciunea repetitiv For Next

    Instruciunea For . Next are urmtoarea sintax :

    For contor = val1 To val2 [Step X]

    Bloc_instruciuni

    Next

    unde contor, val1, val2 sunt toate de acelai tip. Aceast instruciune realizeaz executarea

    Bloc_instruciuni de val2 val1 ori; instruciunea are astfel un numr cunoscut de repetri.

    Pasul incrementrii poate fi, de asemenea indicat (vezi argumentul Step). De exemplu, variabila

    contor poate lua valori din 2 n 2.

    Observaie:

    val2 trebuie s fie mai mare dect val1 pentru ca instruciunea s se execute; dac val2 este mai

    mic dect val1 atunci Bloc_instruciuni nu se va executa.

    Exemplul 7 :

    Private Sub BtnForNext_Click()

    Dim i As Integer, valoare As Integer

    valoare = 1

    For i = 1 To 5

    valoare = valoare + 1

    MsgBox "Valoarea este: " + CStr(valoare)

    Next i

    End Sub

    Tema: Scrierea rezultatului valoare ntr-o celul a foii de calcul curente.

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 19/46

    3.4. Instruciunea repetitiv Do While Loop

    Instruciunea Do While Loop are urmtoarea sintax:

    Do While condiie

    Bloc_instrucini

    Loop

    Aceast instruciune execut Bloc_instrucini atta timp ct este ndeplinit condiia.

    Exemplul 8 :

    Private Sub BtnDoWhile_Click()

    Dim valoare As Integer

    i = 1

    Do While valoare

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 20/46

    Dim valoare As Integer

    valoare = 1

    Do Until valoare = 20

    valoare = valoare + 1

    Loop

    MsgBox "Valoarea este: " + CStr(valoare)

    End Sub

    Raionamentul este similar cu cel al exemplului prcedent.

    4. Proceduri i funcii

    n general un program este format din proceduri (evenimente) i funcii. De multe ori

    ntr-un program sunt secvene de cod care se repet. Pentru a evita scrierea repetat a acestor

    secvene, se utilizeaz funciile i procedurile, care se scriu o singur dat i apoi se apeleaz

    dup nume de cte ori este nevoie.

    Procedurile si funciile sunt subprograme care efectueaz anumite operaii solicitate de

    programul apelant, iar in cazul functiilor returneaza anumite valori.

    a) Procedura are urmtoarea sintax:

    Sub NumeProcedura([Lista_de_parametri as tipData])

    Bloc_instruciuni

    End Sub

    b) Funcia are urmtoarea sintax:

    Private Function NumeFunctie ( [Lista_de_parametri as tipData] )

    Bloc_instruciuni

    numeFunctie=valoare_rezultata

    End Functie

    Observatie: Lista de parametrii este optionala

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 21/46

    Exemplul 10 :

    Private Sub BtnFunctie_Click()

    Dim numar As Integer, putere As Integer, i As Integer

    For i = 1 To 5

    numar = InputBox("Introduceti numarul:")

    putere = InputBox("Indicati puterea la care se calculeaza

    numarul")

    MsgBox Patrat(numar, putere)

    Next i

    End Sub

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

    Function Patrat(nr, pt)

    Patrat = nr ^ pt

    semnul ^ se utilizeaza pentru ridicarea la putere

    End Function

    Exemplul 11 :

    Private Sub BtnProcedura_Click()

    Dim numar As Integer, putere As Integer, i As Integer

    For i = 1 To 5

    numar = InputBox("Introduceti numarul:")

    Call Scrie(numar, i)

    Next i

    End Sub

    Private Sub Scrie(nr, randul)

    ActiveSheet.Cells(randul, "D").Value = nr

    End Sub

    Not: Se observ corespondena ntre numar nr si i randul

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 22/46

    5. Lucrul cu liste si alte obiecte VBA

    Uneori este util sa preluam date din liste de valori, in loc de a le introduce de la tastatura.

    O lista se poate utiliza prin urmatorii parametri:

    .ColumnCount = numar coloane

    .BoundColumn = numarul coloanei de pe care se va face citirea

    . AddItem = Adauga articol pe rand nou

    . List(r,c) = adauga articol pe randul r, coloana c, cu

    conditia ca randul r sa fi fost creat in prealabil cu AddItem

    .List()=adauga articole dintr-o zona (range) de celule

    .ListFillRange = numeZona adauga articole dintr-o zona (range)

    de celule

    .Clear = sterge toate valorile din lista

    .RemoveItem (index) = terge un rnd din list (index are

    valoare de la 0 la nr.articole din lista)

    Exemplul 12

    Declaram variabilele

    Dim nume As String, sectie As String, ore As Single

    Dim nrIndex As Integer

    Private Sub ListBox1_Click() Ruleaza la executarea unui click

    pe ListBox1

    nrIndex = ListBox1.ListIndex memoreaza pozitia articolului in

    lista

    Inseram in foaie 2 butoane de optiuni (unul pentru adaugare

    articol selectat, celalalt pentru stergere articol selectat din

    lista

    ActiveSheet.Cells(1,1)=nume

    ActiveSheet.Cells(1,2)=sectie

    ActiveSheet.Cells(1,3)=ore

    If OptionButton1.Value = True Then

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 23/46

    nume = ListBox1.List(nrIndex, 0)

    sectie = ListBox1.List(nrIndex, 1)

    ore = ListBox1.List(nrIndex, 2)

    ActiveSheet.Cells(2, 1) = nume

    ActiveSheet.Cells(2, 2) = sectie

    ActiveSheet.Cells(2, 3) = ore

    Else

    On Error Resume Next

    ListBox1.RemoveItem (nrIndex)

    End If

    End Sub

    Private Sub Worksheet_Activate()

    With ListBox1

    .Clear ' initializam lista

    .ColumnHeads = False

    .ColumnCount = 3 ' dimensionam lista la 3 coloane

    .List() = Sheet3.Range("a1:c5").Value

    End With

    End Sub

    Foaia de calcul va arta aa:

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 24/46

    Datele sunt ncrcate n list din foaia de calcul date lista

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 25/46

    6. Aplicaii VBA

    In acest capitol vom realiza o serie de aplicaii ce se pot constitui n puncte de plecare

    pentru realizarea unor aplicaii personalizate, n funcie de necesitile fiecrui utilizator n parte.

    6.1. Aplicaia 1 Determinarea zonei de date dintr-o foaie de calcul

    Vom realiza o prim aplicaie care va determina numarul de randuri ce contin date intr-o

    foaie de calcul (consideram nr.de coloane cunoscut). Zona identificata va fi selectata si i se vor

    modifica anumite proprietati.

    Pentru acesta vom deschide unul din fisierele create, iar n ultima foaie de calcul vom

    insera o zona de date (4 linii si 3 coloane) si un buton de comand, cruia i vom schimba

    parametrul Caption (din cel implicit CommandButton1 n Afiseaza) cu ajutorul tabelei de

    proprieti (parametri).

    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.

    Tabela de proprieti (parametri)

    Butonul de comand cu parametrul Caption

    schimbat

    Parametrul Caption al

    butonului de comand a fost schimbat din

    CommandButton1 n Afiseaz

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 26/46

    Codul corespunztor evenimentului Click este urmtorul:

    Private Sub CommandButton1_Click()

    Dim nr_linii As Integer

    Dim valoare As Variant, zona As String

    'Calcul nr. linii cu date

    valoare = ActiveSheet.Cells(1, 1)

    Do While valoare 0

    nr_linii = nr_linii + 1

    valoare = ActiveSheet.Cells(nr_linii, 1)

    Loop

    nr_linii = nr_linii - 1

    MsgBox nr_linii

    ' Selectare zona date

    zona = "a1:" + "c" + CStr(nr_linii)

    MsgBox zona

    ActiveSheet.Range(zona).Select

    Inseram in foaia de calcul 2 OptionButton (avand

    Caption=Modifica, respectiv Reseteaza)

    If OptionButton1.Value = True Then

    Controlul CommandButton1

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

    Declararea evenimentului Click

    corespunztor controlului CommandButton1

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 27/46

    Selection.Interior.Color = vbRed

    Selection.Font.Bold = True

    Selection.Font.Italic = True

    Else

    Selection.Interior.Color = vbWhite

    Selection.Font.Bold = False

    Selection.Font.Italic = False

    End If

    End Sub

    6.2. Aplicaia 2 Evidentierea unei celule selectate cu ajutorul mouse-lui

    n a doua aplicaie vom realiza un cod care va colora celula pe care se face click. In plus, putem

    afisa/prelua adresa si continutul celulei selectate. Pentru aceasta vom folosi tot foaia de lucru de

    la Aplicatia 1.

    Codul va fi de forma:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim nr_rand As Integer, nr_col As Integer

    Dim continut_cel As String, adresa_cel As String

    Dim mesaj As String

    nr_rand = ActiveCell.Row

    WITH ActiveCell `WITHEND WITH ne permite sa scriem ActiveCell

    `doar o singura data, nu pe fiecare rand de cod

    .Interior.Color = vbBlue

    .Font.Color = vbYellow

    adresa_cel = .Address

    continut_cel = .Value `Scrie in variabila continut_cel valoarea

    `gasita in celula selectata

    END WITH

    mesaj = "Valoarea celulei " + adresa_cel + " , selectate este '"

    + continut_cel + "'"

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 28/46

    MsgBox mesaj

    End Sub

    Observatie: In loc de ActiveCell, putem folosi Target

    Tem: Inserati 2 controale de tip OptionButton pentru a controla culorile celulelor selectate

    (ex.fond verde, font albastru, respectiv fond alb, font negru)

    6.3. Aplicaia 3 Formatarea automat a unei zone de celule

    Aceast aplicaie i propune crearea unui buton de comanda care s genereze aplicarea

    unor formate definite de utilizator pe zona de celule selectate.

    Deoarece este dificil s reinem sintaxele unor comenzi mai complicate n Excel vom

    genera macrouri, pe care apoi le vom studia i modifica dup necesiti.

    In urmtorul exemplu avem nevoie s aplicm urmtoarea formatare unei zone de celule

    selectate: font bolduit i nclinat, colorat cu rou, celula cu fond galben, aliniament sus i stnga,

    format numeric cu 2 zecimale, coloanele s se potriveasc la coninut (autofit).

    Pentru aceasta, vom parcurge urmatorii pai:

    1.nregistrm un macro unde vom avea toate aceste formate

    2. crem un buton de comand

    3.n interiorul codului butonului de comand vom copia codul generat automat de macro

    4.operm modificrile necesare la cod i rulm aplicaia

    Codul generat de macro va fi de forma:

    Sub formatare()

    '

    ' formatare Macro

    '

    Range("A2:C3").Select Am selectat la intamplare o zona de

    celule

    Selection.Font.Bold = True

    Selection.Font.Italic = True

    With Selection.Interior

    .PatternColorIndex = xlAutomatic

    .Color = 65535

    .TintAndShade = 0

    .PatternTintAndShade = 0

    End With

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 29/46

    With Selection.Font

    .Color = -16776961

    .TintAndShade = 0

    End With

    Selection.Style = "Comma"

    With Selection

    .HorizontalAlignment = xlLeft

    .VerticalAlignment = xlTop

    .WrapText = False

    .Orientation = 0

    .AddIndent = False

    .IndentLevel = 0

    .ShrinkToFit = False

    .ReadingOrder = xlContext

    .MergeCells = False

    End With

    Columns("A:C").Select

    Columns("A:C").EntireColumn.AutoFit

    Range("C8").Select

    End Sub

    Identificm aciunile realizate de macrou, tergem ce este n plus i adugm ce este necesar.

    Codul final va fi de forma:

    Private Sub BtnFormat_Click()

    'Range("A2:C3").Select

    Selection.Font.Bold = False

    Selection.Font.Bold = True

    Selection.Font.Italic = False

    Selection.Font.Italic = True

    With Selection.Interior

    .Color = vbYellow

    End With

    With Selection.Font

    .Color = vbRed

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 30/46

    End With

    Selection.Style = "Comma"

    With Selection

    .HorizontalAlignment = xlLeft

    .VerticalAlignment = xlTop

    End With

    Selection.EntireColumn.AutoFit

    End Sub

    Atenie: ca acest cod s funcioneze trebuie mai nti s selectatm o zon de celule i numai

    dup aceea s apsm butonul de comand.

    Tem: ncercai i alte tipuri de formatri

    6.4. Aplicaia 4 Crearea unui configurator automat

    Vom concepe o aplicaie care realizeaz completarea unei liste de componente a cror valoare va

    fi nsumat. Aplicaia este util n realizarea de configuraii specifice pentru un echipament

    (automobil, calculator etc.) i calcularea preului acestuia.

    Aplicaia cuprinde dou foi de calcul. Prima foaie conine lista componentelor i preurile

    acestora, iar n foaia a doua se realizeaz calculul listei particularizate.

    In prima foaie de calcul sunt dou butoane: unul pentru adugare elemente, iar cellalt

    pentru reiniializare.

    Codul corespunztor aplicaiei este:

    1. Pentru prima foaie de calcul

    Dim cnt As Integer

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

    (evenimentul click)

    Dim x As Integer, y As Integer

    Dim reper As String, valoare As Single 'Declarare variabile

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

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 31/46

    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

    "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

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 32/46

    '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

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 33/46

    6.5. Aplicaia 5 Actualizarea dinamic a unui grafic

    Utiliznd cunotinele acumulate pn acum, 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

    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

    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)

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 34/46

    .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: Codul de mai sus este preluat dintr-un macro.

    Trebuie pstrat aceast ordine n interiorul lui with ... end

    with

    End With

    End Function

    6.6. Aplicaia 6 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

    End Sub

    Private Sub CommandButton1_Click()

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 35/46

    '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:

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 36/46

    Cmpuri care vor fi completate(celule care vor fi

    completate)

    Butonul BtnTipar Butonul BtnFormular

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 37/46

    6.7. Aplicaia 7 Inserarea de elemente grafice si dimensionarea dinamic a acestora

    In cele ce urmeaz vom crea o aplicaie care insereaz automat elemente grafice a cror

    mrime depinde de un set de date numerice.

    Codul aferent aplicaiei este urmtorul:

    Dim x As Integer, y As Integer, l As Integer, h As Integer,

    scara As Double

    Dim valoare As Integer, i As Integer, maxim As Integer

    Dim nr_valori As Integer, distanta As Integer

    Private Sub Worksheet_Activate()

    'Stabilim parametri formei grafice

    maxim = 0

    x = 30: y = 30: l = 30: h = 200

    distanta = 40 ' distanta intre formele grafice

    'Selectam si stergem toate formele geometrice existente

    ActiveSheet.Shapes.SelectAll

    Selection.Delete

    'Aflam nr.de valori pe care le avem pe o linie a foii de calcul

    valoare = ActiveSheet.Cells(1, 1).Value ' initializam valoarea

    nr_valori = 1

    Do Until valoare = 0 'repetam bucla pana ajungem la capatul

    sirului de valori

    nr_valori = nr_valori + 1

    valoare = ActiveSheet.Cells(1, nr_valori).Value

    Loop

    nr_valori = nr_valori - 1 'corectam valoarea finala

    'Aflam valoarea maxima

    For i = 1 To nr_valori

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 38/46

    If maxim

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 39/46

    Rezultatul rulrii aplicaiei este ilustrat n figura urmtoare:

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 40/46

    7. Crearea de formulare pentru configurarea tabelelor pivot

    Vom construi o aplicaie care utilizeaza un formular prin intermediul cruia poate fi

    configurat uor un tabel pivot.

    Formularul va fi de forma:

    Codul aferent formularului este urmtorul:

    Private Sub ColBtn_Click()

    If ColTxt.Text "" Then

    PivotLst.AddItem (ColTxt.Text)

    ColTxt.Text = ""

    ColBtn.Caption = ""

    End If

    Call validare

    End Sub

    Private Sub DateBtn_Click()

    If DateTxt.Text "" Then

    PivotLst.AddItem (DateTxt.Text)

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 41/46

    DateTxt.Text = ""

    DateBtn.Caption = ""

    End If

    Call validare

    End Sub

    Private Sub PagBtn_Click()

    If PagTxt.Text "" Then

    PivotLst.AddItem (PagTxt.Text)

    PagTxt.Text = ""

    PagBtn.Caption = ""

    End If

    Call validare

    End Sub

    Private Sub RandBtn_Click()

    If RandTxt.Text "" Then

    PivotLst.AddItem (RandTxt.Text)

    RandTxt.Text = ""

    RandBtn.Caption = ""

    End If

    Call validare

    End Sub

    Function validare()

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 42/46

    If PivotFrm.PagTxt.Value = "" Or PivotFrm.RandTxt.Value = "" Or

    _

    PivotFrm.ColTxt.Value = "" Or PivotFrm.DateTxt.Value = "" Then

    PivotFrm.pivotBtn.Enabled = False

    Else

    PivotFrm.pivotBtn.Enabled = True

    End If

    End Function

    Private Sub pivotBtn_Click()

    campPag = PagTxt.Value

    campRow1 = RandTxt.Value

    campCol1 = ColTxt.Value

    campDta = DateTxt.Value

    Call zona

    'MsgBox zona

    ' Range("A2:I661").Select

    ' Application.CutCopyMode = False

    ' "'Lucru'!R1C1:R661C9").CreatePivotTable

    TableDestination:="", TableName:=

    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,

    SourceData:= _

    "'Lucru'!R1C1:R661C9").CreatePivotTable

    TableDestination:="", TableName:= _

    "PivotTable1", DefaultVersion:=xlPivotTableVersion10

    ActiveSheet.PivotTableWizard

    TableDestination:=ActiveSheet.Cells(3, 1)

    ActiveSheet.Cells(3, 1).Select

    Charts.Add

    ActiveChart.Location Where:=xlLocationAsNewSheet

    ActiveWorkbook.ShowPivotTableFieldList = True

    With ActiveChart.PivotLayout.PivotTable.PivotFields(campPag)

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 43/46

    .Orientation = xlPageField

    .Position = 1

    End With

    With

    ActiveChart.PivotLayout.PivotTable.PivotFields(campRow1)

    .Orientation = xlColumnField

    .Position = 1

    End With

    With

    ActiveChart.PivotLayout.PivotTable.PivotFields(campCol1)

    .Orientation = xlRowField

    .Position = 1

    End With

    ActiveChart.PivotLayout.PivotTable.AddDataField

    ActiveChart.PivotLayout. _

    PivotTable.PivotFields(campDta), "Sum of BUDGET", xlSum

    '----------------

    ' ActiveChart.PlotArea.Select

    ' Sheets("Tabel pivot").Select

    End Sub

    Function zona() As String

    Dim rand As Integer, coloana As Integer

    rand = 2: coloana = 1

    Do While Sheets("Lucru").Cells(rand, 1) ""

    rand = rand + 1

    Loop

    rand = rand - 1

    Do While Sheets("Lucru").Cells(2, coloana) ""

    coloana = coloana + 1

    Loop

    coloana = coloana - 1

    zona = "A2:" + Chr(64 + coloana) + CStr(rand)

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 44/46

    zona = "R2C1:R" + CStr(rand) + "C" + CStr(coloana) ' R1C1:R661C9

    'zona = "'Lucru'!" + zona

    End Function

    Codul pentru crearea tabelului pivot l-am luat dintr-un macro.

    In foaia de lucru numita Lucru vom avea un tabel de date i un buton de comand,

    conform figurii:

    Codul aferent butonului de comand este urmtorul:

    Private Sub BtnAfisareFormular_Click()

    On Error Resume Next

    Sheets("Tabel pivot").Delete

    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)

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 45/46

    i = i + 1

    Loop

    r = i - 2

    'Stabilim nr.de coloane pentru listBox

    PivotFrm.PivotLst.ColumnCount = 1

    'Incarcam listBoxul cu date (aceste date sunt cele din capul de

    tabel)

    For k = 0 To r

    PivotFrm.PivotLst.AddItem (ActiveSheet.Cells(1, k + 1))

    Next k

    'Initializam campurile formularului

    PivotFrm.PagTxt.Value = campPag

    PivotFrm.RandTxt.Value = campRow1

    PivotFrm.ColTxt.Value = campCol1

    PivotFrm.DateTxt.Value = campDta

    'Selectam primul element din listBox

    PivotFrm.PivotLst.ListIndex = 0

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

    PivotFrm.Show

    'PivotFrm.Visible = True

    End Sub

    Tem: identificai operaiunile executate pe fiecare rnd de cod i inserai comentarii

    explicative.

  • @2009 SC INTERCONSULT 2001 SRL Suport curs EXCEL Avansat (nov.09) Tel/fax: 0248-262340

    www.formare.ro 46/46

    C U P R I N S

    1. INTRODUCERE ...................................................................................................................... 1 2. Elemente de programare n VBA pentru EXCEL ....................................................................... 2

    2.1. Bara de controale standard .................................................................................................... 2 2.2. Editorul VBA ........................................................................................................................ 6 2.3. Tipuri de date folosite n VBA .............................................................................................. 6 2.4. Linii de cod, proceduri, funcii, parametri ............................................................................ 7 2.5. Descrierea unui obiect ........................................................................................................... 7 2.6. Foaia de calcul, proprieti, metode, evenimente................................................................ 11 2.7. Declararea variabilelor VBA .............................................................................................. 14

    Concatenarea mai multor iruri de caractere se realizeaza cu ajutorul operatorului + ......... 15 Conversia unui tip de variabil (numeric, dat, etc.) n ir de caractere se realizeaza cu ajutorul

    intructiunii CStr(parametru). Conversia este necesar deoarece nu putem aduna un ir cu un numr. ....................................................................................................................................... 15 3. Instruciuni VBA ....................................................................................................................... 16

    3.1. Instruciunea de decizie If End If ................................................................................... 16 3.2. Instruciunea de decizie Select Case End Select ............................................................ 17 3.3. Instruciunea repetitiv For Next ................................................................................ 18 Tema: Scrierea rezultatului valoare ntr-o celul a foii de calcul curente. ................................ 18 3.4. Instruciunea repetitiv Do While Loop......................................................................... 19 3.5. Instruciunea repetitiv Do Until Loop .......................................................................... 19

    4. Funcii i proceduri ................................................................................................................... 20 5. Lucrul cu liste si alte obiecte VBA ........................................................................................... 22 6. Aplicaii VBA ........................................................................................................................... 25

    6.1. Aplicaia 1 Determinarea zonei de date dintr-o foaie de calcul ....................................... 25 6.2. Aplicaia 3 Formatarea automat a unei zone de celule................................................... 28 6.3. Aplicaia 2 Evidentierea unei celule selectate cu ajutorul mouse-lui .............................. 27 6.4. Aplicaia 4 Actualizarea dinamic a unui grafic .............................................................. 32 6.5. Aplicaia 5 Crearea unui configurator automat ................................................................ 30 6.6. Aplicaia 6 Crearea unui formular i completarea automat a acestuia ........................... 34 6.7. Aplicaia 7 Inserarea de elemente grafice si dimensionarea dinamic a acestora ........... 37

    7. Crearea de formulare pentru configurarea tabelelor pivot ........................................................ 40


Recommended