Sunteți pe pagina 1din 63

Bazele programrii VBA

Introducere
VBA (Visual Basic for Applications) este un limbaj de programare creat de
Microsoft pentru automatizarea aplicaiilor. Ataat iniial componentelor din
Microsoft Office, n prezent 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 peste
VBScript. Totui, VBA este acum un element esenial n versiunea complet VB,
oferind suport pentru limbaj, interfaa pentru forme,controale, obiecte, tehnologii
de accesare a datelor.
Atunci cnd este gzduit de alt aplicaie, cum ar fi Excel, VBA ofer mijloacele
de interaciune cu obiectele aplicaiei gazd. n acest caz, VBA permite
dezvoltatorilor s furnizeze soluii complete care extind i/sau integreaz
aplicaiile gazd.
Pentru a programa n VBA trebuie totui reinut c o cerin suplimentar fa de
alte limbaje este aceea c trebuie s se cunoasc aplicaia gazd (Word, Excel,
PowerPoint, Access etc.).
Scurt istoric
1993 VBA apare n Microsoft Excel
1994 VBA este ataat la Microsoft Project
1995 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 liceniaz VBA pentru utilizarea n alte aplicaii software
Editorul Visual Basic
Utiliznd Visual Basic Editor (VBE) se poate crea, edita, depana
i executa cod program asociat cu documente Microsoft Office.Proiectele
dezvoltate n VBE, dei sunt asociate aplicaiilor din Office, nu pot fi reduse, ca
problematic, la procesarea de texte (Word), calcul tabelar (Excel), prezentri
electronice (PowerPoint) sau baze de date (Access). Este corect s se considere
aceste proiecte drept aplicaii similare celor dezvoltate n alte medii de programare,
avnd ns la dispoziie componentele aplicaiilor din Office. Cu alte cuvinte, nu este
vorba de o limitare a posibilitilor de prelucrare, ci o potenare a acestora prin
apelul 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 n dezvoltarea proiectului compenseaz acest neajuns. n
plus nu trebuie uitat c orice aplicaie necesit o interfa utilizator (puternic n
Microsoft Office) i c aplicaiile de baz sunt ntreinute i completate de Microsoft,
astfel nct proiectele noastre se vor actualiza i ele o dat cu componentele Office.
Mediul VBE este identic cu mediul de dezvoltare din Microsoft Visual Studio
(Visual Basic, C++ etc.) astfel c practica n VBA poate fi considerat introductiv
ctre alte aplicaii RAD.




Interfaa grafic VBE
Pentru a deschide editorul VB, mai nti se va porni o aplicaie din
Microsoft Office, apoi se poate aciona combinaia Alt+F11 (dac nu a fost
atribuit altei operaiuni), sau butonul Visual Basic din grupul Code din fila
Developer vizualizat ntr-o aplicaie Office.




Interfaa grafic VBE este suficient de complex, asemntoare mediilor de
programare din Visual Studio. Pe lng obiectele grafice uzuale (Menu Bar, bare de
unelte) sunt disponibile ferestre specializate pentru lucrul cu anumite categorii de
obiecte:Properties Window pentru vizualizarea i fixarea proprietilor n momentul
proiectrii (design-time);Project Explorer care permite navigarea, vizualizarea i
modificarea proiectelor deschise la un moment dat;Code Window unde este se
scrie i este vizibil codul surs al proiectului activ;Locals Window care permite
vizualizarea variabilelor locale cu valorile lor;Immediate Window care permite
executarea imediat a unei linii de cod;Watch Window unde se afieaz valorile
unor expresii specificate.

Organizarea proiectelor VBA
Obiectele i prelucrrile necesare realizrii unei aplicaii VBA sunt gestionate sub
forma unui proiect.
Un proiect conine, pe lng documentele aplicaiei suport (Word, Excel etc.)
componente specifice aciunilor programatice: module de cod, module clas, forme.
Module standard (module de cod) - conin declaraii si proceduri. Fiecare
document (i componente cum ar fi foile de calcul din Excel) au de asemenea
ataat cte un modul de cod. Ele pot fi salvate ca fiiere .bas
Module de clas - conin definirea obiectelor (clase) utilizator. Pot fi salvate ca
fiiere .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 vor
indica drept referine ale proiectului curent. Tot aici se indic bibliotecile de tipuri
necesare proiectului curent (de exemplu, pentru a lucra programatic n Excel cu
obiecte Word, trebuie specificat referina la biblioteca Word).

