Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Calculatoare


Index » educatie » » informatica » Calculatoare
» Introducere in visual basic pentru aplicatii


Introducere in visual basic pentru aplicatii


LUCRARE

INTRODUCERE IN VISUAL BASIC PENTRU APLICATII

SCOPUL LUCRARII

Lucrarea prezinta o sumara introducere in 'Visual Basic for Applications'

( VBA) ca in cazul oricarui limbaj de programare. Toata explicatia are la baza exemplificari din baza de date 'Northwind.mdb' furnizata ca exemplu in kit-ul Access.



INTRODUCERE TEORETICA

CE ESTE VBA ?

VBA reprezinta acronimul pentru Visual Basic for Applications. Acesta este limbajul de programare cu care vine Access si care foloseste la proiectarea obiectuala si orientata pe evenimente a unor obiecte apartinand unei BD Access

( formulare, rapoarte).

Cu ajutorul acestui limbaj pot fi scrise aplicatii complexe in cadrul pachetului Microsoft Office.

Acest limbaj inlocuieste in Access comenzile macro.

  • Ce ofera VBA ?

Avantajele majore pe care le aveti fata de comenzile macro atunci cand lucrati cu VBA ( si, generalizand, atunci cand se lucreaza cu orice limbaj de programare de nivel inalt ce are suport pentru lucrul cu bazele de date) pot fi :

implementarea tratarii erorilor ;

crearea unor cicluri pentru parcurgerea seturilor de inregistrari din tabele ;

posibilitatea apelului functiilor Windows API ;

crearea prin program a diferitelor obiecte ale unei BD ;

utilizarea constantelor si a variabilelor ;

proiectarea si depanarea proceselor complexe ;

scrierea de biblioteci de functii reutilizabile .

COMPONENTELE LIMBAJULUI VISUAL BASIC ( VB)

Codul unui program VB este organizat in :

subrutine ;

functii.

Subrutina este precedata de cuvantul-cheie Sub. Se incheie cu combinatia de cuvinte-cheie End Sub .

O subrutina ( subprocedura) are rolurile :

de a raspunde la aparitia unui eveniment ;

de a executa o anumita actiune.

Observatie : o subrutina nu poate intoarce o valoare !

Functia este precedata de cuvantul-cheie Function . Se incheie cu combinatia de cuvinte-cheie End Function.O functie este un tip special de subrutina , in sensul ca poate intoarce valori.

Subrutinele si functiile sunt grupate in module. Modulul cuprinde acele subrutine si functii inrudite, adica acelea care efectueaza operatii asemanatoare.

Un modul poate fi : global sau specific unui formular sau raport. Cel de-al doilea tip de modul este numit si codul din spatele formularului - 'Code Behind Forms' ( CBF)

TIPURI DE RUTINE

VB cuprinde doua tipuri de rutine : cele asociate evenimentelor si cele scrise de utilizator.

2.3.1 RUTINE ASOCIATE EVENIMENTELOR

Atunci cand cream formulare si rapoarte in spate Access ceaza si setul de evenimente asociat.

O astfel de subrutina este creata automat atunci cand dorim sa scriem cod pentru un eveniment al unui control.

Pentru a putea scrie cod pentru un control ce accepta evenimente trebuie sa parcurgeti etapele :

1) deschideti in mod 'Design View' un formular sau raport ce contine un

astfel de control. Selectati printr-un clic stanga acel control si apasati iconita Properties din bara cu instrumente ( ). Obtineti fereastra din figura 1:


Fig. 1 - Fereastra de proprietati ale unui control de tip Check Box din cadrul unui formular.

Este activa eticheta 'Event'.

Controlul pe care l-am ales pentru exemplificare este de tip caseta de validare ( Check Box - ).

2) In figura 1 activati eticheta 'Event' a acestui control, cea care ne intereseaza in acest moment ( din seria de etichete disponibile). Aici observati seria de evenimente posibile ( coloana din stanga) pentru acest tip de control, precum si cate dintre aceste evenimente au cod scris ( in coloana din dreapta apare textul '[Event procedure]'). In aceasta fereastra singurul eveniment pentru care nu s-a scris cod este 'On Mouse Move'.

3) selectati printr-un clic din coloana din stanga acel eveniment pentru care doriti sa scrieti cod;

4) dati clic in coloana din dreapta pe textul 'Event procedure' din dreptul evenimentului ales ;

5) dati clic pe butonul . Veti fi pozitionati automat in zona de cod a

evenimentului asociat acelui control ( figura 2)

Fig. 2 - Zona de cod a evenimentului 'GotFocus' asociat controlului pe care l-am ales.

