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
Top Related