Proiect VBA Modul de cod
Un modul de cod ncepe cu o seciune de declaraii (ea poate fi vid), instruciuni
neexecutabile prin care se definesc constante, variabile. Utiliznd clauze Public,
Private, Static se poate preciza domeniul de vizibilitate a entitilor definite.
Dup seciunea declaraiilor, se definesc procedurile modulului. Structura modulului
este secvenial, neexistnd intersecii nevide ntre proceduri.
Se recomand ca toate declaraiile de variabile i constante de la nivel de modul s
fie grupate la nceputul modulului, dei este posibil ca ele s fie intercalate printre
declaraiile de proceduri.
Prin domeniul unei entiti se nelege mulimea instruciunilor n care se poate
referi entitatea. n domeniul su, orice entitate se consider vizibil, deci poate fi
referit. Domeniul este dependent de locul definirii entitii, de clauzele utilizate la
definire 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.

Proiect VBA Modul de cod
Nivel procedur
O variabil definit ntr-o procedur, prin Dim, este vizibil doar n procedura
respectiv. ntr-o procedur nu se pot utiliza declaraii Public. O variabil definit
Static i pstreaz valoarea ntre apeluri succesive ale procedurii; celelalte
variabile locale 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 va
transmite prin parametri.

Nivel modul, privat
Variabilele definite la nivel de modul (n zona Declarations) prin Dim sau Private
(recomandat) sunt vizibile doar n modulul respectiv. Dac se utilizeaz
instruciunea Option Private Module (n zona Declarations) atunci toate
variabilele i procedurile publice vor fi vizibile doar n proiectul curent. n lipsa
acestei declaraii, procedurile publice sunt vizibile n toate proiectele care fac
referin la proiectul curent.
Proiect VBA Modul de cod
Nivel modul, public