Tot in fereastra din figura 2 puteti ajunge si prin apasarea iconitei 'Code' din bara cu instrumente ( ) , dupa ce ati parcurs etapele 1- 4 de mai sus.

RUTINE DEFINITE DE UTILIZATOR

Un utilizator isi poate crea propriile rutine. Fara aceasta facilitate nu ar avea nici un rost limbajul in sine. Aceste rutine nu sunt specifice unui eveniment asociat unui obiect.

Este foarte important locul unde sunt efinite aceste subrutine. Astfel, daca definirea se face in cadrul unui modul de cod, atunci subrutina ( sau functia) este globala fiind recunoscuta de intreaga aplicatie. Daca insa definirea se face in interorul unui formular sau raport atunci acea rutina va fi locala, adica recunoscuta doar de acel formular sau raport.

CREAREA UNEI RUTINE GLOBALE

Pasii de urmat sunt :

Din fereastra bazei de date dati clic pe eticheta 'Modules' ;

Selectati un modul deja existent si alegeti pentru acesta modul Design ;

Apasati pe iconita 'Insert Procedure' din bara cu instrumente sau din meniul Insert alegeti optiunea 'Procedure' ( figura 3)

Fig. 3 - Meniul Insert si optiunea Procedure.

In fereastra care se activeaza ( figura 4) dati un nume acelei proceduri, selectati tipul ei ( Functie sau Subrutina) si alegeti domeniul de vizibilitate in cadrul aplicatiei ( optiunea 'Scope'). Tot aici specificati daca doriti ca toate variabilele din aceasta prcedura sa fie statice ;

Fig. 4 - Fereastra 'Insert Procedure' in care stabiliti atributele noii rutine.

Dati clic pe OK. Obtineti fereastra din figura 5. Observati aici cum este impartita pe obiect ( in partea stanga-sus) si evenimentul asociat ( in partea dreapta-sus). Observati denumirea ferestrei. Ne aflam intr-un modul.

Fig. 5 - Fereastra unde suntem pozitionati dupa ce am stabilit proprietatile noii rutine.

CREAREA UNEI RUTINE LOCALE

Ca si mai inainte aveti de urmat o serie de pasi.

Din modul Design al unui formular sau raport dati clic pe iconita Code din bara cu instrumente. Veti vedea astfel 'codul din spatele formularului' ;

Selectati optiunea Procedure din meniul Insert ;

Reluati pasul 4 anterior ;

Dati clic pe OK. Ajungeti in fereastra din figura 6. Observati denumirea ferestrei. Ne aflam in modulul de clasa al unui formular.

Fig. 6 - Zona de cod a unui formular in care definim o procedura locala.

APELAREA PROCEDURILOR , EVENIMENTELOR SI A RUTINELOR-UTILIZATOR

Modul de apelare ala acestor doua tipuri de proceduri difera prin modul in care se face apelul.

O procedura de eveniment este apelat automat de Access atunci cand este executata o actiune ( evenimentul) asupra unui obiect. De exemplu cand dam clic pe un buton , se activeaza evenimentul asociat acelui clic pentru buton. Evenimentul este actiunea, iar obiectul este in acest exemplu butonul.

O rutina definita de utilizator este apelata explicit de catre utilizator. Pentru aceasta se foloseste cuvantul-cheie Call. De exemplu sa facem apelul ultimei rutine pe care am creat-o anterior. Vom scrie :

Call rutinaMeaLocala()

Apelul se poate face si intr-un mod nestandard, si anume omitand cuvantul-cheie Call. De ce nonstandard ? Tocmai din cauza diferentelor pe care le-am aratat. Daca omitem pe Call atunci putem interpreta ca acesta este un apel automat ( din partea Access). Ca urmare este bine sa respectam aceasta conventie.

Observatie : Ca si in alte limbaje de programare o rutina-utilizator poate fi apelata din interiorul altei rutine-utilizator sau dintr-o rutina de eveniment.

CREAREA VARIABILELOR VBA

Ati mai auzit probabil de notiuni ca : domeniu de vizibilitate, local, global, static. Toate sunt legate de variabile. Toate acestea apar si in VBA. Depinde de noi sa le folosim corect atunci cand avem nevoie de ele.

TIPURI DE VARIABILE VBA

O buna parte dintre tipurile de date pe care le veti intalni mai jos va sunt cunoscute de la crearea tabelelor.

In tabelul de mai jos sunt prezentate tipurile de date disponibile. De asemenea este indicat spatiul de memorie ocupat de acestea, cum apar in notatia ungara si valoarea prestabilita.

Tipul de date

Notatia ungara

Spatiu de memorie

