curs-10 bazele vba

Upload: isciuc-adrian

Post on 02-Jun-2018

426 views

Category:

Documents


26 download

TRANSCRIPT

  • 8/10/2019 Curs-10 Bazele Vba

    1/63

    Bazele programrii VBA

  • 8/10/2019 Curs-10 Bazele Vba

    2/63

    Introducere

    VBA (Visual Basic for Applications) este un limbaj de programare creat deMicrosoft pentru automatizarea aplicaiilor. Ataat iniial componentelor dinMicrosoft Office,nprezent sunt raportate peste 200 de aplicaii care includ VBA(CorelDraw, AutoCAD etc.).

    VBA este parte a familiei de limbaje Visual Basic, situndu-se sub VB, dar pesteVBScript. Totui, VBA este acum un element esenialnversiunea completVB,oferind suport pentru limbaj, interfaapentru forme,controale, obiecte, tehnologiide accesare a datelor.

    Atunci cndeste gzduitde altaplicaie, cum ar fi Excel, VBA ofermijloacele

    de interaciune cu obiectele aplicaiei gazd. n acest caz, VBA permitedezvoltatorilor s furnizeze soluii complete care extind i/sau integreazaplicaiile gazd.

    Pentru a programanVBA trebuie totuireinut co cerinsuplimentarfadealte limbaje este aceea ctrebuie sse cunoascaplicaia gazd(Word, Excel,PowerPoint, Access etc.).

  • 8/10/2019 Curs-10 Bazele Vba

    3/63

    Scurt istoric

    1993 VBA apare n Microsoft Excel

    1994 VBA este ataat la Microsoft Project1995 este inclus n Microsoft Access, nlocuind Access Basic

    1996 VBA devine element n Visual Basic

    1996 este inclus n Word, nlocuind Word Basic

    1997VBA este integrat n suita Office 97

    1997 Microsoft liceniazVBA pentru utilizarea n alte aplicaii software

  • 8/10/2019 Curs-10 Bazele Vba

    4/63

    Editorul Visual Basic

    Utiliznd Visual Basic Editor (VBE) se poate crea, edita, depanaiexecuta cod program asociat cu documente Microsoft Office.Proiectele

    dezvoltate n VBE, dei sunt asociate aplicaiilor din Office, nu pot fi reduse, caproblematic, la procesarea de texte (Word), calcul tabelar (Excel), prezentrielectronice (PowerPoint) sau baze de date (Access). Este corect s se considereaceste proiecte drept aplicaii similare celor dezvoltatenalte medii de programare,

    avndnsla dispoziie componentele aplicaiilor din Office. Cu alte cuvinte, nu estevorba de o limitare a posibilitilor de prelucrare, ci o potenare a acestora prinapelul posibil la obiectele din Office.

    Proiectul VBA se poate executa doar dintr-o aplicaie Office (deci deschiznd,

    chiar formal, un document Word, sau o foaie Excel etc.), dar multitudinea de

    componente disponibile ndezvoltarea proiectului compenseazacest neajuns. nplus nu trebuie uitat c orice aplicaie necesit o interfa utilizator (puternicnMicrosoft Office) icaplicaiile de bazsuntntreinute icompletate de Microsoft,astfelnctproiectele noastre se vor actualiza iele o datcu componentele Office.

    Mediul VBE este identic cu mediul de dezvoltare din Microsoft Visual Studio

    (Visual Basic, C++ etc.) astfel cpractican VBA poate fi consideratintroductivctre alte aplicaii RAD.

  • 8/10/2019 Curs-10 Bazele Vba

    5/63

    Interfaa grafic VBE

    Pentru a deschide editorul VB, mai nti se va porni o aplicaie dinMicrosoft Office, apoi se poate aciona combinaia Alt+F11 (dacnu a fost

    atribuitaltei operaiuni), sau butonul Visual Basic din grupul Code din filaDeveloper vizualizatntr-o aplicaie Office.

    Interfaa grafic VBE este suficient de complex, asemntoare mediilor deprogramare din Visual Studio. Pe lngobiectele grafice uzuale (Menu Bar, bare de

    unelte) sunt disponibile ferestre specializate pentru lucrul cu anumite categorii deobiecte:Properties Window pentru vizualizarea ifixarea proprietilor nmomentulproiectrii (design-time);Project Explorer care permite navigarea, vizualizarea imodificarea proiectelor deschise la un moment dat;Code Window unde este sescrie i este vizibil codul surs al proiectului activ;Locals Window care permitevizualizarea variabilelor locale cu valorile lor;Immediate Window care permite

    executarea imediat a unei linii de cod;Watch Window unde se afieaz valorileunor expresii specificate.

  • 8/10/2019 Curs-10 Bazele Vba

    6/63

    Organizarea proiectelor VBA

    Obiectele i prelucrrile necesare realizrii unei aplicaii VBA sunt gestionate subforma unui proiect.

    Un proiect conine, pe lng documentele aplicaiei suport (Word, Excel etc.)componente specifice aciunilorprogramatice: module de cod, module clas,forme.

    Module standard (module de cod) -conin declaraii si proceduri. Fiecaredocument (i componente cum ar fi foile de calcul din Excel) au de asemeneaataat cte un modul de cod. Ele pot fi salvate ca fiiere .bas

    Module de clas -conin definirea obiectelor (clase) utilizator. Pot fi salvate cafiiere .cls

    Forme -conin definirea interfeei utilizator i tratarea evenimentelor asociate.Pot fi salvate ca fiiere .frm.

    Referine -pentru a avea acces la entiti din alte proiecte, acestea se vorindica drept referine ale proiectului curent. Tot aici se indic bibliotecile de tipurinecesare proiectului curent (de exemplu, pentru a lucra programatic n Excel cuobiecte Word, trebuie specificat referina la biblioteca Word).

  • 8/10/2019 Curs-10 Bazele Vba

    7/63

    Proiect VBAModul de cod

    Un modul de cod ncepecu o seciunede declaraii (ea poate fi vid), instruciunineexecutabile prin care se definesc constante, variabile. Utiliznd clauze Public,Private, Static se poate preciza domeniul de vizibilitate a entitilordefinite.

    Dupseciuneadeclaraiilor,se definescprocedurile modulului. Structura modulului

    este secvenial,neexistndinterseciinevidentreproceduri.Se recomandca toate declaraiilede variabile iconstante de la nivel de modul sfie grupate la nceputulmodulului, deieste posibil ca ele s fie intercalate printredeclaraiilede proceduri.

    Prin domeniul unei entiti se nelege mulimea instruciunilorn care se poate

    referi entitatea. ndomeniul su, orice entitate se consider vizibil, deci poate fireferit. Domeniul este dependent de locul definirii entitii,de clauzele utilizate ladefinire i de parametrii globali ai proiectului. Exist trei tipuri de domenii:- la nivel de procedur;

    - la nivel de modul, privat;

    - la nivel de modul, public.

  • 8/10/2019 Curs-10 Bazele Vba

    8/63

    Proiect VBAModul de cod

    Nivel procedur

    O variabil definitntr-o procedur, prin Dim, este vizibil doar n procedurarespectiv. ntr-o procedurnu se pot utiliza declaraiiPublic. O variabildefinitStatic i pstreaz valoarea ntre apeluri succesive ale procedurii; celelaltevariabile locale se reiniializeaz la fiecare apel. Dac o variabil trebuie s fie

    referitn alte proceduri, atunci ea se va declara la nivel de modul sau se vatransmite prin parametri.

    Nivel modul, privat

    Variabilele definite la nivel de modul (nzona Declarations) prin Dim sau Private

    (recomandat) sunt vizibile doar n modulul respectiv. Dac se utilizeazinstruciunea Option Private Module (n zona Declarations) atunci toatevariabilele i procedurile publice vor fi vizibile doar n proiectul curent. n lipsaacestei declaraii, procedurile publice sunt vizibile n toate proiectele care facreferinla proiectul curent.

  • 8/10/2019 Curs-10 Bazele Vba

    9/63

    Proiect VBAModul de cod

    Nivel modul, public

    Variabilele declarate la nivel de modul prin Public sunt vizibile n toate moduleleproiectului curent, ca inproiectele care au referinla acesta (cu excepiacazului,explicat anterior, al utilizrii instruciuniiOption Private Module). Procedurile sunt

    publice n mod implicit, cu excepia procedurilor de tratare a evenimentelor, caresunt Privatenmod implicit.

  • 8/10/2019 Curs-10 Bazele Vba

    10/63

    Tipuri de date

    Tipuri predefinite de date

    Boolean - valori logice, adicTrue (-1) i False (0)

    Byte - valori naturale din intervalul [0,255]

    Currency - valori financiare care au 15 cifre la partea ntreag i 4 lapartea zecimal

    Date - date calendaristice i/sau timp orar. ncadrarea valoriloracestui tip se face utiliznd caracterul #. (ex. #8/23/54#; #4/21/0516:05#).

    Single - valorireale cu precizie simpl(ex. 8.97)

    Double - valori reale n dubl precizie, pot fi valori mult mai mari saumult mai mici decttipul Single (ex. 2.0E+79)

    Integer - valorintregidin intervalul [-32768, 32767]Long - valorintregidin intervalul [-2147483648, 2147483647]

    String - iruri de caractere de lungime variabil (pn la 23 decaractere) sau de lungime fix (pn la 216 caractere). Acestease scriuntreghilimele. (ex.Acesta este un sir).

  • 8/10/2019 Curs-10 Bazele Vba

    11/63

    Tipuri de date

    Tipuri predefinite de date (continuare)Variant - tipul implicit. Poate conine valori avnd orice alt tip dedate, cu excepiairurilorcu lungime fixia tipurilor definite.

    Memoria utilizateste mai mare, accesul este mai lent.

    Valorile unei variabile Variant pot s-i converteasc valorileautomat.

    n general, datele numerice sunt memorate n tipul deorigine, dar este posibil ca ele s fie promovate la tipul superior dacrezultatul unei operaiinecesitacest fapt.

    De exemplu o valoare declarat iniial drept Integer i atribuit unui Variant va fimemoratca un ntregpncnd, ridicnd-o de exemplu la o putere, valoarea ei

    excede domeniul tipului Integer. n acest caz are loc promovarea (camod de reprezentare) la tipul superior adecvat (Long sau Double).Dac depirea domeniului are loc pentru subtipurile Currency,Decimal sau Double, atunci se va semnala eroare.

    Utilizarea tipului Variantpermite o tratare mai difereniata irurilorde cifre: noperaii numerice vor fi considerate numere iar n operaii cu iruri vor ficonsiderate iruri.

  • 8/10/2019 Curs-10 Bazele Vba

    12/63

    Tipuri de date

    Tipuri definite de utilizator

    Pe lng tipurile de date predefinite oferite de VBA, utilizatorul i poate creapropriile tipuri de date. Definirea are loc la nivel de modul, prin instruciuni Type.

    [Private|Public] Type varname

    elementname[([subscripts])] As type

    [elementname[([subscripts])] As type]

    End Type

    unde, varnameeste numele dat tipului definit, iar prin elementnamese definesc

    componentele tipului.

    Exemplu: tip de date Salariat, care conine datele unui angajat.Type Salariat

    Marca As Integer

    NumePrenume As String

    Functia As String

    Vrsta As Single

    End Type

    Componentele pot fi i tablouri.

  • 8/10/2019 Curs-10 Bazele Vba

    13/63

    Tipuri de date

    Tablouri

    Un tablou reprezinto mulimede elemente de acelai tip, la care se poate facereferire cu ajutorul indicilor. Numrulindicilor unui tablou dau dimensiunea acestuia.Existtablouri cu o singurdimensiune, adiceste controlat dupun singur indice(vectori) icu doudimensiuni sunt controlate de doi indici, unul pentru linie ialtul

    pentru coloan(matrice).Numrarea elementelor ncepe de la0 i se termin la numrul maxim pentru carea fost definit.

    Numrul de elemente dintr-un tablou se poate specifica n momentul declarrii(tablouri alocate static), acest numr rmnnd neschimbat pe toat durata de

    existena variabilei tablou sau nmomentul redimensionriiacestuia pe parcursulduratei de viaa variabilei tablou (tablouri alocate dinamic).

  • 8/10/2019 Curs-10 Bazele Vba

    14/63

    Valori speciale

    Empty - este valoarea unei variabile neiniializatede tip variant

    Null - este valoarea atribuit prin program unei variabile de tipvariant pentru a anula valoarea anterioar

    Error - valoarea care arat ndeplinirea unei condiii de eroare(procesarea este a utilizatorului)

    Nothing - valoarea utilizat pentru disocierea unei variabile de tipObject de un obiect efectiv.

  • 8/10/2019 Curs-10 Bazele Vba

    15/63

    Identificatori

    Denumirile procedurilor, constantelor, variabilelor etc. respectcerinele(uzuale):

    primul caracter este o liter;

    - nu coninspaiu,punct, semnul exclamrii,@,&,$,#;

    - lungimea este de maxim 255 caractere;- la acelainivel de existennu pot sexiste denumiri identice.

    Nu se recomand denumiri identice cu nume de funcii, instruciuni etc. (princalificare se poate totuiutiliza entitatea cu denumirea implicit).

    VBA nu este case-sensitive (mediul de programare pstreazcapitalizarea dinprima apariiea denumirii).

  • 8/10/2019 Curs-10 Bazele Vba

    16/63

    DECLARAII

  • 8/10/2019 Curs-10 Bazele Vba

    17/63

    Constante

    [Public|Private]Const constname [As type] = expression

    nlipsa tipului, se va ataatipul cel mai apropiat de valoarea expresiei menionate.

    Implicit, constantele sunt Private. La nivel de procedur sau de modul clas,domeniul nu poate fi modificat prin Public. La nivel de modul standard pot fi Public,cele declarate n proceduri sunt locale. Se pot declara pe o linie mai multeconstante.

    Const NrLinii = 15 NrLiniieste de tip Integer

    Public Const Mesaj = Tastatinumarul de linii

    Public Const NrLinii = 15, Pondere As Single =1.25

  • 8/10/2019 Curs-10 Bazele Vba

    18/63

    Variabile

    Variabilele, simple sau tablou, se definesc explicit prin instruciuni Dim, Private,Public, ReDim sau Static. Tipul se declarexplicit sau este implicit Variant.

    Dacmodulul coninedeclaraiaOption Explicitnzona de declaraii,atunci toatevariabilele trebuie sse declare explicit.

    nlipsa declaraiei,apariiaunui nou identificator produce definirea unei noi variabile(de tip Variant).

  • 8/10/2019 Curs-10 Bazele Vba

    19/63

    Variabile

    Dim varname[([subscripts])] [As [New] type]

    Private varname[([subscripts])] [As [New] type]

    Public varname[([subscripts])] [As [New] type]

    Static varname[([subscripts])] [As [New] type]

    ReDim varname[([subscripts])] [As type]

    unde:

    varname=numele variabilei;

    subscripts = dimensiunile tabloului; pot exista cel mult 60 de

    indici separaiprin virgule, un indice fiind de forma[lower To] upper

    Limita inferioar este implicit 0, dar poate fi controlat

    prin instruciunea Option Base {0|1}. Dac nu se specific limiteleindicilor, apar doar parantezele, se definete o variabil dinamic,care se poate redimensiona prinReDim.

    type = tipul variabilei definite, Byte, Boolean etc., String,

    String*length,tip utilizator, tip de obiect.

    New este utilizat doar pentru variabile obiect i produce creareaunei noi instanela prima referire a variabilei.

  • 8/10/2019 Curs-10 Bazele Vba

    20/63

    Variabile

    Se pot declara mai multe variabile pe o linie, separate prin virgule, dar tipultrebuie specificat la fiecare. Astfel,ndeclaraia

    Dim intNrArce, intNrVarfuri As Integer

    prima variabil,intNrArce,este de tip implicit Variant, doar intNrVarfuriestede tip Integer.

  • 8/10/2019 Curs-10 Bazele Vba

    21/63

    Proceduri

    O procedurreprezinto mulimede instruciunicare este

    identificatprintr-un nume icare se executunitar printr-un singur

    apel. Ar trebui, pentru claritatea programului, ca o procedur s efectueze oprelucrare unitaridentificabilnlogica programului.

    Existtrei tipuri principale de proceduri:

    Sub - poate primi i transmite informaiiprin intermediul unor variabile publicesau/ia unor parametri. Numele procedurii nu are ataatnici o valoare.

    Function- se deosebete de Sub prin faptul cnumele procedurii are ataatovaloare (valoarea funciei)ipoate fi utilizat ca orice altvariabildin proiect.

    Property- este caracteristic definirii unui obiect.

    Orice instruciuneexecutabiltrebuie saparinunei proceduri. Declaraiilepotsaparinafara procedurilor, la nivel de modul.

  • 8/10/2019 Curs-10 Bazele Vba

    22/63

    Proceduri Sub

    Declararea unei proceduri de tip Sub:

    [Private | Public] [Static] Sub name ([arglist])

    [declaraii]

    [instruciuni]

    [Exit Sub]

    [instruciuni]End Sub

    Public, Private, Static determin vizibilitatea procedurii. Public =vizibilpentru toate procedurile i toate modulele (n funciede Option Private sedefinete vizibilitatea pentru alte proiecte). Private = vizibil doar pentruprocedurile din modulul unde procedura este declarat. Static = arat c toate

    variabilele localeipstreazvalorilentreapeluri.name numele procedurii

    arglist lista de argumente, separate prin virgulePrin instruciuneaExit Subse poate ieidin procedur.

  • 8/10/2019 Curs-10 Bazele Vba

    23/63

    Proceduri Sub

    Argumentele se definesc dupsintaxa:[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [=

    defaultvalue]

    Optional aratcparametrul nu este obligatoriu. Parametrii opionalitrebuie sfie grupaila sfritullistei.

    ByVal aratcapelul paramatrului se face prin valoare (orice modificare a valorii transmisenu este regsit dup prsirea procedurii, calculele efectundu-se pe o copie aparametrului).

    ByRef arat c apelul paramatrului se face prin referin (orice modificare a valoriitransmise este regsitdupprsireaprocedurii). Acesta este modul implicit de transmiterea parametrilor.

    ParamArray folosit doar ca ultim argumentnlist,denotun tablou Optional de elementede tip Variant. Clauza ParamArray permite definirea unui numr arbitrar de parametri.

    ParamArray nu poate fi utilizatmpreuncu ByVal, ByRef, sau Optional.varname numele argumentului. Dac este tablou se vor indica parantezele. type tipulparametrului transmis: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal, Date,String (doar lungime variabil), Object, Variant. Pentru parametrii obligatorii (fr Optional)poate fi iun tip definit sau de obiect.

    defaultvalue definete valoarea implicit pentru argumentele opionale. Poate fi orice

    expresie, dar pentru tipul Object se admite doar Nothing.

  • 8/10/2019 Curs-10 Bazele Vba

    24/63

    Proceduri Sub

    Apelul unei proceduri Sub

    Pentru a executa o procedur de tip Sub din alt procedur (cu ndeplinireacondiiei de vizibilitate) se menioneaz, pe o linie separat, numele proceduriiurmat sau nu de parametri. Daceste necesar, datoritapelriiunui alt proiect saumodul, atunci apelul este dupmodelul:

    Nume_proiect.Nume_modul.Nume_procedurlistde argumente

    unde lista de argumente poate sau nu sfie inclusntreparanteze.

    Argumentele efective sunt separate n list prin virgule i trebuie s respecte

    ordinea (itipul) argumentelor din definiiaprocedurii.Pentru apelul unei proceduri se poate utiliza iinstruciuneaCall.

  • 8/10/2019 Curs-10 Bazele Vba

    25/63

    Proceduri Function

    O procedurde tip Function este similar,ca definiie,unei proceduri Sub, dar areparticularitatea creturneazo valoare prin numele su(care se comportdeci cao variabil).[Public |Private] [Static] Function name [(arglist)] [As type]

    [declarations]

    [statements]

    [name = expression]

    [Exit Function]

    [statements]

    [name = expression]

    End Function

    Este de remarcat cse poate ataaun tip numelui funciei(adicvalorii funciei)ise va remarca existena instruciunilor prin care se atribuie funciei valorilecalculate.

    Valoarea returnatde o funciepoate fi utilizatntr-o altexpresie prin includereanumelui funcieiurmat,ntreparanteze, de valorile efective ale parametrilor.

  • 8/10/2019 Curs-10 Bazele Vba

    26/63

    Proceduri Function

    Exemplu

    Public Function AriaCilindru (raza, inaltime) As Double

    Const Pi = 3.14159

    cilBaza = Pi*raza^2

    cilLaterala = 2*Pi*raza*inaltime

    AriaCilindru = 2*cilBaza + cilLaterala

    End Function

  • 8/10/2019 Curs-10 Bazele Vba

    27/63

  • 8/10/2019 Curs-10 Bazele Vba

    28/63

    Operatori

    Operatori aritmetici

    ^ (ridicare la putere)*\(mprireaa dounumere ise reineparteantreagampririi)-

    +(adunare, concatenare iruri)/mod(restulmpririi)

  • 8/10/2019 Curs-10 Bazele Vba

    29/63

    Operatori

    Operatori de comparare=,=,Is (compararea a dou obiecte object1 Is object2)Like (compararea a dou iruri string Like pattern) cu observaiile: operatorul Is produce True dac variabilele se refer la acelai obiect;- operatorul Like produce True daciruleste conform ablonului(pattern)

    Comportarea depinde ide prezenainstruciunii Option Compare Binary (ordineaeste a reprezentrii interne, se ine cont de majuscule i minuscule) sau OptionCompare Text (comparare bazatpe nedifereniereaminusculelor de majuscule).Utilizarea caracterelor speciale din ablon n vederea comparrii irurilor areurmtoarele semnificaii:?un singur caracter, oricare ar fi acesta

    * mai multe caractere sau niciunul#o cifr de la 0 la 9[list de caractere] oricare caracter din lista de caractere[!list de caractere] oricare caracter ce nu se regsete n lista decaractere

  • 8/10/2019 Curs-10 Bazele Vba

    30/63

    Operatori

    Operatori de concatenare

    Operatorul + este utilizat pentru nsumarea a dou numere i are sintaxa

    rezultat=exp1+exp2Rezultatul este de natur numeric dac cele dou expresii sunt de naturnumeric, dac nu operatorul realizeaz concatenarea celor dou expresii.Operatorul &este utilizat la concatenarea a dou expresii i are sintaxarezultat=exp1&exp2Rezultatul este un ir de caractere.

  • 8/10/2019 Curs-10 Bazele Vba

    31/63

    Operatori

    Exp1 Exp2 AND

    True True True

    True False FalseFalse True False

    False False False

    Exp1 Exp2 OR

    True True True

    True False TrueFalse True True

    False False False

    Exp1 Exp2 XOR

    True True False

    True False TrueFalse True True

    False False False

    Exp NOT

    True False

    False True

    Operatori logici

    And (stabilete dac dou expresii sunt adevrate)Not (negarea logic a unei expresii)Or (realizeaz disjuncia logic a doua expresii)Xor (realizeaz excluziunea logic a dou expresii).

    n afara conversiilor uzuale la tipul numeric cel mai nalt, rezultatul este Nullatunci cnd cel puin un operand este Null, o expresie Empty este considerat 0(n calcule numerice).

  • 8/10/2019 Curs-10 Bazele Vba

    32/63

    Expresii

    Expresiile efectueazcalcule iproduc rezultate.O expresie preia una sau mai multe valori de intrare (denumite operanzi acetiapot fi variabile, proprieti de obiecte, rezultate ale unor funcii ori valori literale(valoare specificat)), le combin cu ajutorul unor simboluri speciale (denumiteoperatori) iproduce un rezultat. Expresia trebuie sexecute toate aceste aciunintr-o singurinstruciuneVBA (instruciuneade atribuire).Observaie. Atunci cnd construii o expresie, cel mai important lucru la caretrebuie s v gndii este meninerea consecvenei tipurilor de date n cadrulexpresiei. Adic, operanzii trebuie s aib tipuri de date compatibile, operatoriiutilizaitrebuie scorespundtipurilor de date ale operanzilor, iar variabila ncarestocaiexpresia trebuie saibacelaitip de datca irezultatul expresiei.Limbajul VBA mparte expresiile n patru grupuri: numerice, cu iruri, cu date

    calendaristice i logice.Observaie.Calculul unei expresii se face innd cont de prioritatea operatorilor.Tabelul urmtor rezum ordinea de preceden utilizat de VBA

  • 8/10/2019 Curs-10 Bazele Vba

    33/63

    Expresii

    Operator Prioritate

    ^ Prima

    *i / A doua\ A treia

    Mod A patra

    + i - A cincea

    & A asea

    =, , =, A aptea

    And, Or, Xor, Not A opta

  • 8/10/2019 Curs-10 Bazele Vba

    34/63

    Expresii

    De exemplu, expresia 3+5^2are rezultatul 28 i nu 64.

    Expresiile numerice Sunt cele care se formeaz cu ajutorul operatorilor aritmetici. Ca operanzi pot fi

    folosite i funciile matematice, precum i cele financiare. Expresii de tip ir Este o expresie care returneaz o valoare avnd tipul de data String. Expresiile

    de tip ir pot utiliza ca operanzi valori literale (unul sau mai multe caractere

    plasate ntre ghilimele), variabile declarate String sau orice funcie integrat nlimbajul Vba care returneaz o valoare de tip String. Expresii logice O expresie logic ete o expresie care returneaz o valoare de tip Boolean. O

    valoare de tip Boolean este apropape ntotdeauna True sau False. Expresii de tip dat calendaristic O expresie de acest tip este o expresie care returneaz o valoare de tip Date.

    Pentru operanzii din aceste expresii putei folosi fie o variabil declarat Date,fie o valoare literal de tip dat calendaristic. n ultimul caz, nchidei data ntrecaractere #, ca n exemplul urmtor:

    Data = #8/23/75#

  • 8/10/2019 Curs-10 Bazele Vba

    35/63

    OPERAII DE INTRARE/IEIRE

  • 8/10/2019 Curs-10 Bazele Vba

    36/63

    Operaii I/O

    n categoria operaiilor de I/O se pot deosebi:

    schimbul de informaii cu utilizatorul: acesta se poate desfura prin intermediul unorformulare (forms) predefinite (InputBox, MsgBox) sau prin intermediul unor formularedefinite de dezvoltatorul proiectului VBA

    schimbul de informaii cu fiiere i/sau baze de date: acesta se realizeaz prinintermediul unor instruciuni dedicate acestor operaii.

  • 8/10/2019 Curs-10 Bazele Vba

    37/63

    Dialogul standard cu utilizatorul

    n general, utilizatorul rspunde la apariia unei boxe de dialog prin acionareabutonului adecvat rspunsuluisui/sauprin nscriereaunei informaiintr-o zondedicatacestui scop. Informaianscriseste transferatprogramului ca valoare afuncieicare iniiazdialogul grafic.

    FunciaInputBox FunciaMsgBox

  • 8/10/2019 Curs-10 Bazele Vba

    38/63

    Funcia InputBox

    La apelul funciei InputBox afieaz o cutie de dialog care conineun mesaj, dou butoane (OK i Cancel) i o zon text n care se poate

    tasta un rspuns (de tip String, chiar dac se transmite o valoare numeric).

    Se ateaptca utilizatorul s introducun text nzona rezervatisacioneze

    un buton. Textul introdus este transmis ca valoare a funciei la acionareabutonului OK (sau Enter), iar acionarea butonului Cancel (ca inchidereadialogului ca fereastr) transmite un irde lungime zero (indiferent de valoareazonei text.

  • 8/10/2019 Curs-10 Bazele Vba

    39/63

    Funcia InputBox

    Sintaxa:

    InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])

    undeprompt expresie de tip Stringreprezint mesajul afiat n dialog (max. 1024 caractere).title- expresia de tip String cu titlul ferestrei dialogului. Dac este omis se va folosi titlul

    aplicaiei.default - expresia de tip String, opional, coninnd textul afiat iniial n zona textrezervatutilizatorului. Textul este, nlipsa modificriilui, retransmis ca rspuns(cndesteapsatbutonul OK).xpos - expresia numericspecificndpoziiaorizontala dialogului (n twips, de la laturastngaa ecranului). nlipsa argumentului, boxa de dialog este centratorizontal.

    ypos- expresia numericspecificndpoziiaverticala dialogului (ntwips, de la latura desus a ecranului). n lipsa argumentului, boxa de dialog este poziionat la aproximativ otreime de ecran.helpfileeste expresia de tip String care identific fiierulHelp utilizat.Daceste indicathelpfile, trebuie s fie precizat i context. Textul de ajutor poate fi vzut prin tasta F1,anumite aplicaiiafieaziun buton Help.context - expresie numeric cu numrul de context Help al intrrii corespunztoare

    dialogului afiat. Apare obligatoriu mpreuncu helpfile.

  • 8/10/2019 Curs-10 Bazele Vba

    40/63

    Funcia MsgBox

    La apelul funciei MsgBox se afieaz un mesaj ntr-o cutie dedialog i se ateapt ca utilizatorul s acioneze unul dintre butoanele

    existente (numrul i tipul lor lor este fixat la apelul funciei).

    Funcia returneaz un ntreg indicnd butonul care a fost acionat.

    Sintaxa:

    [intvariable=]MsgBox(prompt[,buttons][,title][,helpfile, context])undeprompteste textul mesajuluibuttonseste o expresie numeric egal cu suma valorilor care specificnumrul,tipul iatributele butoanelor. Valoarea impliciteste 0.title,helpfile, contextidentice cu argumentele similare descrise la InputBox.

  • 8/10/2019 Curs-10 Bazele Vba

    41/63

    Funcia MsgBox

    Constantele pentru formarea argumentului buttonssunt:Constanta Valoare Descriere

    VbOKOnly 0 Numai butonul OK

    VbOKCancel 1 OK iCancel

    VbAbortRetryIgnore 2 Abort, Retry iIgnore

    VbYesNoCancel 3 Yes, No iCancel

    VbYesNo 4 Yes iNo

    VbRetryCancel 5 Retry iCancel

    VbCritical 16 Icoana de Critical Message

    VbQuestion 32 Icoana de Warning Query

    VbExclamation 48 Icoana Warning Message

    VbInformation 64 Icoana de Information Message

    VbDefaultButton1 0 Primul buton este cel implicit (echivalent cu Enter)

    VbDefaultButton2 256 Al doilea buton este cel implicit

    VbDefaultButton3 512 Al treilea buton este cel implicit

    VbDefaultButton4 768 Al patrulea buton este cel implicit

    VbApplicationModal 0 Application modal: aplicatia curent esteopritpncndrspundeutilizatorul

    VbSystemModal 4096 System modal: toate aplicaiile sunt opritepncndutilizatorul rspundela dialog

    Valorile 0-5 descriu butoanele, 16,32,48i 64 descriu stilul icoanei afiate, 0,256 i 512 determin butonul implicit,iar ultimul grup (0 i 4096) determinmodalitatea boxei de dialog. Laformarea argumentului Buttons se vaadun doar cte un numr din fiecaregrup.

  • 8/10/2019 Curs-10 Bazele Vba

    42/63

    Funcia MsgBox

    Pentru a utiliza valoarea returnatde funcie,aceasta trebuieinclusntr-o expresie (eventual atribuitunei variabilentregi).

    Valorile returnate de funcieicare pot fi testate, nexpresii logice, pentru a alegeramura de prelucrare doritde utilizator sunt:

    Constanta Valoare

    Descriere

    VbOK 1 OK

    VbCancel 2 Cancel

    VbAbort 3 Abort

    VbRetry 4 RetryVbIgnore 5 Ignore

    VbYes 6 Yes

    VbNo 7 No

    Acionarea tastei Esc este

    echivalent cu acionarea butonuluiCancel (dacacesta este prezent).

  • 8/10/2019 Curs-10 Bazele Vba

    43/63

    INSTRUCIUNI

  • 8/10/2019 Curs-10 Bazele Vba

    44/63

    Instruciunea de atribuire

    Sintaxa:

    =

    Exemple:

    a = 10

    mesaj = Hello, world!

    dataNasterii = #10/10/1990#

  • 8/10/2019 Curs-10 Bazele Vba

    45/63

    Instruciuni de decizie

    Sintaxa:

    If Then

    Else

    End If

    Dac condiia este adevrat se execut ;dac este fals seexecut .

    If a>=0 Then

    MsgBox Numar pozitiv

    Else

    MsgBox Numar negativ

    End If

  • 8/10/2019 Curs-10 Bazele Vba

    46/63

    Instruciuni de decizie

    Sintaxa:

    If Then

    ElseIf Then

    ElseIf Then

    . . .

    Else

    End If

  • 8/10/2019 Curs-10 Bazele Vba

    47/63

    Instruciuni de decizie

    Exemplu:

    If x>10 Then

    E = x*x + 1

    ElseIf x

  • 8/10/2019 Curs-10 Bazele Vba

    48/63

    Instruciuni de decizie

    Sintaxa:

    Select Case

    Case

    Case

    .

    Case

    Case Else

    End SelectStructura selectiv permite precizarea alternativelor de execuie atunci cnd suntmai multe astfel de situaii.Se evalueaz . Se verific dac valoarea obinutse ncadreaz ntr-una din listele de valori indicate, de la la , i ncaz afirmativ se execut blocul de instruciuni corespunztor acelei liste, altfel, seefectueaz blocul de instruciuni

  • 8/10/2019 Curs-10 Bazele Vba

    49/63

    Instruciuni de decizie

    Exemplu:

    Select Case numar

    Case 1

    zi = luni

    Case 2

    zi = marti

    Case 3 zi = miercuri

    case 4

    zi = joi

    case 5

    zi = vineri

    Case Else

    zi = sfarsit de saptamana

    End Select

  • 8/10/2019 Curs-10 Bazele Vba

    50/63

    Instruciuni repetitive

    Instructiunea repetitiva For Next

    Sintaxa:

    For = To [Step ]

    Next

    Se execut astfel: se iniializeaz cu valoarea . Cttimp este mai mic dect se execut grupul ise mrete cu

  • 8/10/2019 Curs-10 Bazele Vba

    51/63

    Instruciuni repetitive

    Instructiunea repetitiva For Next

    Exemple:

    S = 0

    For i = 1 To 10 Step 2

    S = S + i

    Next i

    Msgbox S = + Str(S)

    sir=

    For i = 1 To 10

    sir = sir + + Str(i)

    Next i

    Msgbox sir

  • 8/10/2019 Curs-10 Bazele Vba

    52/63

    Instruciuni

    Instructiunea repetitiva For EachNext

    Sintaxa:

    For Each IN

    Next

    Repet un grup de instruciuni pentru fiecare element al unui tablou sau al uneicolecii.

  • 8/10/2019 Curs-10 Bazele Vba

    53/63

    Instruciuni repetitive

    Instructiunea repetitiva For EachNext

    Exemple:

    Dim v(10) As Integer

    . . .

    sir=

    For Each x In v

    sir = sir + + Str(x)

    Next

    MsgBox sir

  • 8/10/2019 Curs-10 Bazele Vba

    54/63

    Instruciuni repetitive

    Instruciunea repetitiv While

    Sintaxa:

    While

    WEnd

    Se execut astfel:

    1.se evalueaz valoarea expresiei de tip logic

    2.Dac valoarea obinut este True, atunci se execut i sereia pasul 1, altfel, se trece la executarea primei instruciuni aflate dup WEnd.

    i i i i

  • 8/10/2019 Curs-10 Bazele Vba

    55/63

    Instruciuni repetitive

    Instruciunea repetitiv While

    Exemplu:

    s = 0

    x = 1

    While x < 5

    s = s + x

    x = x + 1

    Wend

    MsgBox s

    i i

  • 8/10/2019 Curs-10 Bazele Vba

    56/63

    Instruciuni

    Instruciunea repetitiv Do While

    Sintaxa:

    Do While

    Loop

    Se execut astfel:

    1.se evalueaz valoarea expresiei de tip logic

    2.Dac valoarea obinut este True, atunci se execut i sereia pasul 1, altfel, se trece la executarea primei instruciuni aflate dup Loop.

    I i i i i

  • 8/10/2019 Curs-10 Bazele Vba

    57/63

    Instruciuni repetitive

    Exemple:

    rasp = vbYes

    Do While rasp = vbYes

    . . .

    rasp = MsgBox("Continuati?", vbYesNo)

    Loop

    s = 0

    x = 1

    Do While x < 5

    s = s + x

    x = x + 1

    Loop

    MsgBox s

    I i i i i

  • 8/10/2019 Curs-10 Bazele Vba

    58/63

    Instruciuni repetitive

    Instruciunea repetitiv DO-Until

    Sintaxa:

    Do Until

    Loop

    Mod de execuie1.se evalueaz valoarea expresiei de tip logic

    2.dac valoarea obinut este False, atunci se execut i sereia pasul 1, altfel, se trece la executarea primei instruciuni aflate dup Loop.

    I i i i i

  • 8/10/2019 Curs-10 Bazele Vba

    59/63

    Instruciuni repetitive

    Exemple:

    rasp = vbYes

    Do Until rasp = vbNo

    . . .

    rasp = MsgBox("Continuati?", vbYesNo)

    Loop

    s = 0

    x = 1

    Do Until x >= 5

    s = s + x

    x = x + 1

    Loop

    MsgBox s

    I t i i titi

  • 8/10/2019 Curs-10 Bazele Vba

    60/63

    Instruciuni repetitive

    Instruciunea repetitiv DOLoop While

    Sintaxa:

    Do

    Loop While

    Mod de execuie1. se execut

    2. se evalueaz valoarea expresiei de tip logic

    2.dac valoarea obinut este True, atunci se reia pasul 1, altfel se trece laexecutarea primei instruciuni aflate dup Loop While.

    I t i i titi

  • 8/10/2019 Curs-10 Bazele Vba

    61/63

    Instruciuni repetitive

    Exemple:

    s = 0

    x = 1

    Do

    s = s + x

    x = x + 1

    Loop While x < 5

    MsgBox s

    Do

    nota = InputBox("Introduceti nota:", "Exemplu")

    Loop While nota10

    I t i i titi

  • 8/10/2019 Curs-10 Bazele Vba

    62/63

    Instruciuni repetitive

    Instruciunea repetitiv DO - Loop Until

    Sintaxa:

    Do

    Loop Until

    Mod de execuie1. se execut

    2. se evalueaz valoarea expresiei de tip logic

    2.dac valoarea obinut este False, atunci se reia pasul 1, altfel se trece laexecutarea primei instruciuni aflate dup Loop Until.

    I t i i titi

  • 8/10/2019 Curs-10 Bazele Vba

    63/63

    Instruciuni repetitive

    Exemple:

    s = 0

    x = 1

    Do

    s = s + x

    x = x + 1

    Loop Until x >= 5

    MsgBox s

    Do

    nota = InputBox("Introduceti nota:", "Exemplu")

    Loop Until nota>=1 And nota