c1_vba

Upload: stoian-ionut

Post on 03-Apr-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/28/2019 C1_VBA

    1/38

    VBAVISUAL BASIC FOR

    APPLICATIONS

    GIANINA GABORC1 INFORMATICA APLICATA II

  • 7/28/2019 C1_VBA

    2/38

    CONTINUT

    BAZELE PROGRAMRIIVBA TIPURI DE DATE INSTRUCIUNILELIMBAJULUI

  • 7/28/2019 C1_VBA

    3/38

    INTRODUCERE

    VBA (Visual Basic for Applications) = limbaj de programare creat

    de Microsoft pentru automatizarea aplicaiilor Ataat iniial componentelor din Microsoft Office, n prezent >

    200 de aplicaii include VBA - CorelDraw, AutoCAD,

    VBA este parte a familiei de limbaje Visual Basic & oferera suportpentru limbaj, interfaa - forme, controale, obiecte si tehnologii

    de accesare a datelor Atunci cnd este gzduit de alt aplicaie /Excel VBA ofer

    mijloacele de interaciune cu obiectele aplicaiei gazd & permitedezvoltatorilor s furnizeze soluii complete care extind i/sauintegreaz aplicaia gazd

    Pentru a programan VBA o cerin suplimentar fa de alte

    limbaje este aceea c trebuie s se cunoasc aplicaia gazd -Word, Excel, PowerPoint, Access

  • 7/28/2019 C1_VBA

    4/38

    SCURT ISTORIC

    1993 VBA apare n Microsoft Excel1994 VBA este ataat la Microsoft Project

    1995 VBA inclus n Microsoft Access nlocuindAccess Basic

    1996 VBA devine element n Visual Basic

    1996 VBAinclus n Word nlocuind Word Basic

    1997 VBA este integrat n suita Office 97

    1997 Microsoft liceniaz VBA pentru utilizarean alte aplicaii software

  • 7/28/2019 C1_VBA

    5/38

    ORGANIZARE PROIECTE VBA

    Obiectele iprelucrrile necesare realizrii unei aplicaiiVBA sunt gestionate sub forma unui proiect

    Un proiect conine documentele aplicaiei suport & fiierespecifice

    Module standard (module de cod) - conindeclaraii si proceduriiar fiecare document (inclusiv foile de calcul din Excel) au ataatcte un modul de cod sunt fiiere.bas

    Module de clas - conin definirea obiectelor/claselor utilizatorfiiere.cls Forme - fiiere.frm care conin definirea interfeei utilizatori

    tratarea evenimentelor asociate Referine - pentru a avea acces la entiti din alte proiecte acestea

    se vor indica drept referine ale proiectului curent & aici se indic si

    bibliotecile de tipuri necesare proiectului curentExemplu doresc sa lucrez programatic n Excel cu obiecte Word trebuie specificatreferina la biblioteca Word

  • 7/28/2019 C1_VBA

    6/38

    ORGANIZARE PROIECTE VBA

    Un modul de cod ncepe cu o seciune de declaraii

    (poate fi vid) & instruciuni neexecutabile prin carese definesc constante, variabile prin utilizareaclauzelor Public, Private, Static se poate precizadomeniul de vizibilitate al entitilordefinite

    Dup seciunea declaraiilor se definesc procedurilemodulului & structura modulului este secvenialneexistnd intersecii nevide ntre proceduri

    Se recomand ca toate declaraiile de variabile iconstante de la nivel de modul s fie grupate la

    nceputul modulului chiar daca este posibilaintercalarea lor printre declaraiile de proceduri

  • 7/28/2019 C1_VBA

    7/38

    ORGANIZARE PROIECTE VBA

    Prin domeniul unei entiti se nelege mulimea

    instruciunilorn care se poate referi entitatea. In domeniul su orice entitate se considervizibil

    deci poate fi referit

    Domeniul este dependent de locul definirii entitii

    de clauzele utilizate la definire i de parametriiglobali ai proiectului

    Exist 3 tipuri de domenii

    la nivel de procedur la nivel de modul - privat la nivel de modul - public

  • 7/28/2019 C1_VBA

    8/38

    ORGANIZARE PROIECTE VBA

    Nivel procedur

    o variabil definit ntr-o procedur prin Dim estevizibil doar n procedura respectiv

    intr-o procedur nu se pot utiliza declaraiiPublic

    o variabil definit Statici pstreaz valoarea ntreapeluri succesive ale procedurii & celelalte variabilelocale se reiniializeaz la fiecare apel

    dac o variabil trebuie s fie referit n alte proceduri

    atunci ea se va declara la nivel de modul sau se vatransmite prin parametri

  • 7/28/2019 C1_VBA

    9/38

    ORGANIZARE PROIECTE VBA

    Nivel modul - privat

    variabilele definite la nivel de modul n zonaDeclarations prin Dim sau Private (recomandat) suntvizibile doar n modulul respectiv

    dac se utilizeaz instruciuneaOption Private Modulen zona Declarations atunci toate variabilele iprocedurile publice vor fi vizibile doar n proiectul curentiar in lipsa acestei declaraii procedurile publice suntvizibile n toate proiectele care fac referin la proiectul

    curent

  • 7/28/2019 C1_VBA

    10/38

    ORGANIZARE PROIECTE VBA

    Nivel modul - public

    variabilele declarate la nivel de modul prin Publicsunt vizibile n toate modulele proiectului curent cai n proiectele care au referin la acesta cuexcepia cazului, explicat anterior al utilizriiinstruciuniiOption Private Module

    procedurile sunt publice n mod implicit cu excepiaprocedurilor de tratare a evenimentelor care suntPrivate n mod implicit

  • 7/28/2019 C1_VBA

    11/38

    TIPURI DE DATE

    Variabilele i constantele utilizate ntr-un program VBA pot

    avea diverse tipurisimilare celor uzuale n alte limbaje Existns i un tip universal tipul Variant asignat

    implicit tuturor variabilelor nedeclarate altfel

    Tipuri de date predefinite

    Boolean = True (-1), False (0) Byte = 0 255, ntreg fr semn Currency = 15 cifre la parteantreag, 4 la partea zecimal Date = date calendaristice i/sau timp orar Decimal (a se vedea observaiile din documentaie)

    Single, Double = numere reale n simpl, dubl precizie Integer, Long = numere ntregi Object = adrese pe 32 de bii care se refer la obiecte

  • 7/28/2019 C1_VBA

    12/38

    TIPURI DE DATE

    Tipuri de date predefinite - continuare

    String = iruri de caractere de lungime variabil (pn la 2^31 caractere)sau de lungime fix (pn la 2^16 caractere) Variant = tipul implicit & poate conine valori avnd orice alt tip de date cu

    excepiairurilorcu lungime fixi a tipurilor definite. Memoria utilizat estemai mare & accesul este mai lent

    Valori speciale Empty = un variant neiniializat

    Null = un variant care programatic nu conine date Error= valoarea care arat ndeplinirea unei condiii de eroare - procesarea

    este a utilizatorului Nothing = valoarea utilizat pentru disocierea unei variabile de tip Object de

    un obiect efectiv Tipuri definite de utilizator - sinonim uneinregistrri

    [Private|Public] Type varnameelementname[([subscripts])] As type[elementname[([subscripts])] As type]

    End Type

  • 7/28/2019 C1_VBA

    13/38

    IDENTIFICATORI

    Denumirile procedurilor, constantelor, variabilelor

    argumentelor respectcerinele uzuale primul caracter este o liter nu coninespaiu, punct,semnul exclamrii, @,&,$,# lungimea este de maxim 255 caractere la acelai nivel de existen nu pot s existe denumiri identice.

    Nu se recomand denumiri identice cu nume defuncii, instruciuni. (prin calificare se poate totuiutiliza entitatea cu denumirea implicit).

    VBA nu este case-sensitive - mediul de programare

    pstreaz capitalizarea din prima apariie a denumirii

  • 7/28/2019 C1_VBA

    14/38

    DECLARAIIConstante

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

    In lipsa tipului se va ataa tipul cel mai apropiat de expresiamenionat

    Implicit constantele sunt Private & la nivel de procedur sau demodul clas domeniul lor nu poate fi modificat prin Public, la nivelde modul standard pot fi Public

    Constantele declarate n proceduri sunt locale procedurii Se pot declara pe o linie mai multe constante

    Const NrLinii = 15Public ConstMesaj = Tastati numarul de liniiPublic Const NrLinii = 15, Pondere AsSingle =1.25

    !!De remarcat - NrLinii este Integer, Mesaj este String, Pondere este Public !

  • 7/28/2019 C1_VBA

    15/38

    DECLARAIIVariabile

    Variabilele - simple sau tablou se definesc explicit prininstruciuni Dim, Private, Public, ReDim sau Static & tipul sedeclar explicit sau reamintim este implicit Variant

    Dac modulul conine declaraia Option Explicit n zona dedeclaraii atunci toate variabilele trebuie s se declare explicit ->in lipsa declaraiei, apariia unui nou identificator produce

    definirea unei noi variabile - de tip VariantDim [With Events] varname[([subscripts])] [As [New] type]

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

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

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

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

    Se pot declara mai multe variabile pe o linie separate prin virguledar tipul trebuie specificat la fiecare

  • 7/28/2019 C1_VBA

    16/38

    DECLARAIIVariabile

    In instruciunile de declarare a variabilelor

    varname = numele variabilei subscripts = dimensiunile tabloului; pot exista cel mult 60 de indici

    separai prin virgule un indice fiind de forma

    [lowerTo] upper Limita inferioar este implicit 0, dar poate fi controlat prin

    instruciuneaOption Base {0 | 1} Dac nu se specific limitele indicilor apar doar parantezele se

    definete o variabil dinamiccare se poate redimensiona prinReDim

    type = tipul variabilei definite -> Byte, Boolean, , String,String*length, tip utilizator, tip de obiect

    New este utilizat doar pentru variabile obiect i produce crearea uneinoi instane la prima referire a variabilei

  • 7/28/2019 C1_VBA

    17/38

    DECLARAIIProceduri

    Exist trei tipuri de proceduri Sub = poate primi i transmite informaii prin interme-

    diul unor variabile publice sau/i al parametrilor &numele procedurii Sub nu are ataat nici o valoare

    Function = se deosebete de o procedur Sub prinaceea c numele are ataat o valoare - valoareafunciei

    Property = caracteristic definirii proprietilorunui obiectSe va discuta la subiectul definirea obiectelor

    Orice instruciuneexecutabil trebuie saparinunei proceduri

    Declaraiile pot sapari n afara procedurilor lanivel de modul

  • 7/28/2019 C1_VBA

    18/38

    DECLARAIIProceduri

    Declararea unei proceduri Sub[Private|Public] [Static] Sub name ([arglist])

    [declaraii][instruciuni][Exit Sub]

    [instruciuni]

    End Sub Public, Private, Static = determin vizibilitatea -> Publicvizibil pentru

    tot proiectul (n funcie de Option Private se controleaz vizibilitateapentru alte proiecte) Privatevizibil doar n modulul unde apare Static toate variabi-lele locale sunt statice (pstreaz valorile ntre apeluri

    name = numele procedurii & se recomanda o construcie de tipAciuneObiect - exemplu ModificaFereastra, StergeButon .

    arglist = lista de argumente (explicate n continuare) separate prinvirgule

    prin Exit Sub se iese din procedur

  • 7/28/2019 C1_VBA

    19/38

    DECLARAIIProceduri

    Un argument se definete prin

    [Optional] [ByVal | ByRef] [ParamArray] varname[()] [As type][=defaultvalue]

    Optional = parametrul nu este obligatoriu & se vor grupa obligatoriu lafinalul listei de argumente

    ByVal, ByRef = modul de apel prin valoare/referin -> Implicit esteapelul prin referin

    ParamArray = folosit doar ca ultim argument denot un tablou Optionalde elemente de tip Variant

    varname = numele argumentului iar arantezele sunt necesare pentru aindica un tablou

    type = tipul parametrului -> pentru argumentele obligatorii poate fi i tiputilizator sau de obiect

    defaultvalue = valoarea implicit pentru argumentele Optional -> poate fiorice dar pentru tipul Object poate fi doarNothing

  • 7/28/2019 C1_VBA

    20/38

    DECLARAIIProceduri

    Declararea unei proceduri Function[Private|Public] [Static] Functionname ([arglist]) [As type]

    [declaraii][instruciuni][name = expression]

    [Exit Function][instruciuni][name = expression]

    End Sub

    declararea este similar unei proceduri Sub dar apare n plus

    posibilitatea de a defini explicit tipul funciei prin clauza As type se remarc necesitatea de a atribui o valoare funciei prin

    name = expresie

    prin Exit Function se iese din procedur

  • 7/28/2019 C1_VBA

    21/38

    EXECUTAREA PROCEDURILOR

    Pentru a executa o procedurSub din interiorul altei proceduri -

    cu ndeplinirea condiiei de vizibilitate se scrie pe o linie separat[Nume_proiect.Nume_modul.]Nume_procedurlist_parametri

    Lista parametrilor de apel = efectivi se include ntre parantezedoar n cazul n care se utilizeaz apelul procedurii prin

    instruciuneaCall Argumentele efective sunt separate prin virgule i trebuie s

    respecte ordinea i tipul argumentelor din definiia procedurii

    Este uzual transmiterea valorilor prin tehnica argumentelornumite caz n care lista parametrilor efectivi este oniruire deexpresii

    nume_argument:=valoare_argument

    In acest caz nu mai este necesars se respecte ordinea din definiie -> sevor da valorile neopionalei doar cele opionale necesare execuiei dorite

  • 7/28/2019 C1_VBA

    22/38

    EXECUTAREA PROCEDURILOR

    pentru a executa o procedur Function din interiorul altei

    proceduri (cu ndeplinirea condiiei de vizibilitate) se vautiliza expresia (acolo unde este necesar valoarea funciei)

    [Nume_proiect.Nume_modul.]Nume_functie(list_parametri)

    este de remarcat prezena obligatorie a parantezelor carenchid lista parametrilor

    dac se utilizeaz apelul prin Call valoarea funciei estepierdut doar prelucrrile colaterale = side effectsproducnd efect dac exist astfel de prelucrri - situaie

    nerecomandat

  • 7/28/2019 C1_VBA

    23/38

    CONSTANTE PREDEFINITE

    Bibliotecile de obiecte Office ofer o mulime de constante predefinite

    (built-in) care pot fi utilizate pentru a stabili proprieti sau pentru atransmite argumente

    Constantele predefinite sunt de regul grupate n tipuri enumerate carereprezint valorile posibile pentru o proprietate specific

    Este posibil s se utilizeze valoarea numeric a constantei DAR esterecomandat s se utilizeze constanta predefinit deoarece dezvoltrile

    ulterioare ale aplicaiilor tind smenin denumirile constantelori nuvalorile lor

    Exemplu se prefer

    Application.DisplayAlerts = wdAlertAll

    n loc de

    Application.DisplayA lerts = -1

    pentru a fixa n Word afiarea tuturor mesajelor de alert laexecuia procedurilor - se remarca i avantajul claritii codului !!

  • 7/28/2019 C1_VBA

    24/38

    INSTRUCIUNIVBA

  • 7/28/2019 C1_VBA

    25/38

    INSTRUCIUNI - GENERALITI

    Exist trei categorii de instruciuni VB

    de declarare (prezentate anterior)

    de atribuire

    executabile care iniiaz aciuni - execut metode sau

    proceduri, controleaz fluxul execuiei O instruciune se poate continua pe mai

    multe linii utiliznd caracterele de

    continuare _ !de remarcat spaiul iniial

    2 instruciuni se pot scrie pe o aceeai linie

    dac sunt separate de :

  • 7/28/2019 C1_VBA

    26/38

    INSTRUCIUNI - GENERALITI

    O linie de cod poate fi identificat

    printr-o etichet orice identificator care ncepe din prima coloanise termin cu caracterul :

    printr-un numr orice combinaie de cifre care ncepe din primacoloani este unic n modulul respectiv.

    Identificatorii de linii pot fi utilizai n instruciuni de control (situaienerecomandat) sau n procesul de tratare a erorilor (situaiediscutat ulterior

    Inserare comentarii pentru documentare cod

    pe linii separate care ncep cu un apostrof sau cu cuvntul Remurmat de un spaiu

    pe aceeai linie cu instruciunea, la sfritul liniei, dup un apostrof linia de comentariu nu se poate continua similar unei linii instruciune

  • 7/28/2019 C1_VBA

    27/38

    OPERATORI

    Operatori aritmetici: ^ (ridicare la putere), *,/,-,+(adunare, concatenareiruri), \ (mprirentreag), mod

    Operatori de comparare: =,=,,Is (object1 Is object2), Like (string Like pattern)

    operatorul Is produce Truedac variabilele se refer la acelai obiect operatorul Like produce Truedacirul este conform ablonului Comportarea depinde i de prezena instruciuniiOption Compare Binary -

    ordinea este a reprezentrii interne potrivit codului de pagin - sau OptionCompare Text - comparare insenzitiv la capitalizare, ordinea estedeterminat de setrile locale

    Operatori de concatenare: +, &

    Operatori logici:And, Eqv, Imp, Not, Or, Xor

    De remarcat - n afara conversiilor uzuale la tipul numeric cel mainalt rezultatul este Null atunci cnd cel puin un operand este Null &o expresie Empty este considerat 0 n calcule numerice

  • 7/28/2019 C1_VBA

    28/38

    INSTRUCIUNI DE ATRIBUIRE

    Atribuirile se efectueaz prin instruciunile Let - pentru valorineobiectuale Set - pentru obiecte LSet i RSet - pentru atribuirispeciale de iruri sau tipuri definite

    [Let] varname = expression

    Valoarea expresiei trebuie s fie compatibil ca tip cu variabila (ambelenumerice sau ambele iruri) iar conversiile sunt cele uzuale

    O variabilVariant poate primi orice valoare, reciproc doardac subtipul

    Variant al expresiei este compatibil cu variabila.

    LSetstringvar = stringLSetvarname1 = varname2

    Copiere cu aliniere la stnga irde caractere fiind binar se poate utilizai ntre tipuri utilizator (rezultatul este n gestiunea utilizatorului si nu seface nici o verificare la copiere) caracterele neocupate se completeaz cu

    spaii & cele n plus se pierdRSetstringvar = string

    Copiere cu aliniere la dreapta numai pentru variabile/expresii string

  • 7/28/2019 C1_VBA

    29/38

    VARIABILE OBIECT

    Declarare variabila de tip obiect se poate efectua prin instruciune de tip

    Dim objvarAs Objectsau specificnd exact numele de clasDim myDoc As Word.Document

    prima situaie nu permite nici o verificare n momentul compilrii &ataarea unui obiect la variabil este o legare trzie -> late bind ing

    a doua situaie permite verificare n momnentul compilarii al doilea cazvorbindu-se de o legare timpurie -> ear ly bindin g

    Atribuirea (legarea) unui obiect la o variabil obiect se obine prin

    Set objectvar = {[New] objectexpression | Nothing}

    prin New se creeaz o nouinstan a clasei & prin Nothing se rupeasocierea cu obiectul eliberndu-se resursele sistem i de memorie

    utilizate frNew se creeaz doar o referin/pointer la obiect astfel nct mai

    multe variabile se pot referi la acelai obiect/instan

  • 7/28/2019 C1_VBA

    30/38

    INSTRUCIUNI EXECUTABILE

    Execuia unui program are loc n lipsa oricrui control,

    instruciune cu instruciune, de la stnga la dreapta i desus n jos, sens ce poate fi modificat doar de ordinea depreceden a operaiilorn evaluarea expresiilor

    Cum o asemenea situaie nu poate acoperi toatenecesitile de programare similar altor limbaje deprogramare necesitatea instruciunilor de control afluxului execuiei

    Unele instruciuni au fost pstrate n VB doar pentrucompatibilitate cu versiunile mai vechi & se recomandautilizarea structurilor similare formelor actuale din altelimbaje de programare

  • 7/28/2019 C1_VBA

    31/38

    INSTRUCIUNI DE TRANSFER

    GoSub Return

    n cadrul unei proceduri un grup de instruciuni poate fi organizat ca o subrutinidentificat prin linia de start & transferul i ntoarcerea se execut prin

    GoSub line

    line

    Return

    unde line este un identificator de linie din aceeaiprocedur & pot exista maimulte instruciuniReturn, prima atins producnd revenirea la instruciuneacare urmeazdup cea mai recentGoSub

    GoTo line Transferul controlului execuiei la o anumit linie se realizeaz prin

    GoTo lineunde line este un identificator de linie din aceeaiprocedur

    On Error - se va discuta la controlul erorilor

    OnGoSub, OnGoTosunt structuri arhaice

  • 7/28/2019 C1_VBA

    32/38

    INSTRUCIUNI DE OPRIRE

    End

    Prin aceastinstruciune care poate fi plasat oriunde n program execuiaeste terminat imediat, fr a se mai executa vreo poriune de cod - cumar fi secvene de tratare a evenimentelor specifice terminrii unui program

    Fiierele deschise prin Open se nchid variabilele sunt eliberate instanelecreate se distrug referinele din alte aplicaii sunt invalidate memoria esteeliberat

    De notat c pentru o terminare normal a programului se vor descrca

    toate formele iar programul se termin singur atunci cnd nu exist alteaplicaii care fac referin la obiecte create din modulele clasi nu existcod care se execut

    Stop

    suspend execuia ca i End dar (executat din mediul VBA) nunchide fiierele si nici nu elibereaz variabilele & este similar fixriiunui breakpointn program

  • 7/28/2019 C1_VBA

    33/38

    INSTRUCIUNI DE OPRIRE

    DoEvents

    Prin apelul la aceastfuncieDoEvents()se cedeaz controlul ctre sistemul de operare & controlul esteredat programului dup ce sistemul de operare a procesatevenimentele din coada de evenimente i a procesat toatecaracterele din coada SendKeys

    Exit

    Instruciunea sub una din formele

    Exit Do

    Exit ForExit FunctionExit Sub

    ntrerupe o ramur de execuie pentru a continua cu nivelul apelant!!! Nu trebuie confundat cu End

  • 7/28/2019 C1_VBA

    34/38

    STRUCTURI ITERATIVE

    DoLoop

    Repet un grup de instruciuni atta timp ct o condiie este sau devineTrue

    Are dou forme sintactice, dup momentul verificriicondiiei

    Do [{While | Until} condition][statements]

    [Exit Do][statements]

    Loop

    sau

    Do

    [statements][Exit Do][statements]

    Loop [{While | Until} condition]

    STRUCTURI ITERATIVE

  • 7/28/2019 C1_VBA

    35/38

    STRUCTURI ITERATIVE

    ForNext repet un grup de instruciuni de un numrdeterminat de ori

    Forcounter = start To end [Step step][statements][Exit For][statements]

    Next [counter]

    For EachNext repet un grup de instruciuni pentru fiecare element al unui tablou sau

    al unei colecii

    ForEach element In group[statements][Exit For][statements]

    Next [element]

  • 7/28/2019 C1_VBA

    36/38

    STRUCTURI ITERATIVE

    WhileWend

    Repet un grup de instruciuni ct timp rmne adevrat o condiieWhile condition

    [statements]Wend

    With

    Execut un grup de instruciuni pentru un obiect sau pentru un tiputilizator

    With object

    [statements]End With

    Obiectul nu poate fi modificat n grupul de instruciuni

  • 7/28/2019 C1_VBA

    37/38

    STRUCTURI DE DECIZIE

    IfThenElse

    Ifcondition Then [statements] [Else elsestatements]

    sau

    Ifcondition Then[statements]

    [ElseIfcondition-n Then[elseifstatements]

    [Else

    [elsestatements]]End If

    Condiia poate fi - numai aici

    o expresie numeric /string care se evalueaz la True/False (Null este False)sau o construcie de forma

    TypeOfobjectname Is objecttype

  • 7/28/2019 C1_VBA

    38/38

    STRUCTURI DE DECIZIE

    Select Case

    SelectCase testexpression[Case expressionlist-n

    [statements-n]]...

    [Case Else

    [elsestatements]]End Select

    testexpression este o expresie numeric sau string. expressionlist-n este o list de expresii separat prin virgule de tip

    expresie expresie To expresie Is operatordecomparare expresie