Domeniu de valori

Valoare prestabilita

Byte ( octet)

_bt

8 biti

Boolean

( valori logice)

_b

16 biti

Adevarat ( -1) sau

Fals ( 0)

False

Integer ( intreg)

_i

16 biti

Long Integer

( intreg lung)

l

32 biti

Single ( real in simpla precizie)

sng

32 biti

3 octeti mantisa,

1 octet exponentul

Double ( real in dubla precizie)

d

64 biti

6 octeti mantisa,

2 octeti exponentul

Currency

( valuta)

c

64 biti

Foarte mare

Date ( data)

dt

64 biti

Object ( obiect)

o

32 biti

Orice obiect

Fixed String ( sir static)

s

10 octeti + lungimea sirului

0 la 2 miliarde

Var String ( sir variabil)

s

Lungimea sirului

Variant ( /W numere)

vnt

16 octeti

Orice variabila numerica sau de tip Double

Empty

(Gol)

Variant ( /W caractere)

vnt

22 octeti

La fel ca la Var. String

Empty

(Gol)

Typ ( Tip)

_typ

Variabil

Bazat pe elemente

DECLARAREA VARIABILELOR

Se face folosind cuvantul-cheie Dim in fata numelui variabilei. Dupa numele variabilei trebuie obligatoriu declarat tipul acesteia, folosind cuvintele-cheie As Tip, unde Tip poate lua una dintre valorile din tabelul anterior.

Exemple :

Dim sSir As String    ' se declara variabila 'sSir' de tip

' String ( sir de caractere).

Dim iAni As Integer    ' se declara variabila iAni de tip 'intreg.

Urmatoarele declaratii sunt incorecte :

iVal = 5    ' atribuirea unei variabile intregi

dRezultat = 3.5 ' atribuire a unei variabile Double

Dim bLogic ' declaratie incompleta a unei 'variabile booleene.

In primele doua cazuri nu declarati deloc variabilele, ci faceti doar atribuiri ale unor variabile ce trebuie declarate anterior. In cel de-al treilea caz nu se specifica tipul variabilei, astfel incat declaratia este incompleta.

Pentru a declara mai multe variabile pe aceeasi linie folositi sintaxa :

Dim iVal1 As Byte, iVal2 As Integer, iVal3 As Double

In cazul in care scrieti :

Dim iVal1, iVal2, iVal3 As Double

de fapt declarati o singura variabila de tip Double, si anume iVal3. Celelalte variabile sunt de tip Variant.

DOMENIUL SI DURATA DE VALABILITATE A VARIABILELOR

Locul de declarare a variabilelor determina domeniul de vizibilitate ( 'scope') a acestora. Variabilele pot fi :

locale ;

modulare ;

publice .

Este preferabil ca in programele pe care le scrieti variabilele sa fie pe cat posibil locale, pentru a evita efectele colaterale ( ca de exemplu modificari nedorite ale variabilelor globale de catre parti din program).

VARIABILE LOCALE

Acestea sunt cunoscute doar in interiorul rutinei in care au fost declarate.

Exemplu

Private Sub rutinaMea

Dim iValoare As Integer

iValoare = 2

Call schimbValoare

Debug.Print iValoare

End Sub

Private Sub schimbValoare

iValoare = 3

End Sub