Variabilele declarate la nivel de modul prin Public sunt vizibile n toate modulele
proiectului curent, ca i n proiectele care au referin la acesta (cu excepia cazului,
explicat anterior, al utilizrii instruciunii Option Private Module). Procedurile sunt
publice n mod implicit, cu excepia procedurilor de tratare a evenimentelor, care
sunt Private n mod implicit.
Tipuri de date
Tipuri predefinite de date
Boolean - valori logice, adic True (-1) i False (0)
Byte - valori naturale din intervalul [0,255]
Currency - valori financiare care au 15 cifre la partea ntreag i 4 la
partea zecimal
Date - date calendaristice i/sau timp orar. ncadrarea valorilor
acestui tip se face utiliznd caracterul #. (ex. #8/23/54#; #4/21/05
16:05#).
Single - valori reale cu precizie simpl (ex. 8.97)
Double - valori reale n dubl precizie, pot fi valori mult mai mari sau
mult mai mici dect tipul Single (ex. 2.0E+79)
Integer - valori ntregi din intervalul [-32768, 32767]
Long - valori ntregi din intervalul [-2147483648, 2147483647]
String - iruri de caractere de lungime variabil (pn la 23 de
caractere) sau de lungime fix (pn la 216 caractere). Acestea
se scriu ntre ghilimele. (ex.Acesta este un sir).
Tipuri de date
Tipuri predefinite de date (continuare)
Variant - tipul implicit. Poate conine valori avnd orice alt tip de
date, cu excepia irurilor cu lungime fix i a tipurilor definite.
Memoria utilizat este mai mare, accesul este mai lent.
Valorile unei variabile Variant pot s-i converteasc valorile
automat.
n general, datele numerice sunt memorate n tipul de
origine, dar este posibil ca ele s fie promovate la tipul superior dac
rezultatul unei operaii necesit acest fapt.
De exemplu o valoare declarat iniial drept Integer i atribuit unui Variant va fi
memorat ca un ntreg pn cnd, ridicnd-o de exemplu la o putere, valoarea ei
excede domeniul tipului Integer. n acest caz are loc promovarea (ca
mod 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 Variant permite o tratare mai difereniat a irurilor de cifre: n
operaii numerice vor fi considerate numere iar n operaii cu iruri vor fi
considerate iruri.


Tipuri de date
Tipuri definite de utilizator

Pe lng tipurile de date predefinite oferite de VBA, utilizatorul i poate crea
propriile 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, varname este numele dat tipului definit, iar prin elementname se 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.
Tipuri de date
Tablouri

Un tablou reprezint o mulime de elemente de acelai tip, la care se poate face
referire cu ajutorul indicilor. Numrul indicilor unui tablou dau dimensiunea acestuia.
Exist tablouri cu o singur dimensiune, adic este controlat dup un singur indice
(vectori) i cu dou dimensiuni sunt controlate de doi indici, unul pentru linie i altul
pentru coloan (matrice).
Numrarea elementelor ncepe de la 0 i se termin la numrul maxim pentru care
a 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
existen a variabilei tablou sau n momentul redimensionrii acestuia pe parcursul
duratei de via a variabilei tablou (tablouri alocate dinamic).
Valori speciale

Empty - este valoarea unei variabile neiniializate de tip variant
Null - este valoarea atribuit prin program unei variabile de tip
variant 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 tip
Object de un obiect efectiv.
Identificatori


Denumirile procedurilor, constantelor, variabilelor etc. respect cerinele (uzuale):
primul caracter este o liter;
- nu conin spaiu, 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 de funcii, instruciuni etc. (prin
calificare se poate totui utiliza entitatea cu denumirea implicit).
VBA nu este case-sensitive (mediul de programare pstreaz capitalizarea din
prima apariie a denumirii).
DECLARAII
Constante


[Public|Private]Const constname [As type] = expression
n lipsa tipului, se va ataa tipul 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 multe
constante.

Const NrLinii = 15 NrLinii este de tip Integer
Public Const Mesaj = Tastati numarul de linii
Public Const NrLinii = 15, Pondere As Single =1.25


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

Dac modulul conine declaraia Option Explicit n zona de declaraii, atunci toate
variabilele trebuie s se declare explicit.

n lipsa declaraiei, apariia unui nou identificator produce definirea unei noi variabile
(de tip Variant).
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 separai prin 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 limitele
indicilor, apar doar parantezele, se definete o variabil dinamic,
care se poate redimensiona prin ReDim.
type = tipul variabilei definite, Byte, Boolean etc., String,
String*length, tip utilizator, tip de obiect.
New este utilizat doar pentru variabile obiect i produce crearea
unei noi instane la prima referire a variabilei.

Variabile


Se pot declara mai multe variabile pe o linie, separate prin virgule, dar tipul
trebuie specificat la fiecare. Astfel, n declaraia
Dim intNrArce, intNrVarfuri As Integer
prima variabil, intNrArce, este de tip implicit Variant, doar intNrVarfuri este
de tip Integer.

Proceduri
O procedur reprezint o mulime de instruciuni care este
identificat printr-un nume i care se execut unitar printr-un singur
apel. Ar trebui, pentru claritatea programului, ca o procedur s efectueze o
prelucrare unitar identificabil n logica programului.

Exist trei tipuri principale de proceduri:
Sub - poate primi i transmite informaii prin intermediul unor variabile publice
sau/i a unor parametri. Numele procedurii nu are ataat nici o valoare.
Function - se deosebete de Sub prin faptul c numele procedurii are ataat o
valoare (valoarea funciei) i poate fi utilizat ca orice alt variabil din proiect.
Property - este caracteristic definirii unui obiect.

Orice instruciune executabil trebuie s aparin unei proceduri. Declaraiile pot
s apar i n afara procedurilor, la nivel de modul.

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 =
vizibil pentru toate procedurile i toate modulele (n funcie de Option Private se
definete vizibilitatea pentru alte proiecte). Private = vizibil doar pentru
procedurile din modulul unde procedura este declarat. Static = arat c toate
variabilele locale i pstreaz valorile ntre apeluri.
name numele procedurii
arglist lista de argumente, separate prin virgule
Prin instruciunea Exit Sub se poate iei din procedur.

Proceduri Sub
Argumentele se definesc dup sintaxa:
[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [=
defaultvalue]
Optional arat c parametrul nu este obligatoriu. Parametrii opionali trebuie s fie grupai
la sfritul listei.
ByVal arat c apelul paramatrului se face prin valoare (orice modificare a valorii transmise
nu este regsit dup prsirea procedurii, calculele efectundu-se pe o copie a
parametrului).
ByRef arat c apelul paramatrului se face prin referin (orice modificare a valorii
transmise este regsit dup prsirea procedurii). Acesta este modul implicit de transmitere
a parametrilor.
ParamArray folosit doar ca ultim argument n list, denot un tablou Optional de elemente
de tip Variant. Clauza ParamArray permite definirea unui numr arbitrar de parametri.
ParamArray nu poate fi utilizat mpreun cu ByVal, ByRef, sau Optional.
varname numele argumentului. Dac este tablou se vor indica parantezele. type tipul
parametrului transmis: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal, Date,
String (doar lungime variabil), Object, Variant. Pentru parametrii obligatorii (fr Optional)
poate fi i un tip definit sau de obiect.
defaultvalue definete valoarea implicit pentru argumentele opionale. Poate fi orice
expresie, dar pentru tipul Object se admite doar Nothing.
Proceduri Sub
Apelul unei proceduri Sub

Pentru a executa o procedur de tip Sub din alt procedur (cu ndeplinirea
condiiei de vizibilitate) se menioneaz, pe o linie separat, numele procedurii
urmat sau nu de parametri. Dac este necesar, datorit apelrii unui alt proiect sau
modul, atunci apelul este dup modelul:

Nume_proiect.Nume_modul.Nume_procedur list de argumente

unde lista de argumente poate sau nu s fie inclus ntre paranteze.
Argumentele efective sunt separate n list prin virgule i trebuie s respecte
ordinea (i tipul) argumentelor din definiia procedurii.
Pentru apelul unei proceduri se poate utiliza i instruciunea Call.
Proceduri Function
O procedur de tip Function este similar, ca definiie, unei proceduri Sub, dar are
particularitatea c returneaz o valoare prin numele su (care se comport deci ca
o variabil).
[Public |Private] [Static] Function name [(arglist)] [As type]
[declarations]
[statements]
[name = expression]
[Exit Function]
[statements]
[name = expression]
End Function
Este de remarcat c se poate ataa un tip numelui funciei (adic valorii funciei) i
se va remarca existena instruciunilor prin care se atribuie funciei valorile
calculate.
Valoarea returnat de o funcie poate fi utilizat ntr-o alt expresie prin includerea
numelui funciei urmat, ntre paranteze, de valorile efective ale parametrilor.


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


OPERATORI
Operatori
Operatori aritmetici

^ (ridicare la putere)
*
\(mprirea a dou numere i se reine partea ntreag a mpririi)
-
+(adunare, concatenare iruri)
/
mod(restul mpririi)

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 dac irul este conform ablonului (pattern)
Comportarea depinde i de prezena instruciunii Option Compare Binary (ordinea
este a reprezentrii interne, se ine cont de majuscule i minuscule) sau Option
Compare Text (comparare bazat pe nediferenierea minusculelor de majuscule).
Utilizarea caracterelor speciale din ablon n vederea comparrii irurilor are
urmtoarele 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 de
caractere
Operatori
Exp1 Exp2 AND
True True True
True False False
False True False
False False False
Exp1 Exp2 OR
True True True
True False True
False True True
False False False
Exp1 Exp2 XOR
True True False
True False True
False True True
False False False
Exp NOT
True False
False True
Operatori de concatenare

Operatorul + este utilizat pentru nsumarea a dou numere i are sintaxa
rezultat=exp1+exp2
Rezultatul este de natur numeric dac cele dou expresii sunt de natur
numeric, dac nu operatorul realizeaz concatenarea celor dou expresii.
Operatorul & este utilizat la concatenarea a dou expresii i are sintaxa
rezultat=exp1&exp2
Rezultatul este un ir de caractere.

Operatori
Exp1 Exp2 AND
True True True
True False False
False True False
False False False
Exp1 Exp2 OR
True True True
True False True
False True True
False False False
Exp1 Exp2 XOR
True True False
True False True
False 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 Null
atunci cnd cel puin un operand este Null, o expresie Empty este considerat 0
(n calcule numerice).
Expresii
Expresiile efectueaz calcule i produc rezultate.
O expresie preia una sau mai multe valori de intrare (denumite operanzi acetia
pot fi variabile, proprieti de obiecte, rezultate ale unor funcii ori valori literale
(valoare specificat)), le combin cu ajutorul unor simboluri speciale (denumite
operatori) i produce un rezultat. Expresia trebuie s execute toate aceste aciuni
ntr-o singur instruciune VBA (instruciunea de atribuire).
Observaie. Atunci cnd construii o expresie, cel mai important lucru la care
trebuie s v gndii este meninerea consecvenei tipurilor de date n cadrul
expresiei. Adic, operanzii trebuie s aib tipuri de date compatibile, operatorii
utilizai trebuie s corespund tipurilor de date ale operanzilor, iar variabila n care
stocai expresia trebuie s aib acelai tip de dat ca i rezultatul 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

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
Expresii
De exemplu, expresia 3+5^2 are 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 n
limbajul 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 ntre
caractere #, ca n exemplul urmtor:
Data = #8/23/75#

OPERAII DE INTRARE/IEIRE
Operaii I/O
n categoria operaiilor de I/O se pot deosebi:

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

schimbul de informaii cu fiiere i/sau baze de date: acesta se realizeaz prin
intermediul unor instruciuni dedicate acestor operaii.
Dialogul standard cu utilizatorul
n general, utilizatorul rspunde la apariia unei boxe de dialog prin acionarea
butonului adecvat rspunsului su i/sau prin nscrierea unei informaii ntr-o zon
dedicat acestui scop. Informaia nscris este transferat programului ca valoare a
funciei care iniiaz dialogul grafic.

Funcia InputBox
Funcia MsgBox
Funcia InputBox
La apelul funciei InputBox afieaz o cutie de dialog care conine
un 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 ateapt ca utilizatorul s introduc un text n zona rezervat i s acioneze
un buton. Textul introdus este transmis ca valoare a funciei la acionarea
butonului OK (sau Enter), iar acionarea butonului Cancel (ca i nchiderea
dialogului ca fereastr) transmite un ir de lungime zero (indiferent de valoarea
zonei text.
Funcia InputBox
Sintaxa:

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

unde
prompt expresie de tip String reprezint 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 text
rezervat utilizatorului. Textul este, n lipsa modificrii lui, retransmis ca rspuns (cnd este
apsat butonul OK).
xpos - expresia numeric specificnd poziia orizontal a dialogului (n twips, de la latura
stnga a ecranului). n lipsa argumentului, boxa de dialog este centrat orizontal.
ypos - expresia numeric specificnd poziia vertical a dialogului (n twips, de la latura de
sus a ecranului). n lipsa argumentului, boxa de dialog este poziionat la aproximativ o
treime de ecran.
helpfile este expresia de tip String care identific fiierul Help utilizat.Dac este indicat
helpfile, trebuie s fie precizat i context. Textul de ajutor poate fi vzut prin tasta F1,
anumite aplicaii afieaz i un buton Help.
context - expresie numeric cu numrul de context Help al intrrii corespunztoare
dialogului afiat. Apare obligatoriu mpreun cu helpfile.
Funcia MsgBox
La apelul funciei MsgBox se afieaz un mesaj ntr-o cutie de
dialog 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])
unde
prompt este textul mesajului
buttons este o expresie numeric egal cu suma valorilor care specific numrul,
tipul i atributele butoanelor. Valoarea implicit este 0.
title,helpfile, context identice cu argumentele similare descrise la InputBox.
Funcia MsgBox
Constantele pentru formarea argumentului buttons sunt:
Constanta Valoare Descriere

VbOKOnly 0 Numai butonul OK
VbOKCancel 1 OK i Cancel
VbAbortRetryIgnore 2 Abort, Retry i Ignore
VbYesNoCancel 3 Yes, No i Cancel
VbYesNo 4 Yes i No
VbRetryCancel 5 Retry i Cancel
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 este
oprit pn cnd rspunde utilizatorul
VbSystemModal 4096 System modal: toate aplicaiile sunt oprite
pn cnd utilizatorul rspunde la dialog


Valorile 0-5 descriu butoanele, 16,32,48
i 64 descriu stilul icoanei afiate, 0,
256 i 512 determin butonul implicit,
iar ultimul grup (0 i 4096) determin
modalitatea boxei de dialog. La
formarea argumentului Buttons se va
adun doar cte un numr din fiecare
grup.
Funcia MsgBox
Pentru a utiliza valoarea returnat de funcie, aceasta trebuie
inclus ntr-o expresie (eventual atribuit unei variabile ntregi).
Valorile returnate de funcie i care pot fi testate, n expresii logice, pentru a alege
ramura de prelucrare dorit de utilizator sunt:


Constanta Valoare
Descriere
VbOK 1 OK
VbCancel 2 Cancel
VbAbort 3 Abort
VbRetry 4 Retry
VbIgnore 5 Ignore
VbYes 6 Yes
VbNo 7 No
Acionarea tastei Esc este
echivalent cu acionarea butonului
Cancel (dac acesta este prezent).
INSTRUCIUNI
Instruciunea de atribuire
Sintaxa:

<variabila>=<expresie>

Exemple:

a = 10
mesaj = Hello, world!
dataNasterii = #10/10/1990#
Instruciuni de decizie
Sintaxa:
If <condiie> Then
<instruciuni1>
Else
<instruciuni2>
End If

Dac condiia este adevrat se execut <instruciuni1>; dac este fals se
execut <instruciuni2>.

If a>=0 Then
MsgBox Numar pozitiv
Else
MsgBox Numar negativ
End If


Instruciuni de decizie
Sintaxa:
If <condiie1> Then
<instruciuni1>
ElseIf <condiie2> Then
<instruciuni2>
ElseIf <condiie3> Then
<instruciuni3>
. . .
Else
<instruciuni>
End If


Instruciuni de decizie
Exemplu:
If x>10 Then
E = x*x + 1
ElseIf x<0 Then
E = 0
Else
E = 2*x -5
End If


Instruciuni de decizie
Sintaxa:

Select Case <exp>
Case <val
1
>
<instr
1
>
Case <val
2
>
<instr
2
>
.
Case <val
n
>
<instr
n
>
Case Else
<instr>
End Select
Structura selectiv permite precizarea alternativelor de execuie atunci cnd sunt
mai multe astfel de situaii.Se evalueaz <exp>. Se verific dac valoarea obinut
se ncadreaz ntr-una din listele de valori indicate, de la <val
1
> la <val
n
>, i n
caz afirmativ se execut blocul de instruciuni corespunztor acelei liste, altfel, se
efectueaz blocul de instruciuni <instr>

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


Instruciuni repetitive
Instructiunea repetitiva For Next
Sintaxa:

For <contor>=<exp1> To <exp2> [Step <pas>]
<instructiuni>
Next <contor>

Se execut astfel: se iniializeaz <contor> cu valoarea <exp1>. Ct timp
<contor> este mai mic dect <exp2> se execut grupul <instructiuni> i
se mrete <contor> cu <pas>
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


Instruciuni
Instructiunea repetitiva For EachNext

Sintaxa:
For Each <element> IN <grup>
<instructiuni>
Next <element>

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


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
Instruciuni repetitive
Instruciunea repetitiv While

Sintaxa:

While <conditie>
<instrunctiuni>
WEnd

Se execut astfel:
1.se evalueaz valoarea expresiei de tip logic <conditie>
2.Dac valoarea obinut este True, atunci se execut <instructiuni> i se
reia pasul 1, altfel, se trece la executarea primei instruciuni aflate dup WEnd.

Instruciuni repetitive
Instruciunea repetitiv While

Exemplu:

s = 0
x = 1
While x < 5
s = s + x
x = x + 1
Wend
MsgBox s

Instruciuni
Instruciunea repetitiv Do While

Sintaxa:

Do While <conditie>
<instructiuni>
Loop

Se execut astfel:
1.se evalueaz valoarea expresiei de tip logic <conditie>
2.Dac valoarea obinut este True, atunci se execut <instructiuni> i se
reia pasul 1, altfel, se trece la executarea primei instruciuni aflate dup Loop.
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

Instruciuni repetitive
Instruciunea repetitiv DO-Until
Sintaxa:

Do Until <conditie>
<instrunctiuni>
Loop

Mod de execuie
1.se evalueaz valoarea expresiei de tip logic <conditie>
2.dac valoarea obinut este False, atunci se execut <instructiuni> i se
reia pasul 1, altfel, se trece la executarea primei instruciuni aflate dup Loop.

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

Instruciuni repetitive
Instruciunea repetitiv DO Loop While

Sintaxa:

Do
<instrunctiuni>
Loop While <conditie>

Mod de execuie
1. se execut <instructiuni>
2. se evalueaz valoarea expresiei de tip logic <conditie>
2.dac valoarea obinut este True, atunci se reia pasul 1, altfel se trece la
executarea primei instruciuni aflate dup Loop While.
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 nota<1 or nota>10

Instruciuni repetitive
Instruciunea repetitiv DO - Loop Until

Sintaxa:

Do
<instrunctiuni>
Loop Until <conditie>

Mod de execuie
1. se execut <instructiuni>
2. se evalueaz valoarea expresiei de tip logic <conditie>
2.dac valoarea obinut este False, atunci se reia pasul 1, altfel se trece la
executarea primei instruciuni aflate dup Loop Until.
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<=10

S-ar putea să vă placă și