vba si macro

Upload: emacamara-1

Post on 08-Jul-2018

252 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/19/2019 VBA Si Macro

    1/13

    INTRODUCERE IN VBA SI MACRO

    Cand porniti VBA in Excel, din Tools -> Macro - > Visual Basic Editor, va apare fereastra:

     Aceasta fereastra contine mai multe sub-ferestre:

    1 !ereastra "ro#ect Explorer $in partea din stan%a sus&

     Aceasta are o structura de arbore, similara cu folderele din 'indo(s Explorer

  • 8/19/2019 VBA Si Macro

    2/13

    !iecare intrare in "ro#ect Explorer este numita nod )odurile principale repre*inta proiecteledesc+ise in momentul curent in Excel VBA Acestea pot fi expandate sau ascunse, apasandpe

    !iecare proiect are un nume, la ale%erea pro%ramatorului )umele implicit al proiectului esteVBA"ro#ect )odul principal pentru fiecare proiect este etic+etat ca:

    "ro#ect)ame $'orboo)ame&, unde "ro#ect)ame este numele proiectului, iar'orboo)ame este numele (orbooului Excel

    .a nivelul imediat urmator, mai sunt noduri numite:- Microsoft Excel /b#ects- !orms- Modules- Classes

    0ub nodul Microsoft Excel /b#ects exista cate un nod pentru fiecare (ors+eet si c+arts+eetdin (orboo, precum si un nod special numit T+is'orboo, ce repre*inta c+iar (orbooul

     Aceste noduri ofera acces catre ferestrele de cod pentru fiecare dintre aceste obiecte, unde

    putem scrie propriul cod

    0ub nodul !orms, exista cate un nod pentru fiecare formular din proiect !ormularele suntnumite de asemenea ser!orms sau custom dialo% boxes Vom vorbi despre ele mai pe lar%mai tar*iu

    0ub nodul Modules, exista cate un nod pentru fiecare modul de cod din proiect Modulele decode sunt numite si module standard Vom discuta mai amanuntit despre ele mai tar*iu

    0ub nodul Classes, exista cate un nod pentru fiecare modul de tip clasa din proiect Vomdiscuta mai amanuntit despre ele mai tar*iu

    0copul principal al ferestrei "ro#ect Explorer este acela de a ne permite sa navi%am prin

    proiect

    'ors+eet-urile si ser!orm 2 urile au 3 componente:- o componenta vi*ibila $un (ors+eet sau un dialo%&- o componenta de cod

    4aca dam clic dreapta pe un nod tip 'ors+eet sau ser!orm, putem opta pentru avi*uali*a obiectul in sine, sau a vi*uali*a componenta de cod scrisa pentru acel nod

    Modulele standard si cele tip clasa, au numai o sin%ura componenta, si anume cea de cod,care poate fi vi*uali*ata dand dublu clic pe nodul respectiv

    Obiectul ThisWorkbook

    0ub fiecare nod din "ro#ect Explorer etic+etat Microsoft Excel /b#ects este un nod numitT+is'orboo Acest nod repre*inta (orbooul proiectului, impreuna cu componenta de codcare stoc+ea*a codul pentru diferite evenimente pentru (orboo

    0copul evenimentelor este acela de a permite unui VBA pro%ramator sa scrie un cod care seva executa de fiecare data cand unul dintre acele evenimente apare Excel recunoaste 15evenimente referitoare la (orboo 4oar cateva exemple::6 /pen 2 apare atunci cand se desc+ide (orboo-ul6 BeforeClose 2 apare c+iar inainte sa se inc+ida (orboo-ul6 )e(0+eet 2 apare atunci cand se adau%a un s+eet nou (orboo-ului6 Before"rint 2 apare c+iar inainte de a printa (orboo-ul

  • 8/19/2019 VBA Si Macro

    3/13

    Obiectele Sheet

    0ub fiecare nod Microsoft Excel /b#ects este un nod pentru fiecare s+eet !iecare nod s+eetrepre*inta un (ors+eet sau un c+arts+eet 2 componenta vi*ibila, impreuna cu componentatip cod Excel recunoaste 7 evenimente le%ate de (ors+eet si 18 evenimente le%ate dec+arts+eet Vom discuta de ele mai tar*iu

    Modulen modul, numit mai clar standard modul, este un modul de cod, care contine proceduri%enerale $functii si subrutine& Aceste proceduri pot fi macro-uri destinate a fi rulate de catreutili*ator, sau pot fi pro%rame de suport, folosite de alte pro%rame

    Class modulesClass modules sunt module de cod, care contin cod referitor la obiecte specifice )u vomdiscuta de ele in acest curs

    Obiecte Userorm Asa cum ati observat, Excel contine multe dialo% boxes %ata construite, insa este posibil sacream si dialo% boxes customi*ate, numite si formulare sau ser!orms Acest lucru se face

    prin crearea de obiecte tip ser!orm Exemplu de formular nou creat:

    Vom discuta mai pe lar% modul in care se proiectea*a un formular

    ereastra !ro"erties

     Aceasta afisea*a proprietatile unui obiect si ne permite sa le modificam

    ereastra Code

    !ereastra Code afisea*a codul asociat cu item-ul selectat in fereastra "ro#ect

  • 8/19/2019 VBA Si Macro

    4/13

    Obiecte #orkbook sau sheet

    Cand in fereastra de Project este selectat un obiect tip workbook sau sheet, sectiunea

    de Object contine numai 2 intrari: generala, pentru procedurile generale si cea pentru

    obiectul respectiv.

    aca de e!emplu selectam "orkbook si alegem ca si eveniment #$eforeClose%:

    observam ca se generea&a un cod:

     Private Sub Workbook_BeforeClose(Cancel As Boolean)

     End Sub

    Module

    Cand se selectea&a un modul, singura intrare posibila este #'eneral%, iar in dreapta

    apare o lista cu toate procedurile pe care le-am de&voltat noi pentru acel modul (daca

    este vreuna de&voltata).

  • 8/19/2019 VBA Si Macro

    5/13

    *ectiunea de eclarations este folosita pentru a plasa declararea variabilelor (care vor

    fi folosite in acest modul).

    Obiect UserForm

    Cand este selectat un obiect +serorm, in Object bo! vom gasi o lista cu toate

    obiectele continute in +serorm.

  • 8/19/2019 VBA Si Macro

    6/13

    Exemplu: n pro%ramel simplu

    0ub Test$&4im (s As 'ors+eet0et (s 9 Active0+eet ;nsert a value into cell A1

    (sCells$1, 1&Value 9 Macro -> Visual Basic Editor&

    4ati dublu clic pe 0+eet1 si copiati codul de mai sus in fereastra nou desc+isa Apoi apasati

    tasta ! si veti vedea cum codul incepe sa rule*e pas cu pas

     Apasati ! si vedeti ce efect are in Excel $treceti din VBA in Excel apasand Alt-!11&, apoiapasati din nou ! si vedeti ce se intampla, pana se a#un%e la sfarsitul codului

    ;ncercati sa identificati ce face fiecare linie de cod

     Alt exemplu, prin care se apelea*a o procedura din alta procedura:

    Sub ProcedureA()

    ActiveSheet.Cells(1, 1).Value = "sample"Call ProcedureB

    ActiveSheet.Cells(1, 1).Fot.Bold = !rue

    d Sub

    Sub ProcedureB()

    ActiveSheet.Cells(1, 1).Fot.Si#e = $%

    ActiveSheet.Cells(1, 1).Fot.&ame = "Arial"

    d Sub

    "entru a vedea ce se intampla cu a#utorul acestui pro%ram, desc+ideti un Excel nou, intrati peVBA $din Tools ->Macro -> Visual Basic Editor&

    4ati dublu clic pe 0+eet1 si copiati codul de mai sus in fereastra nou desc+isa Apoi apasati

    tasta ! si veti vedea cum codul incepe sa rule*e pas cu pas

     Apasati ! si vedeti ce efect are in Excel $treceti din VBA in Excel apasand Alt-!11&, apoiapasati din nou ! si vedeti ce se intampla, pana se a#un%e la sfarsitul codului

    ;ncercati sa identificati ce face fiecare linie de cod

  • 8/19/2019 VBA Si Macro

    7/13

    Macros

    Recordi$% MacrosExcel are capabilitatea de a inre%istra macrouri simple4in menu selectati Macro -> ?ecord )e( Macro

    4e exemplu, sa presupunem ca inre%istram un Macro care %aseste si inlocuieste cuvantul@roc cu cuvantul @reconciliation

    Cand ne uitam in fereastra "ro#ects in proiectul in care s-a inre%istrat macro-ul, vom %asi onoua subrutina intr-un 0tandard Module:

    0ub Macro1$& Macro1 Macro Macro recorded 5185 b= sr Cells?eplace '+at:9

  • 8/19/2019 VBA Si Macro

    8/13

    4e aici se selectea*a de la piclist-ul Macros in, locatia macro-ului, apoi se da clic penumele macroului pe care vreti sa il rulati, apoi clic pe ?un

    Variabile& ti"uri de date si co$sta$te

    Come$tariiComentariile sunt importante in cadrul unui cod/rice text care este precedat de apostrof este considerat comentariu si este i%norat de Excel

    Exemplu: 4eclar o variabila tip sir de caractere4im 's)ame as 0trin%'s)ame 9 Actives+eet)ame /btin numele s+eetului activ

    4e asemenea, atunci cand vrei sa comente*i o linie de cod, si nu vrei sa o ster%i, poti pune

    apostrof inaintea ei 4aca vrei sa comente*i decomente*i mai multe linii deodata, folosestibutoanele CommentBloc si ncommentBloc

    Co$ti$uarea u$ei li$ii

    4aca liniile de cod sunt prea lun%i si prea %reu de urmarit, puteti opta pentru continuarea lorpe randul urmator, folosind un caracter, underscore, care trebuie sa fie precedat de un spatiusi sa nu mai fie urmat de alte caractere, nici macar de comentarii 4e exemplu:

     Active0+eet?an%e$

  • 8/19/2019 VBA Si Macro

    9/13

    "entru a defini sau a declara o constanta simbolica intr-un pro%ram, trebuie sa folosimcuvantul c+eie Const Exemplu:

    Const ;nvoice"at+ 9

  • 8/19/2019 VBA Si Macro

    10/13

    4im Iei%+t As 0in%le4im Mone= As Currenc=4im (b As 'orboo4im c+ As C+art

    0intaxa unei declarari de variabile este:

    4im )umeleVariabilei As Tipul4e4ata

    4aca o variabila este folosita fara a fi mai intai declarata sau este declarata fara a-; mentionatipul de data, ea va fi tratata ca fiind de tip Variant Acest lucru duce la consum mare si inutilde memorie

    "uteti sa declarati mai multe variabile pe acelasi rand:

    4im A%e As ;nte%er, )ame As 0trin%, Mone= As Currenc=

    4aca insa scrieti o declaratie de variabile:

    4im A%e, Iei%+t, 'ei%+t As ;nte%er 

    Este /J, insa A%e si Iei%+t vor fi tratate ca si Variants, nu ca ;nte%ers Trebuie sa specificatiexplicit tipul de data pentru fiecare variabila

    Im"orta$ta declararii e("licite a 'ariabilelor 

    4aca din %reseala scriem %resit un nume de variabila, VBA va crede ca vrem sa cream onoua variabila "entru a vedea cat de periculos poate fi acest lucru, copiati codul de mai #osintr-un module nou si rulati-l 0copul acestui cod este de a desc+ide un (orboo, a-isc+imba continutul, a cere utili*atorului numele cu care sa il salve*e si a salva (orbooul cunoul nume

    0ub )e(Boo$&4im 'b As 'orboo4im 'b)ame As 0trin% Ket first open (orboo0et 'b 9 'orboos$1& Ket t+e (orboo name'b)ame 9 'b)ame Code to c+an%e t+e contents of t+e (orboo %oes +ere As user for ne( name for document'b)ame 9 ;nputBox$

  • 8/19/2019 VBA Si Macro

    11/13

    O"tio$ E("licit

    "entru a evita problema descrisa mai sus, trebuie sa %asim un mod de a determina Excel-ulsa refu*e sa rule*e un pro%ram daca acesta contine variabile care nu sunt declarate in modexplicit Acest lucru se face scriind urmatoarea linie de cod:

    /ption Explicit

    in sectiunea de 4eclarations a fiecarui modul de cod "entru ca e usor sa uiti sa faci asta,VBA ofera o optiune numita

  • 8/19/2019 VBA Si Macro

    12/13

    Variabilele definite in cadrul unui Module

    *unt declarate in sectiunea de declaratii a unui cod module si pot fi de 2 tipuri: private

    si public.

    O variabila module-level public este disponibila pentru toate procedurile din toate

    modulele din proiect, nu numai pentru modulul in care au fost declarate, in timp cecele declarate ca module-level private sunt disponibile numai pentru procedurile din

    modulul in care au fost declarate.

    EXERCITII

    6. eschideti un fisier nou !cel, salvati-l cu numele

    #acro7"eek879ume.!ls%. nregistrati in el apoi un acro care sa faca

    urmatoarele: scrie in celula $2 #9ume%, in celula C2 #Prenume% si in celula

    2 #4arsta%. /poi scrie in celula $; numele vostru, in celula C; prenumele

    vostru si in celula ; varsta voastra. ormatati apoi range-ul $2:; ca pe o

    tabela (de e!:

    /poi formatati capul de tabel astfel:

    /poi opriti inregistrarea acroului si salvati macroul cu numele #nregistrata%.

    *tergeti datele completate la inregistrarea macro-ului si rulati apoi macroul creat ca sa

    va asigurati ca functionea&a. *alvati apoi fisierul.

    2. eschideti un fisier nou !cel, salvati-l cu numele #4$/7"eek879ume.!ls%.

    ntrati pe 4$/ si in odule scrieti un cod in care sa faceti urmatoarele:

    - declarati trei variabile: 9ume < de tip string, Prenume, de tip string si 4arsta

    de tip integer 

    - olositi sinta!a pentru nput$o! pentru a solicita numele, prenumele si varsta.

    *inta!a este urmatoarea:

    'putBo( prompt , title* , default*)

    +nde prompt este mesajul din fereastra de input, title este titlul pentru caseta input bo!, si

    default este valoarea implicita care este afisata in te!t bo!. e e!emplu, codul:s&ame = 'putBo("ter +our ame.", "&ame", "Albert")

    duce la afisarea urmatoarei ferestre:

  • 8/19/2019 VBA Si Macro

    13/13

    unctia 'putBo returnea&a sirul pe care l-a introdus utili&atorul in caseta de te!t. n ca&ul de

    mai sus, variabila sName va contine acel sir.

    Chiar daca dorim ca utili&atorul sa introduca un numar, vom folosi tot functia

    nput$o!, si vom converti sirul de caractere introdus in numar, folosind functia 4al.

    4al(variabila tip string) < returnea&a un numar.

    *crieti apoi 9umele, Prenumele si 4arsta pe care le-ati solicitat utili&atorului in sheet

    astfel:

    - Celula /6 < numele

    - Celula $6 < prenumele

    - Celula C6 < varsta

    /cest lucru se face atribuind celulelor respective, valoarea continuta de variabila

    corespun&atoare.

    !emplu:

    *inta!a pentru evidentierea unei celule este Cells(row,column).

    Cells(6,6) < este celula de la intersectia randului 6 cu coloana 6 < deci celula /6

    Ca sa ii atribui celulei /6 valoarea continuta de variabila 9ume, vom scrie:

    Cells(6,6)=9ume

    *alvati apoi fisierul si il inchideti.

    rimiteti cele 2 fisiere la mine pana la data de 22.>?.2>66.

    SUCCES !