Observati ca variabila iValoare este locala subrutinei rutinaMea. Ea isi pierde valoarea odata cu incheierea acestei subrutine. Dupa incheierea actiunii subrutinei schimbValoare() variabila in discutie este distrusa, astfel ca nimeni nu mai memoreaza valoarea 3 ce i-a fost atribuita. Din aceasta cauza iValoare isi va pastra valoarea de la prima atribuire ( din cadrul subrutinei rutinaMea

O observatie mai atenta ne indica faptul ca in cea de-a doua subrutina, variabila folosita nu a fost declarata ( local sau global). Deci o eventuala eroare de compilare.

Access pune la dispozitie instructiunea 'Option Explicit'. Prin aceasta este obligatoriu ca orice variabila sa fie declarata inainte de a fi folosita. Daca aceasta instructiune ar fi fost activa la inceputul scrierii codului de mai sus, atunci am fi primit o eroare de compilare pentru a doua subrutina.

Instructiunea 'Option Explicit' se activeaza prin intermediul meniului Tools, optiunea 'Options'. Aici dati clic pe eticheta 'Modules'. In cadrul seriei de optiuni ce apare selectati 'Require Variable Declarations' ( figura 7).

Fig. 7 - Marcarea optiunii 'Require Variable Declaratins' .

Odata ce ati activat aceasta instructiune, de acum inainte in sectiunea 'General Declarations' a oricarui modul, formular sau raport apare textul Option Exlicit ( vedeti figura 8) .

Fig. 8 - Instructiunea 'Option Explicit' poate aparea doar in setiunea 'General Declarations' a

unui modul, formular sau raport.

VARIABILE STATICE

Variabila statica se bucura de un mod special de alocare din partea compilatorului. Astfel ea este activa in cadrul unei proceduri si intre doua apeluri ale acelei proceduri, adica nu se pierde .

Iata un exemplu :

Private Sub rutinaMea()

Dim iPas As Integer

Static iValoare As Integer 'implicit

'initializata cu 0 !

iValoare = iValoare + 1 'valoarea variabilei

'este acum 1 !

For iPas = 1 To 3

Call rutinaMea

Debug.Print iValoare

Next iPas

End Sub

Valoarea la care ajunge variabila iValoare dupa executarea acestui bloc de instructiuni este 4. De ce ? Pentru ca au loc trei apeluri ale procedurii rutinaMea() si la fiecare pas nu se mai reia partea de declarare si initializare de la inceputul rutinei rutinaMea()! Adica se continua direct cu incrementarea, iar fiecare incrementare se face asupra anterioarei valori incrementate.

Atentie ! Intre doua apeluri ale rutinei rutinaMea() variabila 'iValoare' isi pastreaza valoarea stabilita de apelul anterior !

VARIABILELE DE NIVEL FORMULAR, RAPORT SAU MODUL

Acestea sunt declarate in zona 'General Declarations' a unui formular, raport sau modul. Din aceasta cauza ele au rolul de variabila globala in cadrul acelui formular, raport sau modul. In figura 9 aveti modul de declarare a uei variabile globale intr-un modul de cod.

Fig. 9 - Declararea unei variabile globale la nivelul unui modul ( analog pentru un formular

sau raport ).

In urma acestei declaratii, valoarea variabilei poate fi modificata din interiorul oricarei functii su subrutine ce fac parte din acel formular, raport sau modul.

VARIABILE PUBLICE

O astfel de variabila poate fi accesata de oriunde din aplicatia dvs . Locul unde se declara o astfel de variabila este sectiunea 'General Declarations' a unui modul !

Ca variabile de tip public adesea sunt alese valorile de configurare pentru mediul de lucru sau alte valori ce trebuie sa fie vizibile in intreaga aplicatie ( de exemplu diferiti identifcatori sau constante).

Exemplu

[General Declarations]

Option Explicit

Public piVarGlobala As Integer

Private Function myFunction( iVarInt As Integer)

MyFunction = iVarInt + 10

End Function

piVarGlobala = myFunction( piVarGlobala)

Dupa cum observati am inceput cu declaratia variabilei piVarGlobala in sectiunea 'General Declarations'. Prefixul 'p' din numele variabilei ne indica faptul ca avem de-a face cu o variabila globala.

Apoi, in cadrul modulului, am declarat functia myFunction() ce primeste un parametru intreg si intoarce valoarea acelui intreg + 10.

In sfarsit, am apelat functia declarata avand ca paramteru de apel variabila globala. Dupa acest apel, in variabila piVarGlobala avem valoarea 10 ( nu uitati ca o variabila de tip intreg este initializata cu 0).

STRUCTURI DE DECIZIE SI CICLURI IN VBA

Ca in orice limbaj ( de nivel scazut sau inalt) nu pot lipsi instructiunile de decizie, ciclurile si structurile repetitive.

VBA ofera programatorului :

instructiuni de control 'if-then-else' ;

instructiuni de decizie 'Select-Case' ( asemanatoare cu limbajul C ) ;

bucle ( Loop) cu test initial si final ;

cicluri For .

Le vom explica pe rand si vom dea un scurt exemplu la fiecare.

If -Then-Else

Este o structura de decizie cu doua ramuri, dar din care ramura 'If ' este obligatoriu prezenta. Ramura 'Else' poate lipsi. Se incheie cu combinatia de cuvinte-cheie End If.

Exemplu :

Dim bLogic As Boolean

Dim iVal As Integer

If iVal > 2 Then

bLogic = -1

MsgBox " Valoarea logica este Adevarata"

Else

bLogic = 0

MsgBox " Valoarea logica indica Fals"

End If

INSTRUCTIUNEA SELECT-CASE

Acest tip de constructie inlocuieste repetate cicluri If-Then-Else. Se incheie cu combinatia de cuvinte-cheie End Select

Iata si un exemplu :

Dim iAnotimp As Integer

Dim sNume As String

iAnotimp = 1 ' nu poate lua valori mai mici de 1 si mai mari de ' 12.

Select Case iAnotimp

Case 12, 1, 2

sNume = "Iarna"

MsgBox " Suntem in " & sNume

Case 3 To 5

sNume = "Primavara"

MsgBox " Suntem in " & sNume

Case 5 To 8

sNume = "Vara"

MsgBox " Suntem in " & sNume

Case 8 To 11

sNume = "Toamna"

MsgBox " Suntem in " & sNume

Case Else

sNume = " Eroare !"

MsgBox sNume & " Valoarea trebuie sa fie in gama 1 . 12"

End Select

Am declarat doua variabile : una de tip intreg si a doua de tip text. Corespondenta intre cele doua variabile este cea care exista intre o anumita luna din an si anotimpul corespunzator. Instructiunea Case evalueaza continutul variabilei iAnotimp si - functie de conditiile puse - da o anumita valoare variabilei de tip sir si afiseaza un mesaj intr-o caseta de mesaje.

Ultima instructiune ( Case Else) este echivalentul lui 'default :' din limbajul C. Aceasta instructiune se ocupa de toate celelalte cazuri care nu fac obiectul ciclului Select-Case aflat in discutie. In cazul de fata se anunta utilizatorul asupra valorilor acceptate.

CICLURI

VBA ofera mai multe instructiuni ciclice, si anume :

ciclu cu test initial ;

ciclu cu test final ;

bucla For .

CICLU CU TEST INITIAL

Vom da un exemplu din care se poate observa sintaxa corecta a unui astfel de ciclu. Este echivalentul ciclului 'while ( conditie) ' din C.

Exemplu :

Dim iContor As Integer ' declar o variabila intreaga

' pentru contor .

Dim dFloat As Double ' declar o variabila reala in

' dubla precizie.

iContor = 4

Do While iContor > 0 ' Pentru valorile 4, 3, 2 si 1

dFloat = iContor * Exp( 1/iContor)

MsgBox " Valoarea variabilei reale la pasul " & iContor

& " este : " & dFloat

iContor = iContor - 1

Loop

Dupa declararea variabilelor necesare am facut doua atribuiri : lui iVal i-am dat valoarea 1, iar lui iContor valoarea 4. Conditia ciclului While este ca valoarea contorului sa fie mai mare ca 0. In acest caz ciclul incepe sa se execute. Variabilei reale ii este atribuita la fiecare pas valoarea :

i * exp (1/i), unde i este contorul, diferit de 0 !

In continuare se afiseaza intr-o fereastra valoarea variabilei reale de la acel pas, dupa care este decrementata valoarea contorului. Apoi ciclul se reia. Dupa executia acestui ciclu variabila contor are valoarea 0.

Este posibil ca acest ciclu sa nu se execute doar atunci cand variabila de contorizare ia valori negative. Cum tipul pe care l-am ales pentru iContor este intreg, gama de valori posibile include si numerele negative. Daca alegeam tipul Byte aveam o gama de valori strict pozitiva. Deci ciclul s-ar fi executat mereu.

CICLUL CU TEST FINAL

Spre deosebire de cazul anterior, aici vom avea o executie cel putin o data a corului ciclului, si anume prima oara. Odata ajunsi la conditia de final, ne putem astepta ca ciclul sa nu mai poata fi executat si astfel sa fie parasit.

Exemplu :

Dim bLogic As Boolean ' declar o variabila logica

Dim iContor As Byte ' declar o variabila intreaga

' pentru contor.

Dim iVal As Integer    ' declar o variabila intreaga

iVal = 1

iContor = 1

bLogic = True

If iVal >=0 Then bLogic = False ' numarul este pozitiv

Do iVal = -iVal

If iVal >=0 Then bLogic = False ' numarul este 'pozitiv

MsgBox "Valoarea intreaga de la pasul " & iContor & " este " & iVal

iContor = iContor + 1

Loop While iContor < 2

In ciclu se intra neconditionat, iar corpul ciclului se executa garantat prima data. In final se testeaza conditia lui While. Daca este adevarata atunci ciclul se reia. In caz contrar, se trece la urmatoarea instructiune de dupa ciclu.

In urma acestui ciclu am calculat opusul valorii din iVal. Dupa prima executie a corpului ciclului, valoarea contorului ajunge la 2. Deci conditia ciclului este falsa, astfel ca el nu se mai executa a doua oara. Variabila logica are valoare adevarata pentru un numar negativ, si falsa pentru un numar pozitiv.

Observati ca am declarat contorul de tip Byte. In acest caz gama de valori este obligat

0 . 255. O conditie asupra contorului relativa la valoarea 0, poate asigura un ciclu ce se executa de n sau n+1 ori, dupa cum am ales conditia >0, respectiv >=0. Contorul este initializat cu valoarea n.

CICLUL FOR

Daca exista operatii repetitive sau parcurgeri de vectori 1D, 2D sau nD atunci ciclul For . Next este de foarte mare ajutor.

Exemplu :

Dim iContor As Integer    ' declararea contorului

Dim iVal As Integer    ' o variabila de calcul

iVal = 2

MsgBox " Valoarea bazei este " & iVal

For iContor = 1 To 5

iVal = iVal ^ iContor

MsgBox " Baza la puterea " & iContor " este " & iVal

iVal = 2

Next iContor

For iContor = 1 To 7 Step 2 ' Numerele impare

iVal = iVal * iContor

MsgBox " Baza inmultita cu " & iContor " este " & iVal

iVal = 2

Next iContor ' Urmatoarea valoare este dupa 'Step' valori

In primul ciclu For valoarea contorului merge din 1 in 1. Pasul implicit este deci 1. In cel de-al doilea ciclu insa s-a specificat un alt pas de cat cel implicit, anume 2. Astfel, incepand cu prima valoare a contorului, ciclul se executa pana ce contorul ajunge strict mai mare ca 7. Pornind cu 1 si mergand din 2 in 2 am selectate din primele 7 numere naturale doar numerele impare.

In primul ciclu se calculeaza primele 5 puteri ale lui 2. In cel de-al doilea ciclu se calculeaza multiplii lui 2 ai primelor patru numere impare ( 1, 3, 5, 7).

La fiecare pas al unui ciclu For este testata conditia asupra limitelor intre care merge contorul. Odata ce aceasta conditie este falsa ciclul se opreste.

TRANSMITEREA PARAMETRILOR SI INTOARCEREA VALORILOR

Exista situatii cand rutinele pe care le scriem trebuie sa foloseasca anumite valori ale unor variabile, pe baza carora sa execute anumite prelucrari. In acest caz subrutina sau functia trebuie sa foloseasca o modalitate prin care sa aiba acces la acele variabile.

Aceasta modalitate este argumentul, iar operatia se numeste transmiterea parametrilor.

Atat functiile cat si subrutinele pot primi parametri ( deci pot avea argumente) .

Doar functiile pot returna valori .

Exemple :

Private Sub Concat( sFirst As String, sLast As String)

MsgBox " sirul obtinut prin concatenarea celor doi

parametri este :" & sFirst & sLast

MsgBox " Initialele fiecarui sir-parametru sunt : "

& Left$( sFirst, 1) & " si " & Left$( sLast, 1)

End Sub

Private Function myFunction( sFirst As String, sLast As String)

myFunction = Left$( sFirst, 1) & Left$( sLast, 1)

End Function

Function myFunction1( iVal1 As Integer, Optional iVal2)

Dim iCat As Integer

If IsMissing( iVal2) Then

MsgBox " Nu ati introdus valoarea impartitorului."

Else

iCat = iVal1 / iVal2

MsgBox " Catul impartirii intregi a lui " & iVal1 & " la

" & iVal2 & " este " & iCat

End If

myFunction = iCat

End Function

In primul exemplu am creat o subfunctie ( deci care nu poate intoarce valori) care primeste doi parametri. In interiorul subfunctiei am folosit functia interna VBA 'Left$()' care intoarce primele n caractere dintr-un sir pe care il ia ca parametru. In cazul prezentat este intoarsa prima litera din fiecare sir primit ca parametru. Acestea sunt afisate intr-o caseta de mesaje.

In cel de-al doilea exemplu am creat o functie care primeste doi parametri de tip sir, si intoarce sirul format din concatenarea primelor caractere din fiecare sir parametru. Observati sintaxa in cazul intoarcerii unei valori : se asociaza numelui functiei valoarea ce trebuie returnata.

In cel de-al treilea exemplu este prezentata o functie cu parametri optionali. Al doilea parametru este optional. Functia testeaza in corpul acesteia daca acel parametru este absent ( cu ajutorul functiei integrate 'IsMissing()') si in acest caz da un mesaj de avertisment. In caz ca parametrul este prezent face impartirea intreaga intre primul si al doilea parametru. Valoarea catului este pusa in variabila locala iCat , care este afisata. Functia se incheie cu returnarea catului impartirii efectuate.

FOLOSIREA FUNCTIILOR INTERNE

VBA ofera programatorului o biblioteca de functii integrata foarte bogata. Sunt prezente functii de lucru cu sirurile, functii matematice, financiare, de intrare-iesire, functii de conversie intre tipuri diferite, functii de inspectie ( de genul lui IsMissing() din paragraful anterior) s.a. .

Unele dintre cele mai utilizate sunt explicate in continuare. Restul functiilor pot fi studiate prin intermediul Help-ului.

FUNCTIA 'Format()'

Primeste doi parametri :

obligatoriu - primul este expresia pe care doriti sa o formatati ;

optional - al doilea este tipul de format pe care il doriti .

optional - o constanta ce specifica prima zi din saptamana ;

optional - o constanta ce specifica prima saptamana din an.

Valorile celui de-al treilea parametru pot fi :

Valorile celui de-al patrulea parametru pot fi :

Exemple :

Debug.Print Format$( 100, "Valuta") ' afiseaza $100

Debug.Print Format$( Now, " Data in format scurt")

' afiseaza 8/20/1998

Debug.Print Format$( Now, "DDDD")

' afiseaza cuvantul intreg pentru zi.

FUNCTIA 'InStr()'

Aceasta functie returneaza prima pozitie a aparitiei unui sir in alt sir.

Primul sir luat ca parametru este sirul in care se cauta, iar cel de-al doilea este sirul de cautat.

Exemplu :

Debug.Print InStr ( "Azi", "A") ' returneaza 1 .

Debug.Print InStr ( "Numele si prenumele", "prenumele")

' returneaza 11 .

FUNCTIA 'Left()'

Apelul acestei functii returneaza sirul format din primele n caractere ale unui sir specificat.

Primul argument este sirul din care extrag caracterele , iar cel de-al doilea argument numarul de caractere incepand din stanga pe care le doresc extrase. Al doilea paramteru este o variabila de tip 'Variant( Long)'.

Exemplu :

Dim sSir As String

Dim sSirExtras As String

sSir = "Exemplu"

sSirExtras = Left ( sSir, 2)

' se returneaza in sirul sSirExtras primele doua

' caractere din sirul "Exemplu" .

MsgBox "Primele doua caractere din sirul " & sSir & " sunt "

& sSirExtras

sSirExtras = Left ( sSir, Len( sSir))

' in sSirExtras am chiar sirul "Exemplu" .

FUNCTIA 'Right()'

In opozitie cu functia Left() aceasta functie returneaza ultimele n caractere din sirul specificat ca parametru.

Primul parametru este sirul din care se vor extrage caracterele, iar al doilea este un numar ( de tip Long) de caractere dorite.

! Daca numarul indicat depaseste lungimea sirului din care se face extragerea atunci este returnat chiar acel sir.

Exemplu :

Dim sSir As String

Dim sSirExtras As String

sSir = "Exemplu pentru functia Right()"

sSirExtras = Right( sSir, 2)

' se returneaza in sirul sSirExtras ultimele doua

' caractere din sirul sSir, incepand cu ultimul.

MsgBox "Ultimele doua caractere din sirul " & sSir & " sunt "

& sSirExtras

sSirExtras = Right( sSir, 15)   

' in sSirExtras am sirul "functia Right()".

FUNCTIA 'Mid()'

Returneaza un subsir dintr-un sir, in lungime de n caractere, cu n specificat.

Argumentele :

obligatoriu - primul argument este sirul din care fac extragerea ;

obligatoriu - al doilea este un numar de tip Long ce indica pozitia din sir de unde incep sa extrag ;

optional - al treilea parametru este numarul de caractere ce vor fi extrase .

! Daca al doilea parametru este mai mare decat actuala lungime a sirului din care extrag, atunci se returneaza un sir de lungime zero : ("")

Exemplu :

Dim sSir As String, sSir1 As String, sSir2 As String, sSir3 As String

sSir = "Exemplu pentru functia Mid()"

sSir1 = Mid( sSir, 1, 7) ' se returneaza subsirul

' "Exemplu".

sSir2 = Mid( sSir, 9, 6) ' se returneaza subsirul

' "pentru".

sSir3 = Mid( sSir, 16)    ' se returneaza subsirul

' "funcia Mid()".

FUNCTIA 'UCase()'

Returneaza sirul primit ca parametru avand toate caracterele majuscule ( Upper Case).

Exemplu :

Dim sSir As String, sSir1 As String

sSir = "Sir oarecare"

sSir1 = Ucase( sSir) ' in sSir1 am " SIR OARECARE"

MsgBox " Sirul transformat este" & sSir1

FUNCTIA 'DatePart()'

Prin aceasta functie se returneaza o parte specificata a unei date. Valoarea returnata este de tip Variant ( Integer) .

Parametrii sunt :

obligatoriu - valoare de tip sir ce da intervalul pe care il doresc extras ( vedeti mai jos) ;

obligatoriu - valoare de tip Date - data pe care o doresc ;

optional - constanta ce reprezinta prima zi din saptamana. Daca nu apare atunci se considera Duminica drept prima zi a saptamanii ;

optional - constanta ce reprezinta prima saptamana din an. Daca este omisa atunci se considera prima saptamana din an aceea in care cade 1 Ianuarie.

Valorile pe care le poate lua primul parametru sunt :

Valorile celui de-al treilea parametru ( optional) sunt :

Valorile celui de-al patrulea parametru ( optional) sunt :

Exemplu :

Dim dData As Date

dData = Now() ' iau data curenta

Debug.Print DatePart( "yyyy", dData) ' afiseaza anul

Debug.Print DatePart( "q", dData)

' afiseaza acel sfert din an caruia ii

' corespunde data curenta.

Debug.Print DatePart( "m", dDate)

' afiseaza numarul lunii din an in care se

' gaseste datei din 'dData'.

FUNCTIA 'DateDiff()'

Aceasta functie returneaza diferenta dintre doua date luate ca parametru, exprimata in intervale de timp dorite. Valoarea returnata este de tip 'Variant ( Long)'.

Parmetrii sunt :

obligatoriu - variabila de tip sir ce specifica intervalul de timp functie de care se calculeaza diferenta celor doua date. Valorile pe care la poate lua sunt aceleasi cu cele ale primului parametru de la functia DatePart() ;

obligatoriu - data1 - variabila de tip Date ce specifica data de inceput ;

obligatoriu - data2 - variabila de tip Date ce specifica data de sfarsit ;

optional - constanta ce da primazi din saptamana - ca in cazul functiei DatePart();

optional - constanta ce da numarul primei saptamani dn an - ca in cazul functiei DatePart().

Observatii :

Functia 'DateDiff()' returneaza diferenta 'data2 - data1' in multipli de intervalul de timp specificat de dvs. ( deci 'data2' este mai indepartata de momentul actual decat 'data1').

Daca 'data1' se refera la un moment mai indepartat in timp decat 'data2', atunci aceasta functie returneaza o valoare negativa.

Exemplu :

Dim dData1 As Date, dData2 As Date

Dim lDif As Long

dData1 = 12/3/1998

dData2 = 3/4/1999

lDif = DateDiff( "d", dData1, dData2)

' returneaza in variabila 'lDif' numarul de

' zile ce exista intre dData1 si dData2 .

MsgBox "Numarul de zile dintre cele doua date este" & lDif

lDif = DateDiff( "m", Now, dData1)

' returneaza un numar negativ daca data

' curenta este situata in timp dupa ''dData1'.

lDif = DateDiff( "yyyy", dData1, dData2)

' intoarce numarul de ani dintre cele doua 'date .

FUNCTIA 'DateAdd()'

Aceasta functie adauga la o data specificata un numar dat de intervale de timp dorite. Valoarea returnata este de tip 'Variant ( Date)'.

Parametrii :

obligatoriu - variabila de tip sir ce specifica intervalul de timp pe care doriti sa-l adaugati. Valorile posibile sunt cele din cazul primului parametru al functiei 'DatePart()' ;

obligatoriu - valoare numerica ce speficica numarul de intervale de timp ce-l doriti adaugat la o anume data . Poate fi pozitiv ( rezulta o data ulterioara celei la care adaug) sau negativ ( rezulta o data anterioara celei la care adaug);

obligatoriu - variabila de tip Date ce tine data la care vreti sa adaugati

'TipInterval * NrIntervale' .

Exemplu :

Dim dData As Date, iUlterior As Integer, iAnterior As Integer

Dim dDataUlt As Date, dDataAnt As Date

dData = Now() ' preiau data curenta

iUlterior = 20

iAnterior = -5

dDataUlt = DateAdd( "d", iUlterior, dData)

' am adaugat 20 de zile la data curenta.

MsgBox "De acum in " & iUlterior & " zile este " & dDataUlt

dDataAnt = DateAdd( "q", iAnterior, dData)

' obtin data cu 5 trimestre in urma relativ la cea ' curenta.

iAnterior = - iAnterior

MsgBox " Acum " & iAnterior " trimestre a fost " & dDataAnt

INTREBARI

Care sunt ideile programarii in VBA ?

Ce tipuri de obiecte Access pot contine cod VBA ?

Cum se realizeaza apelul rutinelor ?

Scrieti o functie care sa primeasca doi parametri si sa intoarca primul parameteru ridicat la puterea egala cu cel de-al doilea parametru .





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate