BD_cursVBA _2016

Embed Size (px)

Citation preview

  • 7/26/2019 BD_cursVBA _2016

    1/59

    Visual Basic for Application

    Curs facultativ

    Nu intra in examen

  • 7/26/2019 BD_cursVBA _2016

    2/59

    BASIC sau Beginner's All-purpose Symbolic Instruction Code

    -apare 1963

    -este un limbaj simplu, creat de John G !emen" si #homas $ !urt% de la &artmouth

    Colle'e

    -a (ost scris pentru a permite pro'ramarea c)t mai simpl* pentru studen+i i ncep*tori,

    Visual Basic pentru Aplicaii - VBA - a fost transformat de firma

    .icroso(t n limbajul de pro'ramare al ntre'ii (amilii de produse .icroso(t /((ice

    0Access, $cel, 2ord, o4eroint5

    ucleul limbajului, componentele sale i mediul sunt aceleai pentru toate

    aceste aplica+ii, o(erind n plus, (a+* de macro comen%i urm*toarele (acilit*+i7

    1 apelarea (unc+iilor AI8

    tratarea erorilor8

    3 manipularea datelor din ba%* de date sub controlul unor instruc+iuni (olosind metodede acces la date speci(ice sau 'enerale8

    : manipularea structurii ba%ei de date prin pro'ram

    .acro comen%ile o(er* solu+ii rapide i simple, dar cu limit*ri multiple

    ;imbajul

  • 7/26/2019 BD_cursVBA _2016

    3/59

    Programare orientat peevenimente

    n programarea procedural tradiional,1. controlul evoluiei programului este determinat chiar de el nsui.!. "xecuia ncepe cu prima instruciune i urmea# o linie secvenial

    sau cu salturi$ n funcie de instruciunile programului.

    n programarea orientat pe evenimente,1.aciunile utili#atorului sau ale sistemului pe care se execut programulgenerea# evenimente.!.Pentru a cunoate care poriune de cod este executat$ tre%uie s tim ceevenimenta aprut$&.iar dac sunt mai multe$ ordinea lor de apariie.

    Esena interfeelor grace cu utilizatorul i a programrii orientatepe evenimente:

    poriunea de cod executat la un moment de timp depinde deaciunile utilizatorului

    Pentru c nuse poate ti ce va face utili#atorul$codul tre%uie s fac anumite presupuneri cu privire la starea mediului n

    care funcionea#.'in acest motiv codul (

  • 7/26/2019 BD_cursVBA _2016

    4/59

    Proceduri de evenimente(Event Procedures)

    Access

    1 recunoate apari+ia unui e=eniment de (ormular, raport sau control,

    apelea%* automat procedura de e=eniment denumit* dup* numele obiectului i al

    e=enimentului care a ap*rut

    $emplu7

    umele procedurii de tratare a e=enimentului =a (i

    Form_Click n situaia unui

    (ormular 0Form! "i e#eniment clic $Click!

    %eport_Click n situaia unui

    raport0%eport! "i e#eniment clic $Click!Ie"ire_Click n situaia unui

    un %uton cu numele eire i evenimentul care trateaz esteevenimentul !lic"

  • 7/26/2019 BD_cursVBA _2016

    5/59

    &umele obiectelor sunt stocate n

    proprietatea &ame se modific( nainte de scrierea primei proceduri de e=eniment

    dac* se modi(ic* numele obiectului dup* ce s-a scris o procedur* de e=eniment, at

    trebuie s* se modi(ice i numele procedurilor scrise p)n* atunci

    &eci, Access-ul (olosete aceeai strate'ie pentru construirea numelor procedurilor de

    e=enimente7

    #u$ i End #u$marc%eaz &nceputul i sf'ritul procedurii

    !uvintele care1.urmea# pe aceeai linie cu #u$ sunt numele procedurii de

    eveniment,iar instruciuni repre#int codul scris de programator prin care se

  • 7/26/2019 BD_cursVBA _2016

    6/59

    utilizator (*eneral

    Procedures)Access-ul permitecrearea de proceduri de(inite de utili%ator,care trebuie apelate eplicit, prin cod, pentru ca s* (ie eecutatenu sunt le'ate de e=enimentele 'enerate de utili%ator, ci de anumite 'rupuri de linii de

    pro'ram care se repet* n mai multe locuri

    $liminarea duplic*rii acestor linii se (olosesc proceduri de tipul (unc+ie

    0Function! sau subrutin($Sub!)

    *rocedurile utili+ator pot fi create oriunde

    n formulare rapoarte sau module 0,odules!)

    ,odulul este un obiect Access care stocea+( numai proceduri de(inite de utili%ator

    rocedurile din module pot (i re(erite din orice alte obiecte Access, n timp, permi+)nd scrierea

    unor biblioteci de proceduri utile pentru re%ol=area unor sarcini care se repet* des

    > deschide+i o ba%a de date Access.

    > clic pe butonul ,odules din fereastra ba+ei de date.

  • 7/26/2019 BD_cursVBA _2016

    7/59

    Pas!. clic pe %utonul +e pentru a crea

    as3 se selectea%* *rocedure))) Insert *rocedure a fi a(iat*

    (ereastra de dialo'7 in care se completea%*

    numele Procedurii n Name: Exemplu i n Type: Sub

    Scope: Public

  • 7/26/2019 BD_cursVBA _2016

    8/59

    numele Procedurii n Name: Ex i n Type: Function Scope: Public

  • 7/26/2019 BD_cursVBA _2016

    9/59

    Procedurile de tipul #u$ sau-unction

    Procedura #u$

    . nu &ntoarce valoare!. )ind asemntoare unei instruciuni.&. procedurile de eveniment sunt ntotdeauna de tipul #u$

    Procedura-unction1. ntoarce o valoare.!. se utili#ea# c,nd se calculea# valori de expresii tipul procedurii va )

    -unction.

    intaxa procedurii #u$ este:

    numeprocedur /Numele proceduriiinstruciuni -se numesc corpul procedurii.

    parametrisunt o list de nume de parametri separate prin virgule./%s(-iecare parametru respect sintaxa declaraiei de varia%il i esteechivalentul unei varia%ile n corpul procedurii.

    intaxa pentru )ecare parametru este(

  • 7/26/2019 BD_cursVBA _2016

    10/59

    ---tip: oricare dintre tipurile fundamentale de date

    (Integer, Long, Single, Double, Currency, String, Variant sau Obiect).

    ---dac tipul nu este specificat e!plicit, parametrul "a a=ea tipul Variant

    care poate stoca orice tip de date.

    ---parante#ele drepte specific faptul c elementele cuprinse ntre elesunt op+ionale

    ---parante%ele rotunde op+ionale dup* nume#ariabil* indic* un

    ar'ument de tipul tablou

    rocedura de tipul Sub se apelea+( prin numele ei "i

    prin specificareaparametrilor ei

  • 7/26/2019 BD_cursVBA _2016

    11/59

    "xemplurocedura de tipul Sub se apelea+(prin numele ei "i prin specificarea

    parametrilor ei

    &e eemplu, procedura Sub cu numele &umara/

    1.Va ) apelat prin +umara 0

    !."xecuia procedurii i re#ultatele ei se a)ea# nfereastra 0"'0A2".&. e apas !trl1*, apoi n ferestra se scrie +umara 0dup care se apas Enter

  • 7/26/2019 BD_cursVBA _2016

    12/59

  • 7/26/2019 BD_cursVBA _2016

    13/59

    intaxa procedurii -unction este:

    Semni(ica+ia elementelor sintactice ale procedurii Function sunt

    acelea"i cu cele aleprocedurii Sub cu urm(toarele e0cepii/

    1 procedurile Function asemenea #ariabilelor au tipuri de date care

    determin( tipul =alorii ntoarse8

    =aloarea se ntoarce atribuind numelui procedurii Function o #aloare

    n corpul (unc+iei

  • 7/26/2019 BD_cursVBA _2016

    14/59

    "3"P45

    * d i i t $* i t ! i bli $* bli !

  • 7/26/2019 BD_cursVBA _2016

    15/59

    *roceduri pri#ate $*ri#ate! "i publice $*ublic!

    $rocedurile unui formular sau raport sunt pri"ate,

    pot (i (olosite numai n epresii ale codului con+inut de

    (ormularul sau raportul n cau%*

    $rocedurile unui modul sunt publice,

    pot (i apelate din orice por+iune a aplica+iei, mai pu+in n

    ca%ul n care au (ost (*cute pri=ate prin (olosirea lui*ri#ate naintea de Sub sau Function)

    1bs/

    1umele procedurilor publice trebuie s* (ie unice ntr-oaplica+ie

    2) procedurile formularelor "i rapoartelor sunt pri=ate ?@ se

    pot scrie proceduri cu acelai nume n (ormulare sau rapoarte

    distincte

  • 7/26/2019 BD_cursVBA _2016

    16/59

    4aria$ile-i modi(ic* =aloarea n timpul eecu+iei pro'ramului-se de(inesc prin numme, tip i =aloare

    -ntr-o =ariabil* se re+ine ntotdeauna ultima =aloare atribuit* acesteia

    Sintaa declara+ie =ariabil*7

    &ume #ariabil( trebuie s( nceap( cu o liter( "i nu poate conine

    spaii sau punct +ecimal)

  • 7/26/2019 BD_cursVBA _2016

    17/59

    Scop "i durat( de e0isten(

  • 7/26/2019 BD_cursVBA _2016

    18/59

    5ipuri de date#ipul determin* =alorile pe care =ariabila le poate stoca&ac* tipul nu este speci(icat, implicit,

  • 7/26/2019 BD_cursVBA _2016

    19/59

    2ipuri Numerice

    #ipul speci(ic*

    1 ce (el de =alori poate lua o =ariabil*

    domeniul n care pot =aria =ariabila3 operatorii care pot a=ea ca operan%i aceste =ariabile

    : i spa+iul de A. ce se (olosete pentru stocarea =ariabile

  • 7/26/2019 BD_cursVBA _2016

    20/59

  • 7/26/2019 BD_cursVBA _2016

    21/59

    5ipul 6ir?@

    &ac* un ir mai scurt se atribuie unuia mai lun', caracterele lips* se

    completea%* automat cu spa+ii&ac* un ir mai lun' se atribuie unuia mai scurt caracterele n plus se

    trunchia%*

    irurile cu lun'ime (i* se completea%* automat n unele opera+ii cu spa+ii,

    eist* un set de (unc+ii utile pentru eliminarea acestora7

    7rim$! %7rim$! 7rim$!)

  • 7/26/2019 BD_cursVBA _2016

    22/59

    5ipul dat7orVariabilele de tipul dat(se stochea%* pe D octe+i sub (orm* de numere reale

    au domeniul ntre 1 ianuarie 1EE i 31 decembrie 9999ora de la E7EE7EE la 37F97F9

    Constantele de tipul dat* trebuie cuprinse ntre caractere nainte de a (i atribuite

    =ariabilelor de tipul dat* sub (orma 111999

    Aceste =ariabile se a(iea%* con(orm set*rilor (ormatului sort date recunoscute de

    calculator

    /rele =or (i i ele a(iate con(orm set*rilor (ormatului de timp recunoscut de

    calculator 01 ore sau : de ore5

    &atele pot (i adunate sau sc*%ute (olosind (unc+iile 3ateAdd$! "i 3ate3iff$!)

    iua luna "i anul pot fi e0trase folosind funciile 3ay$! ,ont$! "i ear$!)

    Funcia &oD$! ntoarce data "i ora curent()

    1peraii de formatare pot fi (*cute asupra datelor (olosind (unc+ia Format$!)

    Funciile 3ateSerial$! "i 7imeSerial$! se pot (olosi pentru crearea unor date i ore

    din =alori numerice ntre'i

  • 7/26/2019 BD_cursVBA _2016

    23/59

    5ipul 8$9ect

    se stochea%* pe : octe+i i are ca =aloare adresa unui obiect

    Holosind instruc+iunea Set o #ariabil( declarat( de tipul

    #b$ect va putea stoca adresa oricrui obiect!

  • 7/26/2019 BD_cursVBA _2016

    24/59

    eclararea ta$lourilor

    matrice de 1E1E se declar* ast(el7

    3im ,atrice$EE! As 3ouble

    sau3im ,atrice6$6 7o 6@ 6 7o 6@! As 3ouble

  • 7/26/2019 BD_cursVBA _2016

    25/59

    !onstante

    A Constantele simbolice sunt create de programator)

    u i modi(ic* =aloarea n timpul eecu+iei pro'ramului

    Sintaa pentru de(inirea constantelor simbolice

    B Constantele intrinseci sunt definite de cei care au scris

  • 7/26/2019 BD_cursVBA _2016

    26/59

    8peratori$presiile sunt (ormate din sec=en+e de operatori i operan%i

    rm*toarele 'rupe de operatori sunt prede(ini+i n

  • 7/26/2019 BD_cursVBA _2016

    27/59

  • 7/26/2019 BD_cursVBA _2016

    28/59

  • 7/26/2019 BD_cursVBA _2016

    29/59

  • 7/26/2019 BD_cursVBA _2016

    30/59

  • 7/26/2019 BD_cursVBA _2016

    31/59

    0N265C705N0If)))7en

    Se (olosete pentru eecu+ia condi+ional* a unei instruc+iuni sau a unui'rup de instruc+iuni

    Sintaa este7

    Condiie este de obicei o comparaie, dar poate f orice

    expresie care se evalueaz la o valoare numeric.'ac valoarea numeric este 8$ VBA i atri%uie valoarea deadevr -alse,dac este nenul$ valoarea de adevr atri%uit de VBA este5rueac condiie este True se execut instruciune sau

  • 7/26/2019 BD_cursVBA _2016

    32/59

    f5%enElse

  • 7/26/2019 BD_cursVBA _2016

    33/59

    f5%enElsee folosete pentru execuia condiiont a unui grup de instruciuni dintremai multe grupuri.

    Se testea%* condi%ie&.

    Dac este False% se testea& condi'ie( i aa mai departe p)n* la

    '*sirea unei condi+ii 7rue)

    C4nd s-a g(sit o astfel de condiie se e0ecut( grupul de instruc+iuni

    instruc%iuni'!, apoi se sare la codul imediat urmtor luiEnd )*!

    #p'ional se poate un 8lse la care se #a trece numai dac( nu s-a g(sit

    nici o condiie 7rue)

  • 7/26/2019 BD_cursVBA _2016

    34/59

    Select)))Case

  • 7/26/2019 BD_cursVBA _2016

    35/59

    Select)))Case

    - este o alternati=* pentru scrierea de If 7en 8lse -uri lungi asigur4nd o citire mai

    uoar* a codului

    este o singur expresie de test expresietest care se evalueaz o dat laintrarea n instruciune.se compar valoarea acestei expresii cu valoarile din )ecare !ase acse gsete o egalitate va executa instruciunile asociate !ase/uluirespectiv4istele de expresii listaexpresie conin una sau mai multe valori. 'acexist mai mult de o valoare n list$ tre%uie separate prin virgule. -iecaregrup de instruciuni instruciuni_x conine nici una$ una sau mai multeinstruciuni.

    #elect !ase evalueaz pe expresietest o singur dat la nceput, cuIf Then ElseIf se pot evalua expresii diferite pentru )ecare Elsef

  • 7/26/2019 BD_cursVBA _2016

    36/59

  • 7/26/2019 BD_cursVBA _2016

    37/59

    nstruciuni de ciclare-permit eecutarea repetat* a unei instruc+iuni sau 'rup de instruc+iuni uneori denumite

    i corpul ciclului, at)ta timp c)t o condi+ie r*m)ne ade=*rat*

  • 7/26/2019 BD_cursVBA _2016

    38/59

    C c u o))) oop

    epet* un 'rup de instruc%iuni ct timp o condi%ie este True sau devine True!

    rm*toarele (orme de cicluri 3o)))oop sunt #alide/

    condi%ie este o e!presie numeric sau ir op%ional care este True sau False!+ac condi'ie ia =aloarea &ull este eci#alent( cu False) Cu#intele ntre acolade

    repre+int( alternati#e adic( unul dintre ele poate s* (ie scrisentru ile instruc'iuni se execut at,ta timp c,t condi%ie este True%

    Pentru ntil instruc'iuni se execut c,t timp condi'ie nu este True!

    80it 3o produce ie"irea din ciclul 3o)))oop nainte de reali+area condiiei dep(r(sire a ciclului

    Controlul este dat instruc+iunii imediat urm*toare ciclului, prima linie dup* oop sau

    oop GHile JntilK condi'ie.!

    "l doilea tip de ciclu se execut cel pu'in o dat pentru c condi%ie, prin care se face

    testarea terminri, se atinge numai dup e!ecu%ia instruc%iunilor.

    Ciclul For)))&e0t

  • 7/26/2019 BD_cursVBA _2016

    39/59

    Ciclul For)))&e0t

    epet* 'rupul de instruc%iuni de un numr de ori.

    &. contor este o "ariabil de tip numeric,

    *. +nceput este "aloarea ini%ial a lui contor,. sfrit este =aloarea (inal*,

    : pas este o "aloare op%ional fiind cantitatea cu care se modific contor la

    (iecare reluare a ciclului

    &ac*pas nu este specificat se consider implicit &.

    Dac e!ist, pas poate (i po%iti= sau ne'ati= Instruc%iunile se e!ecut ct timpcontorsfrit pentru =alori po%iti=e ale luipas sau ct timp contor/sfrit pentru

    "alori negati"e ale lui pas. Exit For produce saltul la instruciunea imediat

    urm(toare liniei &e0t Gcontor. de terminare a

    corpului ciclului For)))&e0t)

    Jn ca+ clasic de utili+are al ciclurilor For)))&e0t este c4nd un ciclu este n interiorul

    altuia

  • 7/26/2019 BD_cursVBA _2016

    40/59

  • 7/26/2019 BD_cursVBA _2016

    41/59

    Ciclul For 8ac)))&e0t

  • 7/26/2019 BD_cursVBA _2016

    42/59

    Ciclul For 8ac)))&e0t

    epet* un 'rup de instruc%iuni pentru fiecare element de tablou sau

    colec%ie.

    &. element este o "ariabil folosit pentru parcurgerea iterati" a elementelor

    din grup.

    *. $entru colec+ii, element poate fi numai de tip Variant, "ariabil obiect

    generic sau "ariabil obiect speci(ic

    . grup este numele unei colec%ii de obiecte sau tablou.

    For Each!!!Next se ncepe numai dac* ngrup este cel pu%in un element. Dac

    e!ist mai multe elemente, instruc'iunisunt repetate pentru fiecare element

    pn la parcurgerea tuturor elementelor, c)nd ciclul se termin* s*rindu-se

    la instruc+iunea imediat urm*toare lui

    80it For produce ie"irea forat( din ciclu cu saltul la instruciunea imediat

    urm(toare ciclului)

    Ci l l il d

  • 7/26/2019 BD_cursVBA _2016

    43/59

    Ciclul ile)))end

    $ecut* instruc%iuni ct tip condi%ie este True!

    condi%ie este o e!presie numeric sau ir care se e"aluea# la True sau

    False!instruc%iuni repre#int una sau mai multe instruc%iuni care "or fi

    e!ecutate ct timp

    condi%ie este True! /ontrolul revine la condi'ie dup o execu'ie a

    corpului ciclului *ormat dininstruc%iuni cnd se "erific dac condi%ie este +nc True! +ac da%

    procesul se repet%alt(el se eecut* instruc+iunea urmtoare lui end)

  • 7/26/2019 BD_cursVBA _2016

    44/59

  • 7/26/2019 BD_cursVBA _2016

    45/59

    -ormulare Code Builder

  • 7/26/2019 BD_cursVBA _2016

    46/59

    -ormulare +Code Builder

  • 7/26/2019 BD_cursVBA _2016

    47/59

  • 7/26/2019 BD_cursVBA _2016

    48/59

  • 7/26/2019 BD_cursVBA _2016

    49/59

    onoad a lui list bo0 n prim plan)

  • 7/26/2019 BD_cursVBA _2016

    50/59

    p p

    Se introduce codul surs* a(erent ac+iunii care se dorete s* se reali%e la

    nc*rcare (ormului pe ecran n momentul eecu+iei (ormularului

  • 7/26/2019 BD_cursVBA _2016

    51/59

    .odi(icare date din tabela arteneri se (ace pe principiul7 ne deplas*m

  • 7/26/2019 BD_cursVBA _2016

    52/59

    .odi(icare date din tabela arteneri se (ace pe principiul7 ne deplas*m

    cu butoanele s*'e+i n sus i n jos p)n* la nre'istrarea care dormi s* o

    modi(ic*m e po%i+ion*m pe nregistrare, o modificm i apoiapsm click stnga de mouse pe butonul Salvare.

    Dac se modific numele Partenerului atunci apsm butonul

    List pentru ca modificarea s fie viibil i n list.

    !e"t#o"$ul %d l blocm ca s nu se modifice valoare astfel& n

    fereastra Property Sheet n fila Data setm Locked=Yes. Codul

    surs pentru modificare este:

  • 7/26/2019 BD_cursVBA _2016

    53/59

  • 7/26/2019 BD_cursVBA _2016

    54/59

  • 7/26/2019 BD_cursVBA _2016

    55/59

    'dgarea se face click pe butonul Adauare ac!ine ce "a a"ea ca efect olirea

  • 7/26/2019 BD_cursVBA _2016

    56/59

    'dgarea se face click pe butonul Adauare ac!ine ce "a a"ea ca efect olireac#mpurilor formularului$ se completea% c#mpurile cu informa!ii &i apoi see'ecut click pe (utonul Sal"are

  • 7/26/2019 BD_cursVBA _2016

    57/59

  • 7/26/2019 BD_cursVBA _2016

    58/59

  • 7/26/2019 BD_cursVBA _2016

    59/59

    -ereastra Cod ursa 9tergere