+ All Categories
Home > Documents > 68534429-VBA-SC3-Extras2-1

68534429-VBA-SC3-Extras2-1

Date post: 04-Apr-2018
Category:
Upload: claudiu-jucor
View: 216 times
Download: 0 times
Share this document with a friend

of 73

Transcript
  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    1/73

    erban CRICOT

    Programarea n VISUAL BASICfor Application

    Editura CARMINISPiteti, 2003

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    2/73

    II-2

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    3/73

    II-3

    NOT INTRODUCTIV

    "Programarea n Visual Basic for Application" este o lucrare destinat n special utilizatorilor debaze de dateAccess.

    Lucrarea este structurat n dou pri:

    n prima parte, "Elementele de baz ale limbajului de programare VBA - Visual Basic forApplication" sunt prezentate:

    principiile de baz ale programrii; elementele de baz ale limbajului de programare Visual Basic; bibliotecile de proceduri i funcii dinAccess; interfaa de dezvoltare i depanere a VBA;

    n a doua parte, "Utilizarea obiectelor n limbajul de programare VBA" sunt prezentate: principiile definirii i utilizrii obiectelor n VBA; modelul ierarhic-arborescentAccess; modelul ierarhic-arborescentData Access Object; tehnologiile OLE i Automation-OLE; utilizarea n aplicaiileAccess aActiveX-urilor;

    utilizarea n aplicaiileAccess a obiectelor Wordi Excel; crearea i utilizarea claselor de obiecte n VBA;

    Pentru nsuirea elementelor de baz ale programrii n Visual Basic sunt necesare numai cunotineminime despre sistemele de operare Windows. Totui, pentru a nelege partea a doua a lucrrii referitoarela programarea prin obiecte, noiunile despre baze de date relaionale i despre interfaa Access suntobligatorii.

    n decursul lucrrii sunt prezentate exemple comentate de cod VBA. Acestea mpreun cu alteexerciii specifice grupate pe categorii i mpreun cu alte dou aplicaii demonstrative comentate, segsesc n formatMdb, pe suportul ataat la carte.

    "Programarea n Visual Basic for Application" face parte dintr-un ciclu de lucrri referitoare lainformatica de gestiune, care mai conine:

    "Funcionareai utilizarea calculatoarelor PC" "Utilizarea bazelor de date relaionale Access n realizarea aplicaiilor economice" "Reele de calculatoare interconectate" "Proiectarea aplicaiilor Web" "Principiile proiectrii sistemelor informatice de gestiune"

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    4/73

    II-4

    Modul de utilizare a CD-ROM-ului inclus n carte

    La sfritul acestei cri vei gsi un CD-ROM ce conine urmtoarele fiiere: DAO.MDB - conine toate fragmentele de cod VBA prezentate n carte, mpreun cu toate

    formularele, cererile i tabelele necesare executrii lor. n modulul general de cod, vei gsi surselegrupate dup natura lor, n module distincte de cod. Pentru transferurile prin tehnica AUTOMATION, seva folosi fiierul Excel, FOAIE.XLS

    PROBLEME.MDB - este o aplicaie ACCESS, care conine un set de exerciii rezolvate nVBA. Aplicaia permite vizualizarea tuturor problemelor grupate pe categorii i accesarea printr-o simplapsare pe un buton, a modulului de cod sau a formularului ce va conine codul surs.

    CURS.MDB - este o aplicaie demonstrativ cu un grad de dificultate mai ridicat i n care codulsurs VBA este comentat n detaliu. Aceast aplicaie permite prezentatea grafic a unor analize asupradinamicii cursului valutelor USD i EURO. Pentru grafice s-a folosit ActiveX-ul, Microsoft Graph, iarpentru introducerea datelor calendaristice controlul MS Calendar Control. n modulul general de cod, segsesc dou colecii de rutine parametrizate, foarte utile n realizarea de aplicaii.

    AGENDA.MDB - este o aplicaie mai simpl, cu codul surs VBA comentat, care permitestocarea i regsirea informaiilor referitoare la o baz de date relaionale de persoane.

    Deoarece execuia aplicaiilor ACCESS nu se poate efectua direct de pe CD-ROM, se va copia n

    prealabil pe hard disck directorul cu acestea: EXEMPLE_VBA.Aplicaiile sunt realizate n ACCESS 97. Pentru execuia lor n versiuni superioare este necesar ca

    mai nti s se efectueze conversia lor.

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    5/73

    II-5

    C U P R I N S

    II.1. Obiecte .......................................................................................................................................... II-8II.1.1. Obiecte, clase de obiecte i colecii de obiecte.........................................................................II-8II.1.2. Proveniena obiectelor utilizate ntr-o aplicaie Access...........................................II-9II.1.3. Ierarhia obiectelor dintr-o aplicaie .......................................................................................... II-9II.1.4. Utilizarea n VBA a propriet ilor i metode lor obiectelor .......................................II-11

    II.1.5. Exemple de referire a obiectelor din modelul Access............................................................II-11II.1.6. Instruciunea With..................................................................................................................II-12II.1.7. Variabile obiect ......................................................................................................................II-13

    II.1.7.1. Tipuri de variabile obiect.................................................................................................................II-13II.1.7.2. SET Instruciunea de a tri bui re pent ru v ariabi le obiect ....................................................II-14II.1.7.3. Eliberarea resurselor folosite de o variabil obiect. Cuvntul cheie NOTHING. ........................... II-15II.1.7.4. Crearea unei instane noi pentru o clas de obiecte. Cuvntul cheie NEW.....................................II-15

    II.1.8. Parcurgerea coleciilor de obiecte. Instruciunea ForEach.............................................II-16

    II.2. Modelul Access-Application...................................................................................................... II-17II.2.1. Obiectul Application .............................................................................................................. II-17II.2.2. Colecia Forms .......................................................................................................................II-18

    II.2.2.1. Obiectul Form ............................................................. ................................................................ .....II-19II.2.2.1.a) Cuvntul cheie ME....................................................................................................................II-19II.2.2.1.b) Proprietile formularului..........................................................................................................II-20II.2.2.1.c) Evenimentele formularului........................................................................................................II-22II.2.2.1.d) Metodele formularului...............................................................................................................II-24II.2.2.1.e) Obiectele seciunilor formularului: Detail, Form_Header, Form_Footer..................................II-25II.2.2.1.f) Referirea Subformularelor i a controalelor sale........................................................................II-25

    II.2.2.2. Obiectul Control Text_Box (caseta de text) ........................................................ .......................... II-26II.2.2.2.a) Proprietile controlului Text Box.............................................................................................II-26II.2.2.2.b) Proprietile dinamice ale controlului Text Box........................................................................II-29II.2.2.2.c) Evenimentele controlului Text Box...........................................................................................II-29II.2.2.2.d) Metodele controlului Text Box ............................................................ ..................................... II-30

    II.2.2.3. Obiectul Control Combo_Box (lista ascuns)...............................................................................II-31 II.2.2.3.a) Proprietile specifice controlului Combo Box ......................................................... ................ II-31II.2.2.3.b) Evenimentul specific controlului Combo Box. ......................................................... ................ II-33

    II.2.2.4. Obiectul Control List_Box (list derulant)..................................................................................II-33 II.2.2.5. Obiectul Control boolean Option_Button, Check_Box, Toggle_Button........................................II-33II.2.2.6. Obiectul Control Option_Group .............................................................. ..................................... II-33II.2.2.7. Obiectul Control Label (etichet) ............................................................ ..................................... II-34II.2.2.8. Obiectul Control grafic Line, Rectangle, Picture..........................................................................II-34II.2.2.9. Obiectul Control Command_Button..............................................................................................II-34

    II.2.3. Obiectul DoCmd ....................................................................................................................II-34II.2.4. Obiectul Screen......................................................................................................................II-35

    II.3. Modelul DAO Data Access Objects....................................................................................... II-37II.3.1. Modelul DAO Structura ierarhic arborescent....................................................................II-37II.3.2. Obiectul DBEngine ................................................................................................................II-38II.3.3. Colecia Workspaces Spaiul (mediul) de lucru..................................................................II-38II.3.4. Tratarea erorilor de execuie n VBA.....................................................................................II-40

    II.3.4.1. Tratarea standard a erorilor de execuie produse n VBA...............................................................II-40II.3.4.2. Tratarea erorilor de execuie prin module specializate .............................................................. .....II-40

    II.3.4.2.a) Instruciunea: On Error..............................................................................................................II-41II.3.4.2.b) Instruciunea: Resume...............................................................................................................II-41II.3.4.2.c) Obiectul: Err..............................................................................................................................II-41II.3.4.2.d) Str uct ur a une i rut in e car e are mod ul de Er ror h and li ng ........................................II-42II.3.4.2.e) Colecia Errors i obiecte Error.................................................................................................II-43

    II.3.5. Colecia Databases .................................................................................................................II-44II.3.6. Colecia Containers ................................................................................................................II-45II.3.7. Colecia TableDefs.................................................................................................................II-49

    II.3.8. Colecia QueryDefs................................................................................................................II-51II.3.9. Colecia Relations ..................................................................................................................II-54II.3.10. Colecia Recordsets Set de nregistrri..............................................................................II-54

    II.3.10.1. Funcionarea unui set de nregistrri.............................................................................................II-54 II.3.10.2. Tipuri de seturi de nregistrri.......................................................................................................II-55

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    6/73

    II-6

    II.3.10.3. Deschiderea unui set de nregistrri Metoda OpenRecordset ...........................................II-56II.3.10.4. Proprietile unui set de nregistrri..............................................................................................II-56II.3.10.5. Accesarea secvenial a unui set de nregistrri............................................................................II-58II.3.10.6. Accesul direct ntr-un set de nregistrri........................................................................................II-58

    II.3.10.6.a) Metoda Seek............................................................................................................................II-58II.3.10.6.b) Metodele FindFirst, FindLast, FindNext, FindPrevious..........................................................II-59

    II.3.10.7. Prelucrarea datelor dintr-un Recordset.........................................................................................II-61II.3.10.7.a) Citirea datelor din cmpurile unui Recordset..........................................................................II-61II.3.10.7.b) Actualizarea datelor din cmpurile unui Recordset.................................................................II-62

    II.3.11. Recordseturi definite pe cereri ............................................................................................. II-65II.3.12. Recordseturi definite pe alte Recordseturi ........................................................................... II-66II.3.13. Accesul la obiecte externe de date ....................................................................................... II-67

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    7/73

    II-7

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    8/73

    II-8

    Cap.II Utilizarea obiectelor n limbajul de programare VBA

    II.1. Obiecte

    II.1.1. Obiec te, clase de obiec te i colecii de obiecte

    Din cele prezentate pn acum, referitor la noiunea de obiect, putem sintetiza astfel:Obiectul este o entitate bine definit (adic exist), care are o anumit structur, anumite

    caracteristicii anumite funcii (realizeaz una sau mai multe aciuni).Un obiect se caracterizeaz prin:

    proprieti structura i atributele sale; metode aciunile pe care poate s le efectueze; evenimente condiiile care determin momentul cnd se lanseaz o anumit aciune (deexemplu Click pe un obiect).

    Exemplu. ntr-o aplicaie Access, ntr-un formular, exist un obiect cu numele Cmd. Acesta este uncontrol buton de comand, cu anumiteproprieti (culoare, dimensiuni, poziia n formular, textul afiatetc.), care are ataat evenimentuluiClicko aciune (metod), materializat printr-oprocedur eveniment,prin care se nchide formularul respectiv.

    Clasa de obiecte conine toate definiiile unui obiect, adic tipurile de proprieti, metode ievenimente care vor determina structura unui obiect. Prin setarea caracteristicilor unei clase de obiecte

    (de exemplu atribuirea de valori proprietilor) se obine un obiect nou.Prin definirea unei clase de obiecte se creeaz practic un format, o structur pe care o vor avea toate

    obiectele ce se vor crea din aceasta.Relaia dintre o clas de obiectei obiectele care provin din ea este asemntoare cu aceea dintre

    tipurile de datei variabile de tipul respectiv. Aa cum tipul de date este un concept, iar o variabil estematerializarea (n memoria calculatorului) acestuia, tot aa clasa de obiecte este un concept, iar obiectelece provin din ea reprezint materializarea acesteia.

    Crearea unui nou obiect al unei clase se numete instan a clasei respective.n Access exist definite diferite clase de obiecte. De exemplu clasa Form stabilete care este

    structura unui obiect formular, adic proprietile (nume, culoare, dimensiuni, caption etc.), evenimentele(open, close, click etc.) i metode (refresh, requery etc.). Un formular creat este o materializare (oinstan) a clasei Form, avnd setate proprietile cu anumite valori i ataate la anumite evenimentemetode specifice prin scrierea unui cod de program n VBA.

    Colecia de obiecteeste constituit din totalitatea obiectelor care provin din aceeai clas deobiecte i care au din aceast cauz aceleai tipuri de proprieti i metode. Aceste obiecte constituiedeci instane ale aceleiai clase de obiecte.

    Obiectele dintr-o colecie pot fi privite i folosite ca un tablou de obiecte. Ele vor crea o structur detip tablou, la care este posibil referirea la un anumit obiect prin indexul acestuia, deci printr-un numrcare reprezint poziia acestuia n tablou. Astfel, la crearea primului obiect, acesta va primi indexul 0, lacrearea celui de-al doilea indexul va fi 1, etc.

    O colecie de obiecte reprezint la rndul ei o entitate, cu propriile sale proprieti. Din aceastcauz ea constituie, n totalitatea ei, un obiect specific.

    Astfel o colecie de obiecte va avea printre altele urmtoarele dou proprieti: Count care conine numrul de obiecte din colecie; Parent care conine obiectul superior din ierarhie de care aparine colecia.

    Numele obiectului colecie este format din numele clasei de unde provin obiectele la care se adaugsufixul "s".

    Exemplu. ntr-o aplicaie Access, n formularul F_CDialogContainer, colecia de obiecte Controlsconine toate obiectele control din formular. Procedura urmtoare, lansat de evenimentul DblClickalseciunii "Header" a formularului trateaz colecia Controls, ca pe un tablou, afind elementelecomponente ale acesteia (numrul acestora se gsete n proprietatea Count) ct i obiectul de careaparine (proprietatea Parent).

    Private Sub FormHeader_DblClick(Cancel As Integer)

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    9/73

    II-9

    ' Afieaz numele obiectelor ce se afl n _colecia de controale a formularului

    Dim ST As StringDim i As IntegerDim N As IntegerST = ""' Proprietatea Count a coleciei conine _numrul de obiecte din colecie

    N = Me.Controls.Count - 1For i = 0 To N 'Primul element dintr-o colecie are indexul 0

    ST = ST & i & ": " & Me.Controls(i).NAME & vbCrNext i' Propritatea Parent a coleciei conine obiectul _de care aparine colecia

    MsgBox " Controalele din formularul parinte:" _& vbCr & """ " & Me.Controls.Parent.NAME & _" "", sunt n ordine:" & vbCr & vbCr & ST

    ' vbCr este o constant care determin saltul de rnd nou _

    la afiare vbCr = Chr(10) & Chr(13)End Sub

    II.1.2. Proveniena obiectelor utilizate ntr-o aplicaie Access

    Un obiect, aa cum am artat, este format att din date (proprieti) ct i din cod de program(metode). Realizarea unei aplicaii prin crearea i utilizarea unor obiecte reprezint o metod modern deprogramare, denumitprogramarea la nivel de obiect.

    Cel mai important avantaj al acestei metode este acela al utilizrii obiectelor create n mai multeaplicaii, ceea ce duce, n afar de o cretere semnificativ a productivitii, la standardizarea aplicaiilorrealizate.

    n Access obiectele din care se realizeaz o aplicaie pot proveni din mai multe surse: instane ale claselor de obiecte aflate n bibliotecile standard ale pachetului Access:DAO,AccessApplicationi VBA;

    instane ale claselor de obiecte proprii (utilizator), create special de proiectant (prin modulele declase de obiecte);

    instane ale unor clase de obiecte externe, realizate de aplicaii server sub forma unor controalesau biblioteciActiveXrealizate cu tehnologia (standardul industrial) Automation. Utilizarea acestor clasede obiecte externe implic n prealabil, aa cum se va arta, crearea n aplicaia client (care foloseteobiectele produse de clasa respectiv) a unei referine ctre acestea.

    II.1.3. Iera rhia obiec telo r dintr-o ap lica ie

    Obiectele folosite ntr-o aplicaie se gsesc ntr-o structur ierarhic-arborescent.Fiecare element al acestei structuri aparine unei structuri superioare i la rndul su conine unul

    sau mai multe elemente de nivel inferior.De asemenea un element al acestei structuri poate fi constituit dintr-un obiect individual sau dintr-o

    colecie de obiecte.O aplicaie Access este realizat n cea mai mare parte din obiectele i coleciile de obiecte care

    provin din clasele de obiecte ale urmtoarelor biblioteci standard (modele): DAO privind structurile de date; Access (Application) privind interfaa utilizator;

    i respectnd ierarhiile create n acestea.

    Obiectele, ca i proprietile sau metodele lor, au un nume, care poate fi implicit (adic stabilit desistem) sau dat de utilizator.

    n decursul acestui capitol termenul model va referi realizarea unei structuri ierarhice de obiecte icolecii de obiecte ce provin dintr-o bibliotec standardce conine clase de obiecte.

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    10/73

    II-10

    Referirea la un obiect.

    Deoarece exist posibilitatea ca mai multe obiecte s aib acelai nume, atunci cnd se refer unobiect (sau proprietile i metodele sale), este necesar calificarea numelui cu ntreaga structurascendent a obiectelor de care acesta este dependent (asemntor cu descrierea cii unui fiier sau folderde pe un disc). Acest lucru nu este ns obligatoriu dac nu se creeaz ambiguiti.

    Semnele de calificare folosite n toate obiectele unei aplicaiiAccess (deci i n VBA) suntpunctul(.) sau semnul exclamrii-bang (!), specificul utilizrii lor fiind urmtorul:

    punctul (.): se folosete cnd n faza de scriere a structurii ierarhice, aceasta este deja

    cunoscut de sistem; semnul exclamrii (!): se folosete cnd se dorete ca descrierea structurii respective s seanalizeze de abia n faza de execuie, deoarece n faza de scriere ea nu este nc cunoscut desistem;

    Explicaie. Se tie c ntr-o aplicaie Access execuia unui formular (sau raport) care are introdus codVBA n modulul su de cod, se va face numai dup ce se compileaz fr eroare acesta. n faza decompilare a modulelor de cod, sistemul va analiza numai structurile ierarhice care au ca semn decalificare punctul (.) i ignor pe cele care au ca semn de calificare semnul exclamrii (!), urmnd caacestea din urm s fie analizate abia n faza de execuie. Deci pentru ca operaia de compilare s setermine cu succes este necesar ca toate structurile ierarhice care nu sunt cunoscute n momentul respectivs fie introduse cu semnul de calificaresemnul exclamrii (!) pentru a nu fi analizate (structurile ierarhicecunoscute n faza de compilare pot fi introduse cu semnul de calificarepunct).Exemplu. Astfel, dac n codul din spatele unui formular legat la un tabel se folosete numele unui cmpal acestuia, atunci, deoarece n faza de compilare obiectul respectiv, tabelul, este deja cunoscut de sistem,semnul de calificare folosit poate fi punctul (.); dac ns formularul nu este legat iniial la o tabel,urmnd a se efectua aceast operaie printr-o instruciune VBA (deci n faza de execuie), atunci referireala cmpurile acesteia trebuie fcut cu semnul de calificare semnul exclamrii (!), pentru ca analizaacesteia s nu se mai fac n momentul compilrii (cnd nu este cunoscut) ci n momentul execuieiinstruciunii care folosete structura respectiv.

    Se poate nlocui oricnd semnul de calificare punct(.) cu semnul de calificare semnul exclamrii(!), dar nu i invers.

    Folosirea structurilor ierarhice descrise cu semnul de calificare semnul exclamrii (!) ncetineteexecuia codului VBA, deoarece analiza acestora nu se mai face n faza de compilare.

    Referirea unei colecii se face folosind acelai sistem, deoarece colecia este, aa cum am vzut, larndul ei, un obiect.

    Referirea la un obiect dintr-o colecie se poate face n 3 feluri:

    Fie folosind tot metoda prezentat, utiliznd calificarea obiectului cu colecia din care face parte: Exemplu. Me.Controls!CForm

    Fie folosind indexarea coleciei cu un numr care reprezint poziia n colecie a obiectuluirespectiv (asemntor cu referirea unui element dintr-un tabel).Numerotarea elementelor unei colecii de obiecte se pornete de la 0 (zero).

    Exemplu. Me.Controls(0)

    Fie la fel ca mai sus dar folosind ca pe un ir de caractere numele obiectului n loc de index. Exemplu. Me.Controls("CForm")

    Dac se dorete s se fac referire n codul VBA laformularul sau raportul "printe", fr a se maiface descrierea structurii ierarhice superioare, se poate folosi cuvntul cheie ME.

    Semnele care se pot folosi pentru a se specifica un obiect sunt parantezele drepte .Ele sunt folosite obligatoriu atunci cnd n numele obiectului se gsesc spaii.

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    11/73

    II-11

    II.1.4. Utilizarea n VBA a propriet ilor i metodelor obiectelor

    Referirea laproprietile sau metodele unui obiect se face prin: metoda descris la punctul precedent pentru referirea obiectului; urmat de numele proprietii sau metodei, folosind semnul de calificarepunct. Utilizarea proprietiiunui obiect, n codul VBA, se face la fel ca i cum s-ar lucra cu o variabil

    obinuit, n citire sau scriere. Dac se dorete atribuireaunei valori proprietii unui obiect, atunci aceasta se introduce npartea din dreapta a unei instruciuni de atribuire.

    Exemplu de scriere a proprietii Caption a unui formular:Me.Caption="Nume Nou Form"sau a proprietiiIndex, a unui Recordset:Rs.Index="PrimaryKay"

    Dac se dorete citirea proprietii unui obiect, atunci aceasta va face parte dintr-o expresieobinuit.

    Exemplu de citire a proprietii Caption a unui formular:MsgBox "Numele formularului este: " & Me.Caption

    La utilizarea proprietilor unui obiect trebuie s se in cont de urmtoarele trei restricii:Nu toate proprietile au posibilitatea s li se schimbe valoarea. Aceste proprieti se numesc

    Read Only, i se folosesc numai n citire;

    Ca i o variabil, o proprietate este de un anumit tip de date, de care trebuie inut cont n

    utilizarea ei;Modificarea proprietilor unui obiect prin cod dureaz numai n timpul fazei respective deexecuie, urmnd ca la terminarea acesteia s se refac proprietatea iniial;

    Utilizarea metodelorunui obiect n codul VBA se face la fel ca i cum s-ar lucra cu o procedur,folosindu-se metoda de apelare fr Call, prin scrierea sub forma unei instruciuni a metodei, urmat,dac este cazul, de parametrii acesteia (fr a fi introdui ntre paranteze) separai prin virgul.

    Exemplu de apelare a unei metode cu doi parametri de tip string:Rs.Seek "=", "unu".

    II.1.5. Exemple de referire a obiectelor din modelul Access

    Pentru nelegerea acestor exemple este necesar urmrirea structurii ierarhice a modelului Access

    Application ce se gsete tot n cadrul acestui capitol. Forms!Date se face referire la formularul deschis cu numeleDate. Forms![date de bilant] se refer formularul deschis date de bilant. Observai parantezele

    drepte folosite pentru c numele formularului conine spaii. Forms![vinzari].RecordSource se face referire la proprietateaRecord Source al formularului

    deschis vinzari. Parantezele drepte pot fi scoase. Observai punctul, semnul de calificare pentru oproprietate sau metod.

    Forms![vinzari]!valoare se refer controlul cu numele valoare din formularul deschis vinzari. Forms!("vinzari")!valoare identic cu mai sus, dar se folosete alt posibilitate de precizare a

    unui obiect dintr-o colecie i anume printr-un string care reprezint numele obiectului. Forms!(0)!valoare identic cu mai sus, dar se folosete precizarea unui obiect dintr-o colecie

    prin folosirea numrului de ordine al obiectului n cadrul coleciei (am presupus c formularul vinzari afost primul deschis, primind indexul 0 in cadrul coleciei Forms).

    Me.FilterOn se refer proprietatea FilterOn a formularului n care se gsete codul VBA. Me!Altul.Visible se refer proprietatea Visible a controlului Altul a formularului n care se

    gsete codul VBA.Exemplul prezentat anterior este reluat, dar el nu se mai gsete n codul din spatele formularului, ci

    extern n modulul de cod al aplicaiei. Din el se observ n special cum funcioneaz colecia Forms, aformularelor deschise.

    Public Sub Col_Form_Controale()' Afieaz obiectele ce se afl n colecia de controale a primului formular deschis

    Dim ST As String

    Dim i As IntegerDim N As IntegerST = ""' Proprietatea Count a coleciei conine numrul de obiecte din colecie

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    12/73

    II-12

    On Error GoTo Fis ' Dac nu este nici un formular deschis se produce _ eroare controlabil dectre utilizator

    N = Forms(0).Controls.Count ' Numrul de obiecte din colecia de _ controale a primuluiformular deschis

    On Error GoTo 0 n continuare, dac se produce o eroare aceasta _ va fi tratat de sistemulstandard de erori.

    For i = 0 To N -1 'Primul element dintr-o colecie are indexul 0ST = ST & i & ": " & Forms(0).Controls(i).NAME & vbCr

    Next i' Propritatea Parent a coleciei conine obiectul de care aparine coleciaMsgBox " Controalele din formularul parinte:" & vbCr & _

    """ " & Forms(0).Controls.Parent.NAME & _" "", sunt n ordine:" & vbCr & vbCr & ST

    Sfirsit:Exit Sub

    Fis:MsgBox "Nu exista nici un formular deschis", vbCriticalResume Sfirsit

    End SubII.1.6. Instruc iunea With

    Instruciunea With este folosit pentru a scrie diferite instruciuni ce se refer la prorietile saumetodele unui obiect, fr a le mai califica cu numele obiectului.

    Forma lui With este:With object

    [instruciuni]End With

    n care instruciunile plasate n interiorul acesteia vor referi proprietile sau metodele obiectului object,direct, fr calificareaacestora cu obiectul respectiv.

    n objectse poate folosi numele unui obiect sau o variabil obiect.Exemplu. Urmtoarea secven modific cteva dintre proprietile formularului deschis cu numele

    Datt.With Forms!Datt

    .RecordSource = "Tabela_A"

    .Caption = "Formularul Datt"

    .ScrollBars = 0

    .NavigationButtons = TrueEnd With

    Instruciunea With se poate folosi i pentru tipurile de date definite de utilizator cu instruciunea

    Type.Exemplu. Urmtoarea secven introduce date n variabila vPersoana, declarat ca tip de date tPrs,definit de utilizator.

    Type tPersNume As StringVirsta As IntegerDataNastere As Date

    End TypeDim vPersoana as tPers..With vPersoana

    .Nume=InputBox("Introduceti numele:").Virsta=30

    .DataNastere=InputBox("Introduceti data nasterii:")End With

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    13/73

    II-13

    II.1.7. Var iab ile obiect

    n programare variabilele sunt elementele prin care se fac referiri la date. Deoarece n programareala nivel de obiect, exist o entitate specific, obiectul, care ncapsuleaz att date ct i prelucrri, este

    necesar definirea unei variabile specifice, variabila obiect, prin care s se poat manipula mai eficientacesta.O variabil obiect este asemntoare unei variabile obinuite ce conine un anumit tip de date.

    Declararea ei se face cu aceleai instruciuni (Dim, Public, Private sau Static) ca i la celelalte variabile.Variabilele obiect ocup o zon de memorie de 32 bii (4 octei).Dei lucrul cu variabile obiect nu este deosebit de cel cu variabilele obinuite, totui ele au o

    caracteristic specific i anume: ntr-o variabil obiect nu se va gsi efectiv obiectul respectiv, ci oreferire (adres) la acesta.

    Astfel, dac avem o variabil de tip integer AIi executm AI=3, atunci n AI vom avea efectiv, pe16 bii, numrul 3. Dac mai declarm o variabil de acelai tip, BIi o facem egal cu AI, vom avea i naceasta numrul 3. Acum, executnd AI=5, se va schimba valoarea din AI, dar cea din BI va rmne

    neschimbat. AIi BI au deci existene separate, independente.Nu acelai lucru se ntmpli n cazul variabilelor obiect. Dac (vezi urmtorul exemplu) avem ovariabil obiect FM1i introducem n ea un obiect, formularul F_CDialogContainer, atunci n FM1 nuvom avea formularul respectiv, ci o referire (adres) la acesta. Tot aa, dac mai declarm o variabilobiect, FM2i introducem n ea ce se gsete n FM1, atunci vom avea acum dou variabile obiect carevor referi acelai obiect. S modificm acum o proprietate a lui FM1. Dac vom citi aceeai proprietatedin FM2, vom observa c modificarea este efectuati n acesta. Deci, cele dou variabile obiect nu auexistene independente, ele referind practic acelai obiect.

    Evident, n anumite prelucrri, acest lucru are importan (ca n exemplu). Totui n majoritateaprelucrrilor manifestarea variabilelor obiect este similar cu a celor clasice.

    II.1.7.1. Tipuri de variabile obiectO variabil obiect se poate declara n mai multe feluri i anume ca:

    Variabil obiect generic: Dim nume_varAs Object

    Variabila declarat n acest fel este o variabil obiect generic, deoarece n ea se poate introduceorice obiect.

    Variabil obiect specific

    Pentru fiecare obiect care se obine dintr-o clas vizibil n aplicaie, indiferent c aceasta provinedin bibliotecile standard, prin referine la obiecte externe sau este creat de utilizator, exist tipurispecifice de variabile obiect, cu acelai nume ca al clasei respective. De asemenea, acelai lucru se

    ntmpli pentru coleciile de obiecte, existnd tipuri specifice de variabile obiect cu numele acestora.Astfel, pentru obiectele provenite din biblioteca Access Application, exist urmtoarele tipuri devariabile obiect:

    Forms colecia formularelor deschise; Form pentru un obiect formular; Reports colecia rapoartelor deschise; Report pentru un obiect raport; Controls pentru colecia tuturor controalelor dintr-un formular sau raport; Control pentru un control dintr-un formular sau raport etc.

    Deoarece controalele, la rndul lor, provin din clase diferite de obiecte, exist pentru fiecare tip din

    acestea variabile obiect specifice. Astfel mai sunt pentru controale urmtoarele tipuri specifice devariabile obiect: TextBox pentru controlul caset de text; ComboBox pentru controlul list ascuns;

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    14/73

    II-14

    ListBox pentru controlul list derulant; CheckBox pentru controlul boolean caset de validare; Button pentru controlul boolean buton radio; ToggleButton pentru controlul boolean de tip tast; CommandButton pentru controlul buton de comand; Label pentru controlul etichet etc.

    Declararea unei variabile obiect specifice se face folosind numele clasei sau coleciei care va fi

    referit de variabila respectiv.Dim nume_varAs tip_obiectDiferena dintre utilizarea unei variabile obiect specifice sau generice se refer la urmtorul aspect:

    La declararea unei variabile obiect generice, sistemul nu tie ce fel de obiect va fi n aceasta. Acestlucru se va cunoate la prima ncrcare cu un obiect al variabilei. n acest moment, se va configuravariabila obiect cu proprietile i metodele specifice tipului de obiect respectiv. Deci aceast configurareeste realizat n partea de execuie a aplicaiei.

    La declararea unei variabile obiect specifice, sistemul tie de la nceput care sunt proprietile imetodele tipului de obiect respectiv. Deci configurarea variabilei este realizat n partea de compilare aaplicaiei i nu n cea de execuie. Din aceast cauz, execuia cu acest tip de variabile este mai rapid.

    Un alt avantaj, determinat de utilizarea variabilelor obiect specifice, se refer la momentul n careeste folosit, n partea de editare a programului, variabila obiect respectiv.Editorul de VBA este dotat cu instrumente puternice de recunoatere i marcare a diferitelor cuvinte

    rezervate, a instruciunilor, a variabilelor, a obiectelor, a procedurilor i funciilor vizibile din locul undesunt folosite.

    Astfel, dac se introduce n text o funcie (reamintesc c m refer la partea de editare, deintroducere a sursei unui modul de cod n VBA), atunci, dup scrierea ei, automat se afieaz o list cuparametrii acesteia, ceea ce reprezint un instrument foarte util al asistrii activitii de programare.

    Similar, la introducerea n codul VBA a denumirii unui obiect (sau colecii de obiecte), editorulafieaz o list ce conine att proprietile i metodele acestuia ct i obiectele (sau coleciile de obiecte)pe care acesta le conine. Acelai lucru se va ntmpla i dac programatorul va introduce numele unei

    variabile obiect specifice.Dac se lucreaz ns cu variabile obiect generice, aceast facilitate nu poate fi activat nmomentul respectiv (al editrii programului), deoarece sistemul nu cunoate nc nimic despre structuraobiectului pe care l refer variabila respectiv.

    Nu toate obiectele sau coleciile utilizate n Access au asociate i declaraiile de tipul respectivpentru definirea variabilelor. n acest caz, evident se vor declara generic, variabilele care refer acesteobiecte.

    De exemplu, pentru controalele folosite ntr-un formular sau raport, exist tipurile de variabileobiect specifice:

    "Controls" care se refer la colecia controalelor din formularul sau raportul respectiv; "Control" care se refer la un obiect control din formularul sau raportul respectiv;

    dar pentru toate controalele de un anumit tip (de exemplu TextBox) sunt definite numai tipurile pentruacest obiect (TextBox), dar nu i pentru colecia format din aceste controale (nu exist tipul TextBoxs).

    Din cele prezentate se deduce c este indicat ca atunci cnd este posibil, s se foloseasc numaivariabile obiect specifice.

    Dei nu s-a folosit n prezentare, pentru declararea variabilelor obiect, dect forma instruciuniiDim, celelalte forme i anume Public, Private sau Static, sunt valabile i funcioneaz la fel ca lavariabilele clasice.

    II.1.7.2. SET Instruciunea de atribuire pentru variabile obiect

    Dei am folosit mereu forma de mai jos pentru instruciunea de atribuire pentru variabilele clasice:

    var= expresietotui forma complet a acesteia este:

    Let var= expresie

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    15/73

    II-15

    n care cuvntul cheieLet, introdus implicit, arta c este atribuit o valoare unei variabile clasice.

    Pentru variabilele obiect, la care atribuirea const practic n crearea unei referine ctre un obiect,este obligatorie folosirea la instruciunea respectiv a cuvntului cheie SET.

    Deci pentru variabilele obiect instruciunea de atribuire este:

    Set var_obiect= expresie_obiect

    n care expresie obiecteste o expresie al crui rezultat este un obiect.Efectul instruciunii de atribuire este introducerea n variabila obiect a adresei obiectului (referirea

    la acesta) care rezult din expresia din dreapta i nu realizarea unei copii a obiectului respectiv.Din aceast cauz dac mai multe variabile refer acelai obiect, orice modificare a acestuia

    (cauzat eventual prin una din variabile) va fi reflectat imediat de toate aceste variabile care referobiectul respectiv (vezi exemplul care va urma).

    II.1.7.3. Eliberarea resurselor folosite de o variabil obiect. Cuvntul cheieNOTHING.

    O variabil obiect are nevoie de un spaiu (memorie) de lucru pentru a funciona. Acesta esteeliberat automat, ca la orice variabil, la terminarea modulului n care a fost declarat variabila obiect.

    Dac totui se dorete eliberarea imediat a spaiului ocupat de o variabil obiect se foloseteinstruciunea:

    Set var_obiect= NothingPublic Sub Var_Obiect()' Demonstreaz c o variabil obiect reprezint referina ctre un obiect

    Dim ST As StringDim FM1 As FormDim FM2 As FormOn Error GoTo Fis 'Lipsa unui formular deschis produce o eroareSet FM1 = Forms(0) ' Var. obiect FM1, va conine referina ctre _ primul formular deschisMsgBox "Primul formular deschis este: " & FM1.NAMEOn Error GoTo 0

    Set FM2 = Forms(0) ' Var. obiect FM2, va conine aceeai referin ca _ variabila FM1ST = FM1.Caption ' Proprietatea Caption a variabilei obiect FM1 _ este salvat n STFM1.Caption = "TEST Variabile Obiect" ' Se schimb proprietatea _ Caption n FM1MsgBox FM2.Caption ' Schimbarea se face practic n obiectul referit. _ Deci i n FM2 prop.

    Caption va fi: "TEST Variabile Obiect"FM1.Caption = ST ' Se reface proprietatea Caption.MsgBox FM2.Caption ' Aceast schimbare se produce i n FM2Set FM1 = Nothing ' Se elibereaz spaiul ocupat de FM1

    Sfirsit:Exit Sub

    ' La terminarea rutinei, se elibereaz spaiul ocupat de toate variabilele _ obiect declarate n ea.Deci spaiul ocupat de FM2 se elibereazi el.Fis:

    MsgBox "Nu exista nici un formular deschis", vbCriticalResume Sfirsit

    End Sub

    II.1.7.4. Crearea unei instan e noi pentru o clas de obiecte. Cuvntul cheie NEW

    Cuvntul cheie New se poate folosi att la declararea unei variabile obiect ct i la instruciunea deatribuire Set.

    Dim nume_varAs New tip_obiectSet var_obiect= New expresie_obiect

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    16/73

    II-16

    Efectul acestuia se manifest numai la clasele de obiecte create prin modulele de cod ale aplica iei.El produce crearea unei noi instane pentru clasa respectiv, adic practic al unui spaiu separat deexisten pentru variabila respectiv.

    Nu trebuie confundat folosirea acestui cuvnt cheie cu aceea de creare a unor obiecte noi nmodelele standard aleAccess (de exemplu nu se poate crea prinNew un control nou ntr-un formular).

    II.1.8. Parcurgerea coleciilor de obiecte. Instruciunea ForEach

    n primul exemplu din acest capitol s-a artat cum pot fi parcurse cu o instruciune FOR obinuit

    obiectele unei colecii, folosindu-se proprietatea Counta coleciei pentru stabilirea numrului de ciclurinecesar.Acelai lucru se poate face mai eficient cu forma special a instruciunii ForEach:

    For Each var_obiect In colecie_obiecte[instruciuni][Exit For][instruciuni]

    Next [var_obiect]

    Variabila obiect folosit trebuie s fie compatibil cu tipul coleciei specificate dup cuvntul cheieIN.

    Funcionarea buclei For const n faptul c la fiecare iteraie, variabilei obiect, var_obiect, i se vaatribui pe rnd cte un element al coleciei specificate.

    Deci instruciunea ForEach va avea attea cicluri cte obiecte conine colecia specificat ninstruciune.Exemplu.

    Public Sub Afis_Forms()'Afieaz toate formularele deschiseDim FM As FormDim ST As String

    ST = ""For Each FM In Forms ' FM refer la fiecare ciclu un formular deschis

    ST = ST & " " & FM.NAME & vbCrNextIf Len(ST) > 0 Then

    MsgBox "Formulare deschise: " & vbCr & vbCr & STElse ' Nu s-a executat nici un ciclu din For...Each

    MsgBox "Nici un formular nu eeste deschis"End If

    End Sub

    Instruciunea For ... Each se poate folosi i pentru variabile de tip tablou (Array). n acest caz,variabila contor trebuie s fie declarat de tip variant.

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    17/73

    II-17

    II.2. Modelul Access-Application

    Modelul ierarhic arborescent Application, princare se realizeaz instanele obiectelor i coleciilor careconstituie interfaa utilizator a unei aplicaii i careprovin din clasele de obiecte coninute n bibliotecastandardAccess, este artat succint n figura alturat.

    n figura prezentat nu s-au detaliat coleciile.De exemplu, dac la un moment dat exist douformulare deschise, FM_1 i FM_2, care conincontroalele Cbox_1, Cbox_2i Cmd (FM_1), respectivComb1 i Cbox_1 (FM_2), atunci colecia Forms vaarta ca n figur.

    ------------------

    II.2.1. Obiectul Application

    Obiectul Application se refer la aplicaiaMicrosoft Access activi are dou funcii de baz:

    1)Conine urmtoarele obiecte i colecii:

    colecia Forms aformularelor deschise; colecia Reports a rapoartelor deschise (cu

    aceiai structur ca Forms); colecia Modules amodulelor de cod; colecia References areferinelor ctre alte obiecteActiveX(obiecte sau biblioteci); obiectul Screen conine proprieti i metode ce se refer la formularul, raportul sau controlul

    care la un moment dat are focusul; obiectul DoCmd care conine metode prin care se pot executa din codul VBA aproape toate

    comenzile care se pot folosi n aplicaiileAccess.2)Prin metodele i proprietile sale, obiectul Application poate accesa oricare dintre

    componentele (colecii, obiecte, proceduri, funcii, clase etc.) aplicaiei Microsoft Access. De asemeneaexist posibilitatea referirii acestui obiect i dintr-o aplicaie extern prin tehnicaAutomation.

    Oricare obiect Access are o proprietate special-Application, prin care se poate accesa obiectulApplication.

    ------------------

    Dintre metodele obiectuluiApplication prezentm cteva:Metoda SetOption a obiectului Application este folosit pentru a seta opiunile generale ale

    bazei de date (o parte din acestea se gsesc definite n meniul Tools|Options).Astfel opiunea Status Bar, care permite sau nu vizualizarea barei de stare, se poate activa prin

    urmtoarea metod:

    Application.SetOption "Show Status Bar", TrueAa cum se observ, metoda SetOption are doi parametri:

    primul este un string care conine numele opiunii ce se va seta; al doilea este de un tip de dat specific opiunii (boolean n cazul prezentat) i este folositpentru a da o valoare opiunii;

    Metoda GetOption ntoarce valoarea unei opiuni generale a bazei de date; Metoda Quit determin terminarea aplicaiei Access; Metoda Echo determin blocarea refacerii ecranului.

    .Application.Echo False,"Ecranul este blocat"

    DoCmd.Hourglass True' prelucrri n cursul crora ecranul nu se va mai modifica _Stringul introdus n al doilea argument este afiat pe bara de stareApplication.Echo True

    Forms

    Application

    LegendObiecte

    Colecii

    ReportsControls

    ControlsModules

    Screen

    DoCmd

    formularele deschise

    rapoartele deschise

    Forms

    coleciaformularelor deschise

    ControlsFM_1

    Cbox_1

    Cbox_2

    Cmd

    ControlsFM_1 Cbox_1

    Comb1

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    18/73

    II-18

    DoCmd.Hourglass False' Se reface starea normal a ecranului

    CreateForm i CreateReportFuncii ce permit crearea unui formular sau raport n aplicaia Access, din codul VBA, ca n

    exemplul urmtor:Sub NewForm()

    Dim fm As Form

    Set fm = Application.CreateForm ' Creaz un formular nou a crei _ referin se introduce nvariabila obiect specific de tip Form, fm

    With fm ' Seteaz cteva proprieti ale formularului.RecordSource = "Tabela_A".Caption = "Numele Formularului".AllowAdditions = False.AllowDeletions = False

    End WithDoCmd.Restore ' afieaz formularul creat

    End Sub

    O aplicaieAccess este unActiveX. Aceasta nseamn c ea poate fi accesati din alte aplicaii carefolosesc tehnologia OLE Automation, ca MS Visual Basic, MS Excel sau alt aplicaie Access. Pentruaceasta trebuie creat o nou instan a obiectuluiApplication, n care se poate deschide o baz de date.

    n exemplul urmtor se deschide dintr-o aplicaieAccess o baz de date cu numeleDAO.mdb, ce seafl n directorul Teste a discului C:

    Sub ExempluAccess()Dim appAccess As ObjectDim strDB As StringstrDB = "C:\Teste\DAO.mdb" ' introduce adresa bazei de dateSet appAccess = New Access.Application ' creeaz o nou instan a _ obiectului Application, a

    crei referin se introduce n variabila obiect _ appAccess, n scopul folosirii acesteia'Deschide n instana creat n MS Access baza de date DAO.mdbappAccess.OpenCurrentDatabase strDBappAccess.DoCmd ' efectueaz diferite aciuni n DAO.mdbappAccess.CloseCurrentDatabase ' nchide baza de date DAO.mdbSet appAccess = Nothing ' anuleaz instana creat

    End Sub

    n descrierea structurii ierarhic arborescente a modelului Access-Application din aplicaia Access,folosirea obiectului Application este opional, el fiind considerat implicit.

    II.2.2. Col ec ia Forms

    Colecia Forms conine toateformularele deschise la un moment dat. Indexarea coleciei ncepe dela 0 Forms(0) reprezentnd primul formular deschis. n continuare, fiecare nou formular deschis vaavea indexul urmtor din secven, iar nchiderea unui formular va determina o renumerotare aformularelor deschise, n aa fel ca mulimea indecilor s fie mereu continui n ordinea deschideriiformularelor.

    Membrii coleciei Forms a formularelor deschise sunt obiecte Form.Pentru colecia Formsi obiectele Form, exist definite tipuri de date obiect specifice.

    Formularele deschise pot fi i n proiectare (design).Exemplu. Procedura urmtoare, ce se gsete n modulul general de cod, afieaz numrul formularelordeschise n momentul execuiei sale. Ea va folosi proprietatea Count a unei colecii de obiecte, careconine, aa cum s-a mai artat, numrul de obiecte ce se gsesc n aceasta.

    Sub TestFormsDim N as IntegerDim FS as FormsSet FS = Application.Forms

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    19/73

    II-19

    N = FS.CountIf N = 1 Then

    MsgBox "Exist un formular deschis"ElseIf N>1 Then

    MsgBox "Exist " & N & " formulare deschise"Else

    MsgBox "Nu exist nici un formular deschis"End If

    End Sub

    II.2.2.1. Obiectul Form

    Un obiect Form reprezint un formular deschis. El are proprieti, metode i evenimente (la care sepot ataa metode) descrise tot n cadrul acestui capitol.

    Un obiect Form conine o colecie de controale numitControls, format din obiecte Control.Fiecare obiect Control va fi de un anumit tip i va avea proprietile, metodele i evenimentele

    specifice acestuia.Pentru colecia Controlsi obiecte Control, exist tipuri de date obiect specifice, definite.De asemenea, pentru diferite tipuri de controale sunt definite tipuri de date obiect specifice (dar nu

    i colec

    ii) ca de exemplu: TextBox pentru controlul caset de text; ComboBox pentru controlul list ascuns; ListBox pentru controlul list derulant; CheckBox pentru controlul boolean caset de validare; Button pentru controlul boolean buton radio; ToggleButton pentru controlul boolean de tip tast; CommandButton pentru controlul buton de comand; Label pentru controlul etichet.

    II.2.2.1.a) Cuvntul cheie ME

    Me este folosit pentru a face referire direct, din modulul de cod din spatele unui formular, laobiectul (formular) al crui cod este executat.n acest fel Me se comport asemntor cu o variabil obiect de tip Form, declarat implicit.Me este utilizat n general n dou scopuri: Pentru a referi direct obiectele din formularul al crui cod se execut (opional). De exemplu:

    Me.Cbox_1, se refer la un control din formularul n execuie. Me.RecordSource="Tabela_A" ' se leag formularul la _tabela Tabela_A; aceasta are un cmp A

    MsgBox Me!A ' se observ semnul de calificare folosit; la _ compilare, formularul nefiindlegat de Tabela_A, cmpul A nu era _ cunoscut de sistem.

    Pentru a trimite ntr-o rutin aflat n alt modul de cod, ca parametru, instana al crui cod este

    executat.Exemplu. n formularele unei aplicaii exist un buton de comand, BC, care la evenimentul click, vanchide toate formularele deschise cu excepia celui care este activ (cel n care s-a apsat BC).

    n modulul de cod din spatele unui formular la evenimentul Click al butonului ce comandBC, va fi urmtoarea procedur eveniment:

    Private Sub BC_Click() ' proc. Evenimentului Click al controlului BC' nchide toate formularele deschise din aplicaie

    CloseForms Me ' parametrul va fi o referin la un obiect de tip form _ i anume chiarformularul n al crui cod ne gsimEnd Sub

    n modulul general de cod va fi urmtoarea procedur public:

    Public Sub CloseForms(pF As Form)Dim vF As FormDim cF As FormsDim NrClose As IntegerDim Afis As String

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    20/73

    II-20

    Dim NF As IntegerDim i As IntegerSet cF = Application.Forms ' colecia Formularelor deschiseNF = cF.CountMsgBox "Formulare deschise=" & NFFor i = NF - 1 To 0 Step -1

    Set vF = cF(i) ' un obiect FormularIf vF.NAME = pF.NAME Then

    MsgBox "Formularul activ este:" & pF.NAMEElseApplication.DoCmd.Close acForm, vF.NAME' Metod a obiectului DoCmd prin care se nchide _obiectul de tip formular (constanta acForm) _i cu numele coninut n al doilea parametru.NrClose = NrClose + 1

    End IfNextAfis = IIf(NrClose = 0, "Nu s-au inchis formulare", "Formulare inchise=" & NrClose)MsgBox Afis

    End Sub

    Se observ c s-a parcurs colecia formularelor deschise (Forms) de la ultimul formular deschis ctreprimul. Acest lucru se datoreaz faptului c nchiderea unui formular va produce modificri n coleciaformularelor deschise, att asupra numrului de membri ai coleciei ct i asupra numrului de ordine (deindexare) n cadrul coleciei unui formular dac a fost nchis un formular cu un index mai mic; de exempludac exist 3 formulare deschise, cu indecii: 0, 1, 2 nchiderea formularului 1 va face ca formularul cuindexul 2 s ia indexul 1.

    II.2.2.1.b) Proprieti le formularului

    Majoritatea proprietilor formularului se pot accesa att static(prin cele 3 pagini ale controlului TAB al formularului) ct i dinamic,

    prin cod VBA. Numele formularului

    Stabilirea numelui formularului se face n fereastra Databasela fel ca la tabele sau cereri. Acesta este foarte important deoarece seva folosi pentru a se face referire la acest obiect de oriunde, darevident calificatdac este necesar.

    Pagina FORMAT

    Cele mai utilizate proprieti din aceast pagin, referitoare laforma de prezentare a formularului, sunt:

    Caption Titlul formularului. Apare n bara de titlu aacestuia. Nu trebuie confundat cu numele formularului. Implicit,dac proprietatea nu este completat, numele formularului se vafolosi i ca titlu.

    Default View Tipul formularului, care poate fi Continoussau Single.

    ScrollBars Specific dac exist sau nu bare de derulare,orizontale i/sau verticale.

    Record Selectors Specific dac exist sau nu n stnga nregistrrii, buton de selecie aacesteia.

    Navigation Buttons Specific dac exist sau nu n partea

    de jos a formularului butoane pentru accesarea anumitor nregistrri. Prin acesta se poate ajunge la primasau la ultima nregistrare a formularului se consider ordinea de afiare i nu aceea a plasrii fizice a

    nregistrrilor n tabelele legate la nregistrarea precedent sau urmtoare sau la o nou nregistrare n

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    21/73

    II-21

    vederea adugrii. De asemenea se afieaz numrul curent al nregistrrii, cte nregistrri sunt nformular i dac formularului i se aplic unfiltru de selecie.

    DividingLines Specific dac exist sau nu linii de separare a nregistrrilor. Auto Resize Specific dac formularul i modific forma, prin tragere, dac se recalculeaz

    sau nu dimensiunile obiectelor care sunt cuprinse n acesta. Auto Center Specific dac se poziioneaz sau nu formularul la mijlocul ecranului. Border Style exist urmtoarele posibiliti:

    Sizable Formularul poate fi maximizat, minimizat sau i se poate schimba forma prin tragere

    de margini. None Nici una din facilitile de mai sus nu este valabil, i de asemenea nu are nici buton Xde nchidere. Thin E ca Sizable, dar nu are margini de tragere. Dialog E caNone, dar are buton Xde nchidere.

    Control Box Specific dac exist sau nu caseta de butoane din stnga barei de titlu. Min Max Button - Specific dac exist sau nu butoanele de maximizare/ minimizare n

    ControlBox. Close Button Specific dac exist sau nubuton Xde nchidere. Width Limea efectiv a formularului (nu a ferestrei de vizualizare a acestuia), n unitatea de

    msur stabilit n Windows | Control Panel | Regional Settings. Whats This Button Se poate seta pe Yes numai dacMin Max Buttoneste No, i

    duce la introducerea nControlBoxa butonului specific deHelpassistantdinMSOffice. Picture Formularele pot avea eventual, o imagine de fundal, Background. Adresa fiierului

    care conine imaginea (sunt acceptate mai multe tipuri: bmp, ico, wmf, emf, dib) se introduce n aceastproprietate.

    Picture Type Se stabilete dac fiierul respectiv este ncapsulat (embedded) sau legat(linked). ncapsularea n mai multe formulare a aceluiai fiier grafic duce totui la ocuparea spaiuluipentru fiecare fiier n parte.

    Picture Size Mode exist urmtoarele posibiliti: Clip imaginea este preluat la dimensiunile ei reale;

    Zoom imaginea va fi mrit pn la dimensiunea ferestrei formularului dar i pstreazproporiile; Stretch Imaginea va fi mrit pentru a ocupa ntreaga fereastr dar nu i pstreazproporiile.

    Picture Alignement Se stabilete unde se plaseaz n fereastra formularului imaginea grafic. Picture Tiling Setat pe Yes, duce la repetarea imaginii grafice pentru a ocupa ntreaga

    fereastr a formularului. Grid X, Grid Y Distana dintre liniile grilei de proiectare, n pixeli. Afiarea grilei de

    proiectare se face din View | Grid. Alinierea controalelor la aceast gril se face din Format | Snap ToGrid.

    Pagina DATA, conine proprietile referitoare la datele formularului. Record Source Tabela sau cererea, de care este legat formularul. Filter Se poate introduce o expresie folosind regulile prezentate la cereri - care are rolul de a

    face o selecie a nregistrrilor din surs. Dac se creeaz un filtru prin meniul Records, atunci cndformularul este n execuie, atunci acesta va fi introdus automat n aceast proprietate.

    Order By Se introduc cmpurile dup care se sorteaznregistrrile din formular (aranjareatuturor nregistrrilor din formular dup ordinea ascendent sau descendent a unuia sau mai multorcmpuri). Dac se dorete sortare descendent se introduce dup numele cmpului respectiv un spaiu i

    DESC. Implicit se consider sortarea ascendent. Dac sunt mai multe cmpuri de sortare, acestea sesepar prin virgul. Ca i la filtre, dac se stabilete un cmp de sortare prin meniulRecords, atunci cnd

    formularul este n execuie, acesta va fi introdus automat n aceast proprietate. Crearea unui filtru sau al unui criteriu de sortare nu implic i activarea automat a acestuia.Activarea sau dezactivarea lor se poate face n timpul execuiei formularului n dou moduri:

    Fie din meniul de comenzi prin Records | Apply Filter, Sort sau Records | Remove Filter, Sort;

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    22/73

    II-22

    Fie din cod VBA, prin setarea la True sau False, a proprietilor dinamice ale formularului: FilterOn OrderByOn

    Allow Filters, Allow Edits, Allow Deletions, Allow Additions Setate pe No, blocheazcomanda respectiv.

    Record Locks Se ntlnete i la cereri. Are rolul de a stabili ce nregistrri se blocheaz, cndse lucreaz n reea i mai muli utilizatori acceseaz aceeai tabel sau cerere ncercnd s scrie n ea.Blocarea se refer la faptul c numai primul utilizator care modific zona respectiv poate s o fac,

    ceilali fiindRead Only. Posibilitile de blocare oferite de sistem sunt: No Loks nregistrrile nu sunt blocate, toi utilizatorii putnd scrie n acelai timp n aceeai

    nregistrare, ceea ce face ca sistemul s cear ce modificare rmne valabil, printr-un mesajspecific. Se folosete cnd aplicaia nu este folosit n reea; All Records ntreaga tabel este blocat, numai un singur utilizator avnd dreptul sefectueze modificri, ceilali putnd numai s citeasc din tabela respectiv; Edited Record Numai nregistrarea curent este blocat. Practic se blocheaz o zon de2KB, ceea ce poate duce i la blocarea altor nregistrri;

    Pagina OTHER

    Pop Up Specific dac fereastra formularului va fi sau nu deasupra celorlalte ferestre. Modal Un formular modal se caracterizeaz prin faptul c, o dat preluat controlul, nu l mai

    cedeaz dect la nchiderea lui. Acest lucru poate fi valabil numai pentru aplicaiaAccess sau pentru toateaplicaiile aflate n execuie n momentul respectiv.

    Cycle Stabilete care este ordinea de accesare a nregistrrilor cnd se trece cu sau de la un control la altul i se ajunge la ultimul control din seciunea de detail, stabilit conformordinii tab (care se lanseaz din meniul contextual al formularului i prin care se fixeaz care esteordinea de parcurgere a controalelor dintr-o seciune atunci cnd se trece de la un control la altul printastatur cu sau ). Dac proprietatea este setat pe All Records, se va continua cu

    nregistrarea urmtoare, iar dac este Current Record, se va reveni la primul control din aceeainregistrare.

    Menu Bar Numele unei alte bare de meniu creat de proiectant, care s nlocuiasc meniulstandard dinAccess.

    Toolbar Numele unei alte bare de pictograme creat de proiectant, care s nlocuiasc bara depictograme standard dinAccess, care apare la execuia unui formular, i anume Form View.

    Shortcut Menu Specific dac se va permite sau nu apariia meniului contextual alformularului.

    Shortcut Menu Bar Numele unui meniu contextual creat de proiectant, care s nlocuiasc pecel standard care apare la execuia unui formular.

    II.2.2.1.c) Evenimentele formularului

    Pagina EvenCele mai importante sunt: On Open i On Close Se produc la

    deschiderea, respectiv nchiderea formularului.Aceste evenimente pot fi anulate, adic nu se va

    mai produce deschiderea/ nchiderea formularului. ngeneral se folosesc pentru ca utilizatorul s confirmeaceste aciuni.

    innd cont c sunt prima/ ultima aciune care seproduce n "existena" unui formular, ele pot fi folosite i

    la anumite setri necesare n codul VBA.Exemplu. On Open Pentru a se crea o aciune care sse execute la deschiderea unui formular (adic seataeaz o metod evenimentului On Open) se va selecta

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    23/73

    II-23

    n pagina de evenimente a obiectului FORM, "Event Procedure". Prin apsarea pe cele trei puncte dindreapta, se va lansa un Wizardcare va afia modulul de cod VBA al acestui formular, n care va nseraprima i ultima linie a procedurii corespunztoare acestui eveniment, urmnd ca utilizatorul s scriesecvena de instruciuni n cod VBA.

    ' procedura ataat evenimentului open a formularelorPrivate Sub Form_Open(Cancel As Integer)' Se folosete MsgBox ca funcie.' Ea va afia o caset cu mesajul respectiv i cu doua butoane, Yes i No

    ' Dac utilizatorul apas pe:' Yes funcia va ntoarce valoarea "vbYes"' No funcia va ntoarce valoarea "vbNo"If MsgBox("Doriti deschiderea formularului.... ?", vbYesNo) = vbYes Then' Ramura TRUE a instruciunii IF.... utilizatorul a apsat pe Yes.' Folosirea MsgBox ca procedur pentru afiarea unui mesaj

    MsgBox "Se deschide formularul.... "Else ' Ramura FALSE a instruciunii IF.... utilizatorul a apsat pe No.

    Cancel = True ' Se anuleaz deschiderea formularului prin _ setarea la TRUE aparametrului CANCEL al procedurii

    MsgBox "Ati anulat deschiderea formularului... "

    End IfEnd Sub

    O procedur eveniment va avea un nume care va conine numele obiectului (n cazul nostru FORM)i numele evenimentului (OPEN), pe care sistemul l va crea automat.

    Procedurile eveniment pot avea parametri (declarai n aceeai linie de definire a procedurii, ntreparanteze rotunde), pe care sistemul i va introduce dac este cazul.

    Aceti parametri pot fi de: intrare conin nite valori pe care sistemul i ncarc n funcie de un anumit context i carepot fi folosii n interiorul procedurii; ieire care vor fi eventual setai de utilizator, pentru ca la terminarea procedurii

    (instruciunea END SUB sau EXIT) sistemul s execute anumite aciuni.Astfel parametrul CANCEL, atunci cnd apare ntr-o procedur eveniment, arat c dac se va setape TRUE, evenimentul respectiv va anula aciunea care l-a produs, iar dac se seteaz pe FALSE, atunciaciunea care a declanat evenimentul se va termina normal.

    On Load i On Unload Se produc la ncrcarea n memorie a formularului, respectiveliberarea spaiului ocupat de el. Se produc dup, respectiv nainte de On Open/ On Close. Nu pot fianulate.

    Before Update Se produce dup modificarea unei nregistrri, atunci cnd se iese dinnregistrarea respectiv. Poate fi anulat. Se folosete n general pentru a verifica anumite corelaii ntrecmpurile unei nregistrri i a nu permite utilizatorului trecerea la o alt nregistrare (deci modificrileefectuate) dac acestea nu sunt corespunztoare (se va face parametrul CANCEL=TRUE).

    Exemplu. BeforeUpdatePrivate Sub Form_BeforeUpdate(Cancel As Integer)

    If (Me!DataNasterii.Value < Me!DataAbsolvireLiceu) And _(Me!DataAbsolvireLiceu

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    24/73

    II-24

    formularului i care, n proprietatea VALUE, conin datele din cmpurile respective ale nregistrriicurente.

    Proprietatea VALUEfiind implicit la controalele text box, poate fi omis. After Update Se produce dup modificarea unei nregistrri, atunci cnd se iese din

    nregistrarea respectiv. Acest eveniment nu se poate anula, modificarea devenind definitiv.Se folosete n general pentru a calcula anumite valori i a le introduce n controale, la terminarea

    modificrilor dintr-o nregistrare (n formulare single, de obicei).Exemplu. AfterUpdate Avem un single formular legat la o tabel care conine dou cmpuri, legate la

    rndul lor de controale tip text box, cu numele Cantitatei Pret. Al treilea control, Valoare, nu este legatde tabeli esteReadOnly, nepermind utilizatorului s modifice datele n el. Totui dorim ca n cazul ncare cantitatea sau preul se modific, s se schimbe corespunztor i valoarea din acest control, laterminarea modificrii nregistrrii.

    Private Sub Form_AfterUpdate ()Me!Valoare = Me!Cantitate * Me!Pret' Proprietatea Value a controalelor nu este obligatorie, fiind implicit. Se poate folosi aceast

    proprietate att pentru citirea, cti pentru introducerea datelor n control, funcionarea fiinddeci asemntoare cu a unei variabile.

    End Sub

    Dac un control nelegat se gsete n seciuneaDetail a unui formular (sau raport) atunci valoarea

    care se gsete n el (calculat cu datele din nregistrarea curent cea care are cursorul) va fi afiat ntoate detail-urile care se vd pe ecran (deci aceeai valoare la toate nregistrrile). Din aceast cauz s-aspecificat un formular single.

    Totui, exemplul prezentat, dei corect, este cam ilogic. Gndii-v de ce!! Before Inserti After Insert Este la fel ca cele dinainte dar se produc numai cnd se introduc

    nregistrri noi. On Current Se produce cnd se trece pe o alt nregistrare. Se folosete n general, pentru a

    efectua calcule, la ntrarea ntr-o nregistrare, cu datele din aceasta.Exemplu. On Current La aceeai aplicaie prezentat mai sus, dorim s facem acelai calcul al valoriii la intrarea n nregistrare.

    Private Sub Form_Current ()Me!Valoare = Me!Cantitate * Me!PretEnd Sub

    Dac nu am fi creat aceast metod pentru acest eveniment, atunci la intrarea ntr-o nregistrare amfi avut n controlul Valoare, rezultatul calculului anterior.

    On Timer Se produce dac proprietatea Timer Interval este diferit de zero. Dac n TimerInterval este o valoare numeric, atunci acesta va specifica, n milisecunde, intervalele de timp la care selanseaz procedura eveniment introdus la On Timer.Exemplu. On Timer

    Private Sub Form_Timer ()' Se va executa la intervalul de timp care se gseste n proprietatea _ TimerInterval de pe paginade evenimente a formularului. Aceasta _ avnd valoarea 60.000, nseamn c aceast procedurse va _ executa la fiecare minut.

    MsgBox "A mai trecut 1 minut !!"End Sub On Click, On Dbl Click, On Mouse Down, On Mouse Up, On Mouse Move Se produc la

    aciunea respectiv a mouse-ului pe formular. On Key Down, On Key Up, On Key Press Se produc la aciunea respectiv a tastaturii. On Error Se produce la o eroare datorat datelor. On Got Focus, On Lost Focus Se produc la primirea, respectiv pierderea focusului

    formularului.

    II.2.2.1.d) Metodele formularuluiActivarea acestor metode se face de obicei din modulul de cod VBA ataat formularului.n continuare prezentm cele mai utilizate metode ale formularelor.

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    25/73

    II-25

    Metoda Refresh

    Metoda Refresh va determina o remprosptare a unui formular cu datele actualizate ale tabeleiataate, dac aceasta se modificprintr-un proces din afara modificrilor directe efectuate n tabel prinformular (acestea evident vor fi imediat sesizate).

    Un astfel de proces se poate efectua de exemplu dac: printr-o cerere aciune se modific tabela ataat formularului; aplicaia ruleaz ntr-un mediu multiutilizator (ntr-o reea de calculatoare) i un alt utilizatormodific aceast tabel.

    Refresh se poate face i direct n view prin acionarea comenziiRecords |Refresh. Aceast aciune sistemul o face i automat la un interval de timp care se stabilete pentru toateformularele deschise, prin completarea proprietii bazei de date RefreshInterval (n sec) din meniulTools | Advanced. Evident, cnd se dorete o remprosptare imediat a afiajului unui formular, se vafolosi metoda sus amintit.

    Metoda aceasta acioneaz numai asupra setului de nregistrri care exista la lansarea formularului,ea neavnd efect asupra:

    nregistrrilor noi introduse sau terse; cererilor folosite n diferite controale. (De exemplu avem un control combo Box care afieazdate dintr-o alt tabel care se modific dup lansarea formularului. Metoda refresh nu va

    actualiza acest control.)

    Metoda Requery

    Metoda Requery acioneaz ca i metoda Refresh dar este mult mai puternic deoarece ea re-execut toate cererile aferente formularului. Aceast metod este destul de lent, deoarece ea se comportca i cum s-ar lansa din nou formularul (inclusiv poziionarea focusului pe prima nregistrare).

    Metoda Recalc

    Aa cum am mai artat, ntr-un formular pot exista controalecalculate, care vor afia expresii n carepot interveni date din alte controale legate la cmpurile tabelei ataate formularului. n momentul n care semodific definitiv (se iese din control sau se trece la alt nregistrare) un control (cmp), se vor reface i

    calculele controalelor calculate n care acesta intervine. Sunt ns cazuri n care este necesar refacereaimediat a calculelor controalelor calculate, fr a modifica poziia cursorului dintr-un control. MetodaRecalc face aceast aciune. Deci ea se comport ca i cum s-ar da o comand de trecere pe un alt control io alt nregistrare, cu meninerea ns a cursorului pe poziia sa.

    Metoda Set Focus

    Cu aceast metod se poate muta focusul (cursorul) ntr-un formular, care evident este n execuie.n general este folosit pentru mutarea focusului ntre dou formulare care se afl n execuie.

    Exemplu. Forms("form1").SetFocusAceast instruciune va ceda cursorul (focus) formularului form1, evident cu condiia ca acesta s

    fie deschis (obiectul Forms recunoate numai formularele care sunt deschise!).

    II.2.2.1.e) Obiectele sec iunilor formularului: Detail, Form_Header, Form_Footer

    Toate aceste seciuni ale formularului au aceleai proprieti i evenimente. Pagina deDate, evident,nu are proprieti.

    Configurarea acestor obiecte este puin uilizat n practica proiectrii formularelor. Singuraproprietate mai folosit este Back Color prin care se stabilete culoarea de fundal a unei seciuni.

    II.2.2.1.f) Referirea Subformularelor i a controalelor sale

    Un Subformular este un obiect inclus ntr-un formular, care conine: Proprieti specifice, ce pot fi referite dup schema uzual.De exemplu: MsgBoxMe.SF.RecordSource va afia numele tabelei legate de Subformularul cu

    numele SF, ce se gsete n formularul n al crui cod se afl instruciunea. Controale, a cror referire se face prin utilizarea unei proprieti specifice unui Subformulari

    anume FORM.

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    26/73

    II-26

    De exemplu, dac n formularul deschis DesX, exist un Subformularcu numele SFm, n careexist un control text box TBB, atunci introducerea unei valori n acest control printr-o instruciune aflat

    n modulul general de cod va fi: Forms!DesX!SFm.Form!TBB=100

    II.2.2.2. Obiectul Control Text_Box (caseta de text)

    Cele mai utilizate tipuri de controale, folosite n proiectarea formularelor (ca i a rapoartelor) suntprezentate n continuare prin prisma proprietilor, metodelor i evenimentelor lor.

    Text Box este cel mai utilizat control folosit att n formulare ct i n

    rapoarte. Este un control care se poate lega la un cmp al unui tabel. Reprezint practic o caset n care se vor vizualiza datele din cmpul de care este legat,permind actualizarea acestora. De obicei este nsoit de un control label (etichet), n care se vaspecifica ce reprezint datele din TextBox.

    II.2.2.2.a) Propriet i le controlului Text Box

    Prezentm n continuare proprietile cele mai utilizate ale acestui control, cu observaia c exist oserie de proprieti pe care le-am mai studiat anterior (la obiectul Form).

    Pagina FORMAT

    Pagina de Format conine proprietile prin care se configureaz formatul i stilul textului din

    caset. Font Name Felul fontei, adic tipul de liter folosit. Fontele care accept diacriticele romnetisunt cele cu terminaia 'CE'. (Alt font care accept caractere romneti este i 'MS Sans Serif'.)

    Pentru a se putea lucra cu diacritice romneti, tastatura trebuie setat corespunztor, pentru a doualimb, n Control_Panel | Keyboard.

    Fore Color Culoarea fontei. Font Size Mrimea n pixeli a fontei. Font Weight Grosimea fontei Font Italic Litera aplecat. Font Underline Subliniere. Text Align Alinierea textului n csu Border Style, Border Color, Border Width Se

    folosesc pentru configurarea marginii controlului. Special EffectStabilete un tip standardizat de margine pentru control.

    Uneori setarea acestei proprieti are efect i asupra celor treiproprieti de mai sus. Exist 6 tipuri:

    Flat plat; Raised n relief; Sunken ngropat; Etched poansonat, zgriat;

    Shadowed cu umbr; Chiseled subliniat. Back Color Culoarea fundalului. Back Style Dac fundalul este sau nu transparent. n cazul transparenei se va vedea obiectul

    de sub control, de obicei culoarea seciunii n care se gsete acesta.

    n bara de meniu, n format, exist dou proprieti, care atunci cnd sunt activate vor seta toateobiectele selectate n momentul respectiv, n felul urmtor:

    Bring to Front aduce obiectele la suprafa; Send to Back duce obiectele la fund;Prin aceste proprieti se poate stabili cum "se vd" obiectele suprapuse.

    Aceast proprietate poate fi folosit pentru a se marca explicit care este controlul n care se gsetecursorul (este activ). Aceasta se va realiza prin folosirea unei culori unice pentru controlul activ. Pentru

    aceasta se procedeaz astfel: Se face controlul cu Back Color culoarea controlului activ (de exemplu verde) iBack Style

    transparent.

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    27/73

    II-27

    Se creeaz un control grafic, Rectangle, "umplut" cu culoarea pe care vrem s o aib controlul(de exemplu galben) i de dimensiunile acestuia, care se aeaz dedesubt.

    n felul acesta controlul fiind transparent, va avea culoarea dreptunghiului de dedesubt (galben), iarcnd va primi focusul, culoarea setat pentru el (verde).

    Toate proprietile prezentate mai sus se pot configura direct de pe bara cu pictograme"Formatting".

    Format n csua de text avem o dat de tipul cmpului de care controlul este eventual legat.

    Avem posibilitatea s alegem ntre mai multe tipuri de afiare specifice tipului respectiv de dat. Deasemenea acesta se poate crea i cu caracterele specifice de construire a formatelor.

    Decimal Places Numrul de zecimale al datelor de tip numeric. Visible Permite ca un control construit s poat fi fcut vizibil sau nu, n funcie de un anumit

    context. Scroll Bars Exist posibilitatea ca acest control s poat conine mai multe linii de date. n

    acest caz este indicat s i se ataeze bara derulant vertical. Can Grow, Can Shrink Permite ajustarea controlului pe vertical, n cazul n care n control

    sunt un numr variabil de linii.

    Aceste proprieti sunt valabile numai la tiprire nu i la afiarea pe ecran. Deci ele sunt folosite n

    special la rapoarte. Left, Top, Width, Height Poziia (relativ la seciunea unde se gsete) i mrimea controlului

    pe ecran, dat n cm sau inches, n funcie de cum e setat unitatea de msur n Windows. Ele se vorcompleta automat n momentul n care se va "aeza" pe ecran controlul.

    Access folosete i celelalte setri din Widows | Control Panel | Regional Settings ca punctulzecimal, formatul pentru ori dat, perioada anului din 2 cifre etc.

    Unitile de msur folosite n Access sunt: Pixel unitate dependent de rezoluia ecranului. Inches sau Cm n funcie de setarea din Windows. Se folosete de obicei n paginile de

    proprieti 1 Inch=2,54 cm.

    Punct 72/ inch Twips 1440/inch, 567/cm, 20/punct.Se folosesc cnd se introduc prin VBA dimensiuni pentrucontroale.

    Pagina DATA

    Control Source Numele cmpului (din tabela sau cerereaataat la formular sau raport) de care se leag controlul. Este cea maiimportant proprietate a controlului.

    Este posibili legarea controlului de o expresie (cmp calculat).Pentru aceasta se va pune la ControlSource. n felul acestase pot introduce calcule cu cmpurile din nregistrare, se pot folosi

    funcii standard sau utilizator (publice, din obiectul Module) sau chiarfuncii agregate de domeniu cu date din alte tabele.Exemplu. Avem un formular care n zona deDetail are dou controalelegate, Pret i Cantitate i un control Valoare, care la Control Sourceare: =[Pret]*[Cantitate]. n acest fel mereu vom avea n controlul Valoare produsul datelor din celelaltedou controale, care la rndul lor vor avea valorile cmpurilor din nregistrrile tabelei ataate.

    De asemenea putem lucra cu controale nelegate (unbound). n acest caz de obicei vom introducedate n control prin cod VBA, prin proprietatea dinamic (nu se poate seta dect cnd formularul este nexecuie) Value, care este implicit (dac nu se specific explicit nici o proprietate atunci cea implicit Value va fi folosit). Aceast proprietate esteInput/Output.

    n faza de proiectare, n interiorul controlului este afiat valoarea proprietii Control Source. Input Mask, Default Value, Validation Rule, Validation Text Funcioneaz la fel ca la

    proprietilor tabelelor. Dac nu se completeaz se preiau setrile fcute cmpului respectiv la creareatabelei. Dac se seteaz n formular aceste proprieti atunci acestea sunt valabile numai n acest obiect(formular), nemodificndu-se proprietile tabelei.

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    28/73

    II-28

    LaDefault Value, Validation Rule, Validation Textputem s ne referim i la alte nume de obiecteaccesibile, spre deosebire de tabele n care nu puteam s ne referim la alt cmp.

    Enabled, Locked: Permisiunea de intrare n control, respectiv de modificare a datelor din el.Deci exist posibilitatea s se creeze controale Read Only (numai citete). Sunt mai multe posibiliti:

    DacEnabled = YesiLocked = No putem s intrm n control (poziionez cursorul n control)i s modificm datele din el;

    DacEnabled =No nu putem s plasm cursorul n control (evident nici s modificm); Dac Enabled = Yes i Locked = Yes se poate poziiona cursorul n control dar nu se pot

    modifica datele; DacEnabled = NoiLocked = No (nu are sens) controlul apare ters;

    Pagina OTHER

    Name Nume control. Acesta este numeleobiectului pe care l folosim cnd vrem s ne referim la acestcontrol. Dei nu este obligatoriu este bine ca n cazulcontrolului legat numele lui i al cmpului s fie acelai.

    Status Bar Text Cnd focusul ajunge n control,pe bara de stare (care se gsete n partea de jos a ecranului)va apare textul introdus aici.

    Tab Stop n momentul n care se terminintroducerea datelor ntr-un control, focusul se va poziionape urmtorul control din seciune care are setat aceastproprietate cu Yes.

    Ordinea de parcurgere a controalelor se stabilete princomanda TabOrder.Aceastase gsete n meniul contextualsau n View i permite aezarea controalelor din seciuni nordinea dorit prin "tragere".

    Auto Tab Trecerea de la un control la altul se face cnd: se apas pe tasta sau .

    dacAuto Tab = Yes atunci trecerea la urmtorul control se va face i automatn momentuln care s-au completat toate datele din acesta conform formatului specificat. Astfel dac avem uncontrol legat la un cmp de tip text cu lungimea de 3 caractere, dup introducerea celui de-altreilea caracter, fr s se apese pe sau se va trece automat la urmtorulcontrol stabilit prin ordinea tab.

    Enter Key Behavior Dac aceast proprietate este = New Line in Field, atunci la apsarea lui cursorul se va poziiona pe urmtoarea linie din control, iar trecerea la urmtorul control se va facenumai prin apsarea tastei . Evident proprietatea are sens dac controlul are mai multe rnduri.

    Shortcut Menu Bar Se poate crea un meniu contextual specific pentru control. Acesta se faceprin comanda Customize.

    Control Tip Text Va apare textul introdus n aceast proprietate cnd se poziioneaz mouse-ul deasupra controlului.

    Allow Auto Correct Setat pe Yes, va determinaefectuarea automat a coreciilor textului introdus, conformspecificaiilor stabilite prin meniul Tools | AutoCorrect.

    Proprietile implicite ale controlului Text Box

    Generarea obiectelor dintr-o clas de obiecte se face prinsetarea corespunztoare a proprietilor obiectului i prin ataarea demetode evenimentelor. n momentul n care se creeaz o clas deobiecte se stabilesc practic care sunt proprietile, metodele i

    evenimentele obiectelor care sunt create din aceasta. Obiecteleprovenite dintr-o clas vor avea evident aceleai metode,evenimente i tipuri de proprieti. Ele vor forma o colecie deobiecte, care este privit ca un tablou cu o dimensiune (vector), ncare elementele sunt indexate (de la 0). Crearea controlului Text Box

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    29/73

    II-29

    se face prin generarea acestuia din clasa de obiecte cu acelai nume, prin luarea i plasarea controlului dinToolsBox. n momentul crerii acestui obiect, evident proprietile lui trebuie setate la anumite valori, implicite(default), urmnd ca proiectantul s le personalizeze ulterior n funcie de contextul n care va fi folosit. Acesteproprieti implicite se pot modifica prin acionarea n caseta tab: Default Text Box, care se poate obine prinselecia de pe ToolsBox a controlului i acionarea pictogramei de proprieti.

    Evident la generare, controlul trebuie s primeasc un nume, unic, care va fi constituit din numelecontrolului plus un numr de ordine n cadrul formularului sau raportului unde este plasat.

    Din proprietile implicite mai interesante sunt:

    Auto Labelyes, ataeaz o etichet controlului; Add Colonyes, eticheta se va termina cu dou puncte; Label X, Label Y poziia etichetei fa de control;

    II.2.2.2.b) Proprieti le dinamice ale controlului Text Box

    Proprietile unui obiect pot fi statice i/ sau dinamice.Proprietatea static este proprietatea care se poate modifica cnd formularul este n proiectare, prin

    caseta tab.Proprietatea dinamic este proprietatea care poate fi modificat n momentul cnd obiectul este n

    execuie, n general prin cod VBA, lansat de obicei printr-o procedur eveniment.Majoritatea proprietilor sunt att statice ct i dinamice. Anumite proprieti sunt numai

    dinamice, ele neregsindu-se n caseta tab a controlului.Dintre proprietile dinamice, cea mai important este VALUE. Aceast proprietate este implicit,numele ei putnd fi omis. Ea esteInput/Output, putnd fi deci i cititi scris. Reprezint valoarea carese gsete n control. Dac acesta este legat, aceast valoare se va gsi i n cmpul ataat.

    Dac controlul este calculat, atunci Value nu mai poate fi dect citit. SelLength, SelStart, SelText Se folosesc pentru a manevra cursorul i valoarea din interiorul

    unui control Text Box. Sunt proprietiInput/Output. SelStart reprezint poziia de start a cursorului n control; SelLength reprezint lungimea textului selectat din control; SelText reprezint valoarea textului selectat.

    Exemplu. Urmtoarea secven de instruciuni nlocuiete n controlul UM, primele 3 caractere dac

    sunt "xxx" cu "buc".UM.SetFocus ' plaseaz focusul n cursorMe!UM.SelStart = 0 ' numerotarea ncepe de la 0Me!UM.SelLength = 3 ' selecteaz primele 3 caractere din control _ (0, 1, 2)If Me!UM.SelText = "xxx" Then Me!UM.SelText = "buc"' proprietatea SelText folositi Inputi Output

    II.2.2.2.c) Evenimentele controlului Text Box

    Before Update Acest eveniment se produce dup cea avut loc o modificare a datelor n control, dar care nu estedefinitiv, putnd fi anulat prin setarea parametrului

    procedurii eveniment ataate, Cancel=True. n acest caz, laterminarea procedurii eveniment, focusul rmne n controlpn cnd utilizatorul introduce o alt valoare care nu mai

    produceCancel=True.Acest eveniment se folosete de obicei pentru a executa o

    metod mai complex de verificare a datelor introduse ncontrol, care depete posibilitile oferite de proprietateaValidation Rule.

    After Update Se produce imediat dup evenimentulBefore Update, modificrile fiind acum ns definitive,nemaiputnd fi anulate. Se folosete cnd valoarea introdusaici va furniza datele necesare calculelor din alte controale.

    On Change Se produce dup fiecare tastare n interiorul controlului. On Enteri On Exit Se produc la intrarea i la ieirea din control. Got Focusi Lost Focus Se produc la primirea/ pierderea cursorului n/ din control.

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    30/73

    II-30

    On Click, On Dbl Click, On Mouse Down, On Mouse Up, On Mouse Move Se produc laaciunea respectiv a mouse-ului pe control.

    On Key Down, On Key Up, On Key Press Se produc la aciunea respectiv a tastaturii cndfocusul se gsete n control.

    II.2.2.2.d) Metodele controlului Text Box

    Metodele cele mai folosite sunt: Set Focus plaseaz focusul n controlul text.

    Requery, Recalc acelai efect ca i la metodele similare de la formulare, dar referitoare numaila controlul asupra cruia se aplic metoda.Exemplu. Before Update, After Update, Set Focus

    n formularul de mai sus dorim ca n cmpul "Cantitate" s avem o valoare n intervalul: [10. 000.. 100. 000] dac "UM" = buc;

    [100.. 10. 000] dac "UM" = Kg; [1.. 10] dac "UM" = Tone.Dac "UM"nu e completat corespunztor atunci se va introduce "null"la "Cantitate"i "UM"i se

    va trimite focusul n controlul "UM".Private Sub Cantitate_BeforeUpdate (Cancel As Integer)

    If Me!UM = "buc" ThenIf Me!Cantitate>=10000 And Me!Cantitate

  • 7/29/2019 68534429-VBA-SC3-Extras2-1

    31/73

    II-31

    Me!UM. SetFocus ' Metod a controlului UM, prin care acesta _ preia focusulMsgBox "Completati corect mai intii UM"

    End IfEnd Sub

    II.2.2.3. Obiectul Control Combo_Box (lista ascuns)

    Acest control este asemntor cu TextBox, dar are posibilitatea derulrii unei liste dincare se pot prelua datele care se introduc.

    n momentul cnd ntr-o tabel un cmp a fost creat cu proprietateaLookUp, iar acel cmp e legatntr-un formular la un control Combo Box, proprietile definite n tabel nu trec automat i n formular.Acest lucru se face ns automat dac formularul este creat cu WIZARD-ul de formulare.

    Controlul Combo Box are aceleai proprieti i evenimente ca ale lui TextBox. n plus mai suntproprieti i evenimente, care se refer la lista ascuns.

    II.2.2.3.a) Propriet i le specifice controlului Combo Box

    n pagina DATA sunt:

    Row Source Type Tipul sursei de date care va fi afiat n

    lista derulant.Aici se folosete de obicei: Table/ Query cmpuri din alt tabel sau cerere (sau o

    cerere introdus direct n SQL); Value List list de valori ca n exemplu; Row Source n cazul n care Row Source Type= Table/ Query este numele unei tabele, cereri sau direct o instruciune SQL care genereaz o

    cerere (ca la legarea formularului la o tabel); Value List este o list de valori, separate prin Bound Column Numrul coloanei de legtur (datele din aceast coloan vor fi preluate ca

    valoare pentru control) Limit To List Dac proprietatea este Yes nu se vor putea introduce n control dect datele care

    se gsesc n lista derulant iar dac esteNo, se pot introduce i alte date dect cele din list. Auto Expand Dac proprietate este Yes, atunci se caut i se afieaz cea mai apropiat

    denumire din list care s aib n partea de nceput caracterele introduse n control, pn n acel moment,de la tastatur.

    n pagina FORMAT sunt urmtoarele proprieti:

    Column Count Numrul de coloane care apar ladesfacerea listei.

    Column Head Dac se afieaz sau nu denumirea

    coloanelor. Column Widths Limea coloanelor. Se separ cu . List Rows Numrul de rnduri care se afieaz cnd se desface lista. Dac lista are mai multe

    rnduri dect sunt setate a se afia, vor apare barele de derulare verticale. List Width Limea listei derulante. Dac aceasta este mai mic dect suma tuturor coloanelor

    afiate, vor apare barele de derulare verticale. Setat pe Auto, limea listei va fi la fel ca limeacontrolului ComboBox.

    Toate dimensiunile se dau n unitatea de msur setat n Windows. Aceast caracteristic estegeneral n tot mediulAccess. Reamintim c n VBA, dimensiunile sunt cerute n Twips.Exemplu. ntr-un formular se gsesc dou controale Combo Box, cu numele: CFmi CControl.

    La deschiderea formularului (evenimentul Open) se va introduce n lista ascuns a lui CFm proprietatea RowSource numele tuturor formularelor deschise din acel moment.


Recommended