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