visual basic-visual basic for aplication.ro

Upload: minca-andrei

Post on 11-Jul-2015

513 views

Category:

Documents


16 download

TRANSCRIPT

CUPRINS VBA - Bazele programarii Instructiunile VBA Operatiuni de intrare-iesire Visual Basic Editor Modele de obiecte Obiecte Microsoft Word Obiectul Application Propriet i (obiectul Application) DisplayScrollBars DisplayStatusBar Height Width WindowState ActiveDocument ActivePrinter ActiveWindow Documents Selection Windows Metode (obiectul Application) Quit Obiectul Document Referirea unui Document Deschiderea documentelor Crearea/salvarea documentelor Activarea unui document Tiprirea unui document nchiderea documentelor Accesarea obiectelor din Document Obiectul Range Obiect Range sau obiect Selection Referin a prin metoda Range Referin a prin proprietatea Range Modificarea unui document Lucrul cu textul din Range Redefinirea unui obiect Range Atribuirea obiectelor Range Obiectul Selection Deplasarea i extinderea selec iei Metoda GoTo Metodele GoToNext, GoToPrevious Obiecte accesibile din Selection Selection propriet i i metode uzuale Proprietatea Text Formatarea textului selectat Returnarea obiectului Range Proprietatea Information Determinarea tipului de selec ie Obiectele Find i Replacement Find ClearFormatting Execute Selection.Find Range.Find Replacement Obiectele Table, Column, Row i Cell Colec ia Tables Obiectul Table Colec ia Columns Obiectul Column Colec ia Rows, obiectul Row Colec ia Cells Obiectul Cell Exemple cu obiectele Table, Column, Row i Cell Utilizarea obiectului HeaderFooter Colec ia Styles Obiectul Style Colec ia CommandBars Colec ia Dialogs Cmpuri adugare, editare Verificarea unui obiect Modificarea comenzilor Word Lucrul cu evenimente Evenimente pentru Document Evenimente pentru Application Evenimente pentru ActiveX Auto Macro Automatizarea aplica iilor Automatizarea Word din alt aplica ie Automatizarea altei aplica ii din Word Comunicarea cu obiectele scufundate Controale ActiveX si Dialoguri Proiectarea casetelor de dialog utilizator Crearea unui nou dialog Scrierea procedurilor de rspuns la evenimente Controale Label TextBox ListBox ComboBox CheckBox OptionButton ToggleButton CommandButton TabStrip MultiPage Frame

1

Image Utilizarea dialogurilor utilizator Afiarea unui dialog Ob inerea/editarea propriet ilor n execu ie Utilizarea controalelor n documente Word, Excel, PowerPoint Controale ActiveX n documente Word Controale ActiveX n foi de calcul Excel Controale ActiveX n diapozitive PowerPoint Controlarea programatic a controalelor din documentele aplica iilor Obiecte Microsoft Excel Obiectul Application Obiectul Workbook Deschiderea unui Workbook Metoda GetOpenFilename Crearea/salvarea unui Workbook Metoda Add (colec ia Workbooks) Metoda SaveAs Metoda Save Metoda GetSaveAsFilename nchiderea unui Workbook Metoda Close Obiectul Range Referin e de tip A1 sau nume de domeniu Utilizarea indicilor de linii i coloane Utilizarea propriet ii Offset Utilizarea propriet ilor CurrentRegion i UsedRegion Parcurgerea unui domeniu de celule Utilizarea instruc iunii For EachNext Utilizarea instruc iunii DoLoop Utilizarea propriet ii Address Evenimentele din Excel 97 Permiterea i inhibarea evenimentelor Utilizarea evenimentelor Evenimentele obiectului Worksheet Exemplu Evenimentele obiectului Chart Exemplu Evenimentele obiectului Workbook Exemplu Evenimentele obiectului Application Utilizarea modulelor clas cu evenimente

Obiecte Microsoft Access Obiectele accesibile n Microsoft Access Obiectele Microsoft Access Obiectul Application Utilizarea obiectului Application n automatizare Colec ia Forms Referirea la un obiect Form Propriet ile obiectului Form Proprietatea Me (obiectul Form) Proprietatea Section (obiectul Form) Proprietatea Properties (obiectul Form) Proprietatea Module (obiectul Form) Proprietatea RecordSource (obiectul Form) Module ataate formelor Crearea formelor n timpul execu iei Colec ia Reports Referirea obiectelor Report Module asociate rapoartelor Crearea rapoartelor n timpul execu iei Func iile CreateForm, CreateReport Func iile CreateControl, CreateReportControl Exemplu de creare a unui raport Colec ia Controls Controale Microsoft Access Controale ActiveX Referirea obiectelor Control Propriet ile obiectului Control Proprietatea Hyperlink (obiectul Control) Proprietatea ControlType (obiectul Control) Controale legate de date (DataBound Controls) Controale care au o colec ie Controls Colec ia Modules Referirea la obiecte Module Module standard i module clas Propriet ile obiectului Module Determinarea numrului de linii Lucrul cu procedurile Metodele obiectului Module Adugarea de text la un modul Evenimentele unui modul clas Colec ia References Referirea obiectelor Reference

2

Propriet ile obiectului Reference Metodele colec iei References Stabilirea unei referin e n Visual Basic Obiectul DoCmd Metoda OpenForm Metoda RunCommand Obiectul Screen Propriet ile obiectului Screen DAO (Data Access Objects) Lucrul cu obiectele DAO Proiectarea bazelor de date n Microsoft Access Stabilire unei referin e la biblioteca de obiecte DAO Referirea obiectelor DAO n Visual Basic Adugarea de noi obiecte DAO la o colec ie Lucrul cu date externe Utilizare DAO cu surse de date ODBC Utilizare Dao cu Microsoft Jet Obiectul DBEngine Colec ia Workspaces Metoda CreateWorkspace Colec ia Errors Colec ia Databases Colec ia TableDefs Colec ia Fields Colec ia Indexes Colec ia QueryDefs Colec ia Parameters (obiectul QueryDef) Colec ia Relations (obiectul Database) Colec ia Recordsets Obiecte Recordset de tip tabel Obiecte Recordset de tip dynaset Obiecte Recordset de tip snapshot Obiecte Recordset de tip forward-only Metodele obiectelor Recordset Securitatea datelor Colec ia Properties Accesarea datelor ODBC Utilizarea Microsoft Jet pentru date ODBC Utilizarea ODBCDirect pentru date ODBC

nregistrarea unei surse de date ODBC Utilizarea DAO cu ODBCDirect Obiectul DBEngine Colec ia Workspace Colec ia Connections Deschiderea conectrilor asincrone Colec ia Databases Comutarea ntre Connection i Database Colec ia QueryDefs Executarea interogrilor asincrone Colec ia Parameters Colec ia Recordsets Obiecte Recordset de tip dinamic Deschiderea asincron a obiectelor Recordset Colec ia Fields Utilizare ODBCDirect Utilizarea actualizrii optimiste n lot Tratarea coliziunilor Utilizarea cursoarelor n spa iile ODBCDirect Caracteristicile cursoarelor Cursoare client-side sau server-side Alegerea tipului de cursor Blocarea nregistrrilor Limitri ale cursoarelor Regsirea mul imilor multiple de rezultate Lucrul cu proceduri memorate Obiecte Microsoft PowerPoint Obiectul Application Returnarea unui obiect Application Controlul aspectului ferestrei aplica iei Controlarea atributelor i comportrii globale Accesarea principalelor obiecte Accesarea obiectelor partajate de Ms Office Obiectul Presentation Returnarea obiectului Presentation Deschiderea unei prezentri Crearea unei prezentri Importul dintr-un outline Word Activarea unei prezentri

3

Numerotarea i dimensiunile slide-urilor Stabilirea unui aspect unitar Tiprirea unei prezentri Salvarea unei prezentri nchiderea unei prezentri Configurarea i executarea unei prezentri Accesul la diapozitivele prezentrii Obiectele Slides, Slide i SlideRange Returnarea colec iei Slides Returnarea unui obiect Slide Returnarea unui obiect SlideRange Adugarea unei diapozitiv Stabilirea fundalului i schemei de culori Alegerea unui layout Adugarea de obiecte Ordinea diapozitivelor Stabilirea efectelor tranzi iei Referirea notelor Obiectul Selection Crearea unei selec ii Returnarea unei selec ii Returnarea unui obiect din selec ie Obiectele View i SlideShowView Prezentri, ferestre, viziuni Returnarea obeictelor View i SlideShowView Navigarea printre diapozitive Alipirea la un obiect View Controlul viziunii din fereastra documentului Returnarea diapozitivului curent Controlul obiectelor n slide show Controlul anima iei Rspunsul la ac iunea mouseului Controlul unui clip Meniuri si bare de unelte Modificarea interfe ei cu utilizatorul Dialogul Customize Visual Basic Domeniul schimbrilor asupra interfe ei utilizator Microsoft Access Microsoft Excel

Mutarea unui element din spa iul de lucru n caiet Eliminarea unui meniu/toolbar salvat n caiet Microsoft Word Microsoft PowerPoint Componente ale interfe ei utilizator Sistemul de meniuri Adaptarea sistemului de meniuri Componente personale i componente built-in Utilizarea submeniurilro Utilizarea meniurilor contextuale Text box, List box, Combo box Modificarea n design-time Adugarea de bare de meniu proprii Adugarea meniurilor Adugarea submeniurilor Adugarea i gruparea comenzilor Adugarea i modificarea meniurilor contextuale tergerea componentelor de meniu Restaurarea componentelor built-in Modificarea n run-time Afiarea unei bare de meniu Afiarea dinamic a componentelor de meniu Permiterea i inhibarea componentelor de meniu Indicarea strii unei intrri de meniu Redenumirea unei intrri Bare de unelte Adaptarea barelor de unelte Utilizarea meniurilor Text box, List box, Combo box Modificarea barelor de unelte n design-time Adugarea unei bare de unelte Adugarea i gruparea controalelor Adaugarea i ini ializarea controalelor text box, list box, combo box Eliminarea unui control Restaurarea barelor de unelte built-in Modificarea barelor de unelte n run-time

4

Afiarea/ascunderea controalelor i barelor de unelte Mutarea i redimensionarea barelor de unelte Restaurarea barelor de unelte built-in Permiterea i interzicerea accesului la controale Indicarea strii activ/inactiv a unui buton Modificarea controalelor Text box, List box i Combo box ID-uri de controale i intrri de meniu Forme grafice Obiectele Shape, ShapeRange i Shapes Returnarea colec iei Shapes Returnarea obiectului Shape Returnarea colec iei ShapeRange Desenarea unei forme grafice Editarea unei forme grafice Determinarea propriet ilor/metodelor adecvate Lucrul cu obiecte OLE Lucrul cu mai multe forme Construirea unui obiect ShapeRange Lucrul cu colec ia ShapeRange Tratarea erorilor. Depanarea programelor Cum se gestioneaz erorile Proiectarea unei rutine de tratare a erorilor Stabilirea capcanei de erori Scrierea unei rutine de tratare a erorilor Ieirea din rutina de tratare a erorilor Diferen a dintre Resume i Resume Next Reluarea execu iei la o linie specificat Ierarhia de tratare a erorilor Cutarea n lista de apeluri Indica ii pentru o tratare complex a erorilor Testarea tratrii erorilor prin generarea de erori Definirea codurilor proprii de eroare Tratarea inline a erorilor Returnarea numerelor de eroare

Tratarea erorilor n procedura apelant Utilizarea datelor de tip Variant Tratarea centralizat a erorilor Inhibarea tratrii erorilor Depanarea programelor care au rutine de tratare a erorilor Tratarea erorilor din obiectele referite Tratarea erorilor transmise din obiectele referite Depanarea tratrii erorilor din obiecte referite Depanarea programelor Tipuri de erori Unelte de depanare Bara de unelte Debug Evitarea "bug"-urilor Design Time, Run Time i Break Mode Utilizarea ferestrelor de depanare Utilizarea modului break Intrarea n modul break la o instruc iune cu probleme Fixarea unei erori run-time i continuare Monitorizarea datelor prin expresii de urmrire Adugarea, editarea sau eliminarea unei expresii urmrite Utilizarea urmririi rapide Utilizarea unui punct de oprire Utilizarea instruc iunii Stop Executarea unor secven e de cod selectate Utilizarea comenzii Step Into Utilizarea comenzii Step Over Utilizarea comenzii Step Out Trecerea peste sec iuni de cod Stabilirea instruc iunii urmtoare Indicarea instruc iunii urmtoare Monitorizarea listei de apeluri (Call Stack) Testarea datelor i procedurilor cu fereastra Immediate Tiprirea informa iilor n fereastra Immediate Tiprirea din codul aplica iei Tiprirea din fereastra Immediate Atribuirea de valori Testarea procedurilor cu fereastra Immediate Verificarea numerelor de eroare

5

Trucuri utile n fereastra Immediate Considera ii speciale Oprirea execu iei n procedurile evenimentelor MouseDown sau KeyDown Oprirea execu iei n procedurile evenimentelor GotFocus sau LostFocus Distribuirea solutiilor VBA pentru aplicatiile Microsoft Office Pregtirea solu iei pentru distribuire Alegerea modului de mpachetare a solu iei Controlul ncrcrii ncrcarea la start ncrcarea automat n Excel ncrcarea automat n PowerPoint ncrcarea add-in-urilor din sesiunea precedent ncrcarea programatic ncrcarea ca rspuns la un eveniment ncrcarea unui template prin linia de comand Descrcarea programatic ncrcarea la cerere Utilizarea referin elor explicite n Excel ncrcare unei biblioteci n Excel Adugarea meniurilor Excel fr add-in ncrcarea la cerere n PowerPoint

ncrcarea la cerere din Word Codul executat la ncrcare/descrcare Excel evenimentele AddinInstall i AddinUninstall PowerPoint procedurile Auto_Open i Auto_Close Word procedurile AutoExec i AutoExit Verificarea final a codului Referin e la ActiveWorkbook sau ActiveDocument Apelul procedurilor din alte proiecte Evitarea referin elor nerezolvate PowerPoint apelul unei rutine fr referin Referin e legate trziu Protejarea codului Salvarea solu iei ca un Add-in sau Global Template Crearea unui Add-in n Excel Crearea unui Add-in n PowerPoint Crearea unui template global n Word Depanarea unui Add-in sau Global Template Depanarea unui add-in n Excel Depanarea unui add-in n PowerPoint Depanarea unui template global n Word Distribuirea solu iilor prin Setup Wizard

6

1. BAZELE PROGRAMRII Visual Basic for Application (VBA) Tipuri de date Variabilele i constantele utilizate ntr-un program VBA pot avea diverse tipuri, specifice datelor memorate. Spre deosebire de alte limbaje de programare, exist un tip universal tipul Variant , care poate con ine aproape orice alt tip de date. Acest tip este asignat n mod implicit tuturor variabilelor nedeclarate altfel, nct declararea explicit poate fi utilizat atunci cnd se dorete economisirea memoriei (tipul Variant aloc mai mult memorie), vitez n execu ie sau atunci cnd se scriu date ntr-un fiier n acces direct. Boolean Domeniu de valori: True sau False (valorile logice) Memorie: 2 bytes Declarator de tip: Observa ii. Convertirea valorilor numerice la tipul Boolean: 0 produce False, valorile nenule produc True. Convertirea valorilor de tip Boolean la alte tipuri numerice: False devine 0, True devine -1. Domeniu de valori: 0255 (numere ntregi, fr semn) Memorie: 1 byte Declarator de tip: Observa ii. Currency Domeniu de valori: -922 337 203 685 477.5808 922 337 203 685 477.5807 Memorie: 8 bytes Declarator de tip: @ Observa ii. Utilizate pentru calcule bneti (sau alte situa ii n care precizia este foarte important). Valorile sunt memorate n format ntreg, scalate prin 10 000, pentru a ob ine 15 cifre la partea ntreag i 4 cifre la partea zecimal (reprezentare n virgul fix). Domeniu de valori: 1 ianuarie 100 31 decembrie 9999, 0:00:00 23:59:59 Memorie: 8 bytes Declarator de tip: Observa ii. Informa iile de tip dat calendaristic i/sau timp orar sunt memorate drept numere flotante, partea ntreag reprezentnd data calendaristic, partea frac ionar reprezentnd timpul. La convertiri, miezul nop ii este 0, miezul zilei este .5, numerele negative reprezint date nainte de 30 decembrie 1899. Poate fi atribuit ca valoare de tip date orice literal care reprezint o dat calendaristic recunoscut ca atare, literalul trebuind s fie cuprins ntre simboluri #, de exemplu #1 Jan 99#. Domeniu de valori: (vezi observa iile) Memorie: 12 bytes Declarator de tip: Observa ii. Valorile de tip Decimal sunt memorate ca ntregi fr semn nso i i de un factor de scal, ntre 0 i 28, specificnd numrul de zecimale. Pentru scala=0 (fr parte zecimal), cea mai mare valoare posibil este +/-79,228,162,514,264,337,593,543,950,335. Cu scala=28 cea mai mare valoare este +/7.9228162514264337593543950335 iar cea mai mic valoare nenul este +/0.0000000000000000000000000001. Not: Deocamdat, tipul Decimal poate fi utilizat doar ca subtip n Variant, adic nu se pot declara variabile ca fiind de tip Decimal. Acestea pot fi create ca Variant cu subtipul Decimal prin func ia Cdec (func ia for eaz o expresie s fie de un tip specificat, din aceeai categorie de func ii fiind i CBool, CByte etc.). Domeniu de valori: numere negative de la -1.79769313486232E308 pn la -4.94065645841247E-324; numere pozitive de la 4.94065645841247E-324 pn la 1.79769313486232E308 (numere flotante n dubl precizie). Memorie: 8 bytes

Byte

Date

Decimal

Double

7

Integer

Declarator de tip: # Observa ii. Domeniu de valori: -32 768 32 767. Memorie: 2 bytes Declarator de tip: % Observa ii. Domeniu de valori: -2 147 483 648 2 147 483 647. Memorie: 4 bytes Declarator de tip: & Observa ii. Domeniu de valori: (vezi observa iile) Memorie: 4 bytes Declarator de tip: Observa ii. Adrese pe 32 de bi i care se refer la obiecte. Prin instruc iunea Set se atribuie unei variabile declarate de tip Object referin a la obiectul dorit. Not. Prin declararea unei variabile de tip Object, referirea la un obiect prin Set produce o ataare trzie (la timpul execu iei run-time binding). Pentru o ataare timpurie (la timpul compilrii compile-time binding) se va utiliza o variabil declarat cu numele clasei respective. Domeniu de valori: numere negative de la -3.402823E38 pn la -1.401298E-45; numere pozitive de la 1.401298E-45 pn la 3.402823E38. Memorie: 4 bytes Declarator de tip: ! Observa ii.

Long

Object

Single

Domeniu de valori: ir de lungime variabil: pn la 2^31 caractere; ir de lungime fix: pn la 2^16 caractere. Memorie: 2 bytes Declarator de tip: $ Observa ii. Un ir de lungime fix declarat Public nu poate fi utilizat ntr-un modul de clas. Variant (default) Domeniu de valori: aceleai cu domeniile specificate la tipurile precedente i care pot fi subtipuri ale tipului Variant, cu men iunea c toate subtipurile numerice au domeniul de la Double. Memorie: n func ie de subtipul valorii: valorile numerice ocup 16 bytes, valorile de tip String necesit 22 bytes plus cte un byte pentru fiecare caracter. Declarator de tip: Observa ii. Este tipul specificat implicit (n lipsa unei declara ii explicite) pentru o constant, variabil, sau argument (caz care, dei nerecomandat, poate elimina erorile provocate de diferen ele de tip ale argumentelor la apelul procedurilor). Cu excep ia datelor de tip String cu lungime fix i a datelor cu tipuri definite de utilizator, tipul Variant poate con ine orice alt tip de dat. n plus poate s con in valorile speciale Empty, Error, Nothing i Null. Tipul considerat pentru o dat con inut ntr-un Variant poate fi determinat cu func ia VarType sau TypeName. Valorile unei variabile Variant pot s-i converteasc valorile automat. n general, datele numerice sunt memorate n tipul de origine, dar este posibil ca ele s fie promovate la tipul superior dac rezultatul unei opera ii necesit acest fapt. De exemplu o valoare declarat ini ial drept Integer i atribuit unui Variant va fi memorat ca un ntreg pn cnd, ridicnd-o de exemplu la o putere, valoarea ei excede domeniul tipului Integer. n acest caz are loc promovarea (ca mod de reprezentare) la tipul superior adecvat (Long sau Double). Dac depirea domeniului are loc pentru subtipurile Currency, Decimal sau Double, atunci se va semnala eroare. Utilizarea tipului Variant permite o tratare mai diferen iat a irurilor de cifre: n opera ii numerice vor fi considerate numere iar n opera ii cu iruri vor fi considerate iruri. Accesul la valorile Variant este mai lent dect accesul la valorile definite prin tipuri explicite.

String

8

Valorile speciale au semnifica ia: o o o Empty este valoarea unui Variant care nu a fost ini ializat. n calcule numerice este considerat 0 iar n opera ii cu iruri este irul de lungime zero. Null este valoarea unui Variant care, n mod programatic, nu con ine date. Error este valoarea utilizat pentru a arta ndeplinirea unei condi ii de eroare (prin convertirea unui real cu func ia CVErr). Procesarea se va efectua de ctre utilizator, tratarea automat a erorilor nu este activat la setarea acestor valori. Nothing este utilizat pentru disocierea unei variabile de tip Object de un obiect efectiv.

o

Tipuri definite de utilizator Un tip de dat definit de utilizator reprezint echivalentul unei nregistrri dintr-un fiier (baz de date), adic o grupare de entit i de tipuri diferite. Definirea are loc la nivel de modul, prin instruc iuni Type. Pentru clauzele care apar se va vedea discu ia de la domeniul variabilelor. [Private | Public] Type varname elementname [([subscripts])] As type [elementname [([subscripts])] As type] ... End Type unde varname este numele dat tipului definit, iar prin elementname se definesc componentele tipului. Se pot utiliza i componente de tipuri utilizator deja definite. Componentele pot fi i tablouri, caz n care apar defini iile specifice (vezi declararea variabilelor). Declararea constantelor, variabilelor i tablourilor Nume La denumirea procedurilor, constantelor, variabilelor i argumentelor ntr-un modul Visual Basic se cere respectarea urmtoarelor reguli: primul caracter trebuie s fie o liter; nu se utilizeaz spa iu, punct (.), semnul exclamrii(!), sau caracterele @, &, $, # lungimea denumirii nu poate depi 255 de caractere; la acelai nivel de existen nu pot s existe denumiri identice. Pot s existe totui, n acelai modul, o variabil privat i o variabil la nivel de procedur care s poarte acelai nume.

n general, nu se recomand definirea unor denumiri identice cu nume de func ii, instruc iuni sau metode existente n Visual Basic. Dac s-a ajuns totui la aceast situa ie, atunci utilizarea func iei intrinseci limbajului, a instruc iunii sau metodei care intr n conflict cu un nume asignat necesit calificarea ei n raport de biblioteca asociat. De exemplu, VBA.Left este apelul la func ia Left atunci cnd este definit de utilizator i o variabil Left. Not. Visual Basic nu este case-sensitive, deci denumirea unei entit i nu are ca atribut distinctiv capitalizarea literelor, dar mediul de programare VBA pstreaz capitalizarea din instruc iunea unde este definit un nume. Declararea constantelor

9

Definirea unei constante se realizeaz prin instruc iunea Const, n care se poate specifica tipul, domeniul i valoarea constantei. Valoarea unei constante nu se poate schimba programatic. [Public | Private] Const constname [As type] = expression Public cuvnt cheie, op ional, utilizat la nivel de modul pentru a declara constante recunoscute n toate procedurile din toate modulele. Nu este permis n proceduri. Private cuvnt cheie, op ional, utilizat la nivel de modul pentru a declara constante recunoscute n toate procedurile din modulul n care apare declara ia. Nu este permis n proceduri. constname numele constantei (obligatoriu). type tipul constantei: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (nc nu este suportat), Date, String, sau Variant. Fiecare constant presupune o clauz As type proprie; n lipsa clauzei se va ataa automat tipul cel mai apropiat expresiei. expression combina ie de identificatori, constante, operatori (cu excep ia Is) care produce un sir, numr sau obiect. Nu se pot utiliza variabile, func ii utilizator sau func ii VBA predefinite. n mod implicit, constantele sunt private. La nivel de procedur, sau de modul clas, domeniul lor nu poate fi modificat prin utilizarea clauzei Public. La nivel de modul standard vizibilitatea poate fi modificat prin Public. Constantele declarate n proceduri Sub, Function sau Property sunt locale procedurii, constantele declarate n afara unei proceduri este definit n modulul respectiv. Mai multe declara ii de constante pot fi scrise pe o aceeai linie, separate prin virgule la nivel de atribuiri de expresii. n acest caz, cuvintele Public sau Private care apar se aplic ntregii linii. Exemple Const NrLinii = 15 Public Const MesajInitial = "Tastati numarul de linii" Private Const NrLinii as Integer = 15 Public Const NrLinii = 15, Pondere as Single = 1.21 Este de remarcat c, n ultima linie, doar Pondere este de tip Single, n timp ce NrLinii este de tip Integer (n lipsa clauzei As type se atribuie tipul expresiei). Declararea variabilelor Variabilele, simple sau tablou, se definesc prin instruc iunile Dim, Private, Public, ReDim sau Static. Numele unei variabile trebuie s respecte regulile generale de formare a identificatorilor, tipul variabilei poate fi definit explicit (prin clauza As type) sau implicit (ca Variant). n cazul n care modulul con ine instruc iunea Option Explicit cu sintaxa Option Explicit

10

i care trebuie s apar naintea oricrei proceduri din modul, toate variabilele trebuie s fie declarate prin instruc iunile men ionate. Lipsa instruc iunii Option Explicit permite ca variabilele s fie definite acolo unde este nevoie de ele prin simpla men ionare a unui nou identificator, tipul lor fiind stabilit implicit. Aceast ultim posibilitate poate produce erori greu detectabile. Sintaxa instruc iunilor de declarare a variabilelor este urmtoarea i se observ asemnarea clauzelor. Dim [WithEvents] varname[([subscripts])] [As [New] type] Private [WithEvents] varname[([subscripts])] [As [New] type] Public [WithEvents] varname[([subscripts])] [As [New] type] Static varname[([subscripts])] [As [New] type] ReDim [Preserve] varname(subscripts) [As type] varname numele variabilei (obligatoriu). subscripts dimensiunile tabloului de date (dac se declar o variabil tablou). Pot exista pn la 60 de indici, separa i prin virgule, declararea dimensiunilor pentru un indice fiind de forma [lower To] upper Limita inferioar este, implicit, 0, dar poate fi controlat prin instruc iunea Option Base. Dac nu se indic limitele indicilor (dar parantezele sunt prezente), se definete o variabil tablou dinamic (nu i prin Static) ale crei dimensiuni pot fi precizate/redefinite prin instruc iunea ReDim. New permite crearea implicit a unui obiect (atunci cnd se declar o variabil de tip obiect). O nou instan a obiectului este creat la prima referin a variabilei definite. Clauza nu poate s apar la declararea variabilelor de tipuri intrinseci i nici la declararea instan elor obiectelor dependente. type tipul variabilei definite: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (nesuportat nc), Date, String (pentru iruri cu lungime variabil), String * length (pentru iruri cu lungime fix), Object, Variant, tip utilizator sau tip de obiect. Dac se definesc mai multe variabile ntr-o instruc iune, defini iile se separ prin virgul iar clauza de tip nu este extins i la variabilele definite ulterior. Dei toate instruc iunile permit declararea unor variabile (simple sau tablou), fiecare instruc iune are un efect distinct n ceea ce privete vizibilitatea variabilelor i persisten a valorilor. Dim definete variabile att la nivel de modul ct i la nivel de procedur. Variabilele definite la nivel de modul sunt accesibile n procedurile acelui modul, iar variabilele de la nivel de procedur sunt vizibile doar n procedura respectiv. Private este utilizat la nivel de modul pentru a declara variabile accesibile doar n procedurile acelui modul. Public este utilizat pentru a declara variabile accesibile n toate procedurile din toate modulele i din toate aplica iile. Prin includerea instruc iunii Option Private Module este posibil ca variabilele publice s fie vizibile doar n proiectul n care sunt definite. Static este utilizat la nivel de procedur nestatic pentru a declara variabile care i pstreaz valoarea de la o execu ie a procedurii la alta, att timp ct modulul n care apare procedura nu este resetat sau repornit.

11

Variabilele definite prin Static sunt vizibile doar n procedura respectiv. Este de remarcat c se poate defini o ntreag procedur utiliznd clauza Static (vezi definirea procedurilor), caz n care toate variabilele sunt statice. ReDim este utilizat la nivel de procedur pentru realocarea memoriei variabilelor tablou dinamice. Utilizarea clauzei Preserve permite doar modificarea ultimei dimensiuni i pstreaz valorile deja existente. (Pentru detalii vezi i VBA Help).

Exemple Dim x As Double, ColtStanga As Integer Private I, J As Long Static Venit As Currency, NumPren As String Dim Retineri(5) As Currency Public indicatori(10) As Byte Dim matrice(1 To 3, 100 To 200) As String Public fntScris As Font Dim appWD As Word.Application Proceduri Printr-o procedur se n elege, similar altor limbaje de programare, o mul ime de instruc iuni care este identificat printrun nume i care se execut unitar printr-un singur apel. Ar trebui, pentru claritatea programului, ca o procedur s efectueze o prelucrare unitar identificabil n logica programului. Exist trei tipuri principale de proceduri: Sub, Function i Property. Ultimul tip este caracteristic definirii unui obiect i va fi prezentat ulterior. O procedur de tip Sub poate primi i transmite informa ii prin intermediul unor variabile publice sau/i a unor parametri. Numele procedurii nu are ataat nici o valoare. O procedur de tip Function se deosebete prin aceea c numele procedurii are ataat o valoare (valoarea func iei) i poate fi utilizat ca orice alt variabil din proiect. Observa ie. Orice instruc iune executabil trebuie s apar in unei proceduri. Declara iile pot s apar i n afara procedurilor, la nivel de modul. Proceduri Sub Organizarea general a unei proceduri de tip Sub este [Private | Public] [Static] Sub name ([arglist]) [instruc iuni] [Exit Sub] [instruc iuni] End Sub

12

Public, Private, Static determin vizibilitatea procedurii. Public = vizibil pentru toate procedurile i toate modulele (n func ie de Option Private se definete vizibilitatea pentru alte proiecte). Private = vizibil doar pentru procedurile din modulul unde procedura este declarat. Static = arat c toate variabilele locale i pstreaz valorile ntre apeluri. name numele procedurii. arglist lista de argumente, separate prin virgule. Prin instruc iunea Exit Sub se poate iei din procedur i altminteri dect prin linia final. Argumentele se definesc dup sintaxa: [Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue] Optional arat c parametrul nu este obligatoriu. Parametrii op ionali trebuie s fie grupa i la sfritul listei (apari ia clauzei Optional cere ca to i parametrii care urmeaz s aib aceeai clauz). ByVal arat c apelul paramatrului se face prin valoare (orice modificare a valorii transmise nu este regsit dup prsirea procedurii, calculele efectundu-se pe o copie a parametrului). ByRef arat c apelul paramatrului se face prin referin (orice modificare a valorii transmise este regsit dup prsirea procedurii). Acesta este modul implicit de transmitere a parametrilor. ParamArray folosit doar ca ultim argument n list, denot un tablou Optional de elemente de tip Variant. Clauza ParamArray permite definirea unui numr arbitrar de parametri. ParamArray nu poate fi utilizat mpreun cu ByVal, ByRef, sau Optional. varname numele argumentului. Dac este tablou se vor indica parantezele. type tipul parametrului transmis: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal, Date, String (doar lungime variabil), Object, Variant. Pentru parametrii obligatorii (fr Optional) poate fi i un tip definit sau de obiect. defaultvalue definete valoarea implicit pentru argumentele op ionale. Poate fi orice expresie, dar pentru tipul Object se admite doar Nothing. Apelul unei proceduri Sub Pentru a executa o procedur de tip Sub din alt procedur (vezi i discu ia privind vizibilitatea) se men ioneaz, pe o linie separat, numele procedurii urmat sau nu de parametri. Dac este necesar, datorit apelrii unui alt proiect sau modul, atunci apelul este dup modelul: Nume_proiect.Nume_modul.Nume_procedur list de argumente unde lista de argumente poate sau nu s fie inclus ntre paranteze. Argumentele efective sunt separate n list prin virgule i trebuie s respecte ordinea (i tipul) argumentelor din defini ia procedurii. n cazul procedurilor cu multe argumente, dintre care multe op ionale, transferul poate provoca erori de scriere a codului (un argument op ional necesit totui virgula sa, de unde o numrare atent a virgulelor etc.). Pentru asemenea situa ii (n special) se permite i transferul valorilor prin intermediul tehnicii de argumente denumite. Aceasta se realizeaz alctuind lista de argumente, la apelul procedurii, din intrri de forma nume_argument:=valoare_argument

13

separate prin virgule i la care nu mai conteaz ordinea ini ial a argumentelor. Se vor specifica doar parametrii care se transmit efectiv (adic valorile op ionale dorite i toate valorile neop ionale). Pentru apelul unei proceduri se va studia i instruc iunea Call. Proceduri Function O procedur de tip Function este similar, ca defini ie, unei proceduri Sub, dar are particularitatea c returneaz o valoare prin numele su (care se comport deci ca o variabil). [Public | Private] [Static] Function name [(arglist)] [As type] [statements] [name = expression] [Exit Function] [statements] [name = expression] End Function Este de remarcat c se poate ataa un tip numelui func iei (adic valorii func iei) i se va remarca existen a instruc iunilor prin care se atribuie func iei valorile calculate. Valoarea returnat de o func ie poate fi utilizat ntr-o alt expresie prin includerea numelui func iei urmat, ntre paranteze, de valorile efective ale parametrilor. Dac apelul se face prin intermediul instruc iunii Call, valoarea func iei nu poate fi utilizat. n asemenea situa ii se activeaz de fapt doar prelucrrile colaterale (care, pentru claritatea codului, nici nu sunt recomandate). Exemple de proceduri Public Function AriaCilindru (raza, inaltime) As Double Const Pi = 3.14159 cilBaza = Pi*raza^2 cilLaterala = 2*Pi*raza*inaltime AriaCilindru = 2*cilBaza + cilLaterala End Function Sub AriaCilindru (ByVal raza As Single, ByVal inaltime As Single, ByRef cilAria As Double) Const Pi As Single = 3.14159

14

Dim cilBaza As Single, cilLaterala As Single cilBaza = Pi*raza^2 cilLaterala = 2*Pi*raza*inaltime cilAria = 2*cilBaza + cilLaterala End Apelul func iei poate fi ntr-o instruc iune de genul CostTotalPiesa = AriaCilindru (r1, h1) * CostUnitar n timp ce apelul subrutinei poate fi AriaCilindru inaltime:=h1, raza:=r1, cilAria:=AriePiesa Organizarea general a unui proiect VBA Obiectele i prelucrrile necesare realizrii unei aplica ii VBA (presupunnd c se dorete atingerea unui ansamblu coerent de scopuri) sunt gestionate sub forma unui proiect, care are un nume implicit sau dat de utilizator. La un anumit moment pot fi deschise mai multe proiecte, identificabile prin denumirile lor. Deoarece prelucrrile proiectate n VBA sunt ataate documentelor (ac iunilor) unor aplica ii particulare (Word, Excel etc.), proiectele sunt salvate o dat cu documentele pe care le nso esc. Acest fapt nu reduce aria de probleme abordabile ntruct prelucrrile propriu-zise nu sunt limitate la documentul nso it (se poate deschide astfel un document Word alb i s se efectueze orice prelucrare dorit, fr a avea obliga ia de a scrie ceva n documentul deschis). ntr-un proiect VBA sunt identificabile urmtoarele componente: Module standard (denumite ini ial module de cod). Con in declara ii i proceduri generale. Exist de asemenea i module care con in tratarea evenimentelor specifice documentului de care este ataat proiectul. Module de clas. Con in definirea obiectelor create de utilizator. Forme. Con in defini iile dialogurilor din interfa a proiectat de utilizator ca i codul program necesar controlrii dialogurilor. Referin e. ntr-un proiect este men inut lista altor proiecte, care sunt referite n proiectul curent.

Un modul de cod poate ncepe cu o sec iune de declara ii. Prin declara ii n elegem instruc iuni neexecutabile prin care se definesc constante, variabile i proceduri externe. Utiliznd Public, Static, Private se precizeaz i domeniul de vizibilitate a entit ilor definite. Gestionarea (crearea, editarea, tergerea etc.) obiectelor dintr-un proiect se face prin comenzi ale mediului VBA, care este prezentat ntr-o sec iune separat. Domeniul unei variabile, constante sau proceduri Domeniul unei entit i reprezint mul imea instruc iunilor unde poate fi referit acea entitate. Se poate vorbi astfel de vizibilitatea unei entit i. Domeniul este dependent de locul definirii entit ii, de clauzele care apar la definire i de parametrii globali ai proiectului.

15

Not. Este de remarcat c utilizarea unei denumiri n afara domeniului ini ial prefigurat produce, n lipsa instruc iunii Option Explicit, crearea unei noi entit i, fr nici o legtur cu cea precedent, surs de erori greu detectabile. Acesta este motivul pentru care se recomand declararea explicit a tuturor variabilelor. Exist trei tipuri de domenii: o o o la nivel de procedur; la nivel de modul, privat; la nivel de modul, public.

Nivelul procedur O variabil sau constant definit ntr-o procedur este vizibil doar n procedur respectiv. Dac o asemenea entitate trebuie referit i n alte proceduri, atunci declararea ei se va efectua la nivel de modul, sau se va transmite procedurii prin intermediul argumentelor. Nivel de modul, privat Variabilele i constantele definite la nivel de modul (n sec iunea Declarations) sunt Private n mod implicit, adic sunt vizibile doar n modulul respectiv. Utilizarea clauzei Private nu este deci necesar, dar este recomandat. Not. Dac se utilizeaz instruc iunea Option Private Module (n sec iunea Declarations a modulului) atunci variabilele i procedurile publice vor fi vizibile doar n proiectul curent. n lipsa acestei declara ii, procedurile publice (din toate modulele standard sau clas) sunt vizibile n toate proiectele care se refer la proiectul curent. Procedurile, variabilele i constantele publice din alte module (cum ar fi modulele ataate formelor) sunt Private pentru proiectul de defini ie, deci ele nu sunt accesibile proiectelor care se refer la proiectul unde sunt declarate. Nivel de modul, public Variabilele declarate la nivel de modul drept Public sunt vizibile n toate procedurile din proiect. Procedurile sunt publice n mod implicit, cu excep ie procedurilor de tratare a evenimentelor, care sunt Private n mod implicit. A se vedea i nota anterioar. Viata unei variabile Prin via a unei variabile se n elege timpul ct variabila are o valoare. Este evident c valoarea unei variabile se poate modifica pe durata vie ii sale, dar definitoriu este faptul c variabila are o anumit valoare pe ntreaga durat a vie ii sale. La prsirea domeniului, variabila "moare" i nu mai are ataat o valoare. La nceputul execu iei unei proceduri, toate variabilele sunt ini ializate: Variabil numeric ir de lungime variabil ir de lungime fix Variabil Variant Variabile de tip utilizator Variabil Object 0 (zero) "" (ir de lungime zero) Completat cu caracterul Chr(0) (avnd codul ASCII 0) Empty fiecare element este ini ializat separat, potrivit tipului primar Nothing (pn la asignarea unei referin e prin Set)

16

Variabilele care nu sunt modificate i pstreaz valoarea ini ial. Variabilele declarate prin Dim la nivel de procedur au valoare pn la terminarea execu iei procedurii (chiar dac se trece prin apel n alte proceduri). Variabilele declarate prin Static, la nivel de procedur, au aceeai via ca i variabilele declarate la nivel de modul i i pstreaz valoarea pn la terminarea execu iei codului (inclusiv de la un apel la altul). Includerea clauzei Static n instruc iunea Sub sau Function are ca efect declararea tuturor variabilelor definite n procedura respectiv drept variabile statice (deci care i pstreaz valorile ntre apeluri). Variabilele declarate la nivel de modul standard i pstreaz valoarea pe tot timpul execu iei. Variabilele declarate la nivel de modul clas i pstreaz valoarea att timp ct exist o instan a clasei. Diferen a fa de variabilele Static este aceea c memoria este utilizat permanent (nu se elibereaz la prsirea domeniului). Variabile Object Declararea unei variabile de tip obiect se poate efectua prin declararea tipului generic Object Dim myDoc As Object sau specificnd exact numele de clas dintr-o bibliotec de obiecte referit Dim myDoc As Word.Document n primul mod de definire (ca Object) nu se poate efectua la momentul compilrii existen a obiectului, nu se poate verifica utilizarea corect a propriettilor i metodelor obiectului i nu se poate lega aceast informa ie de variabila obiect definit. Ataarea unui obiect este, n acest caz, o legare trzie (late binding) la momentul execu iei i se efectueaz prin instruc iunea Set. Specificarea unei clase la definirea variabilei obiect produce o legare timpurie (early binding) care este mai rapid, se face la momentul compilrii i poate nltura mai rapid erori posibile n utilizarea metodelor i propriet ilor obiectului. Instruc iunea Set are sintaxa: Set objectvar = {[New] objectexpression | Nothing} unde o o o o

objectvar este numele variabilei (sau propriet ii) New permite crearea unei noi instan e a clasei Objectexpression este o expresie constnd n numele unui obiect, alt variabil declarat de acelai tip obiect, sau func ie ori metod care returneaz un obiect de acelai tip obiect Nothing permite deconectarea asocierii cu un obiect specific, elibernd resursele sistem i de memorie utilizate.

n general, atunci cnd se utilizeaz Set pentru a asigna o referin de obiect la o variabil, nu se creeaz o copie a obiectului pentru acea variabil. Este creat doar o referin la obiect. Astfel, mai multe variabile de tip obiect pot s se refere la acelai obiect: orice schimbare a obiectului se va reflecta n toate variabilele care refer obiectul. Utiliznd clauza New se va crea efectiv o copie (instan ) a obiectului. Exemple Prin urmtoarele dou instruc iuni se definete variabila objWord care este legat trziu de o aplica ie Word:

17

Dim objWord As Object Set obhWord = CreateObject("Word.Application") Legarea timpurie se poate efectua prin Dim objWord As Word.Application Este de remarcat c instruc iunea Set apeleaz o func ie care creeaz i returneaz o referin la un obiect ActiveX. Constante predefinite (builtin) Bibliotecile de obiecte din fiecare aplica ie Office furnizeaz o mul ime de constante predefinite, care pot fi utilizate pentru a stabili proprietti sau pentru a transmite argumente ctre propriet i sau metode. Constantele sunt, de regul, grupate n tipuri enumerate care reprezint valorile posibile pentru o proprietate specific. Dei este posibil s se utilizeze valoarea numeric a constantei este recomandat s se utilizeze constanta numit ntruct dezvoltri ulterioare ale mediului Microsoft Office (ca i ale aplica iilor din Visual Studio) tind s pstreze compatibilitatea ntre denumirile constantelor i nu ntre valorile efective. De exemplu se prefer Application.DisplayAlerts = wdAlertAll n loc de Application.DisplayAlerts = -1 pentru a fixa ca Word s afieze toate mesajele de alert la execu ia unei proceduri. Codul scris astfel este i mai explicit. INSTRUC IUNILE VBA Generalit i Exist trei categorii de instruc iuni Visual Basic: instruc iuni de declarare (prezentate la declararea variabilelor) prin care se denumesc i se declar tipul pentru variabile, constante i proceduri; instruc iuni de atribuire (prezentate n continuare) prin care se atribuie valori variabilelor sau constantelor; instruc iuni executabile (prezentate n continuare) care ini iaz ac iuni: execut metode sau proceduri, controleaz fluxul execu iei codului. n mediul de dezvoltare VBA, sintaxa instruc iunilor este verificat automat dup ce se trece la instruc iunea urmtoare (prin Enter). Continuarea instruc iunilor O instruc iune poate s fie scris pe mai multe linii prin utilizarea caracterului de continuare a liniei "_" precedat de un spa iu. De exemplu, crearea prin program a unui tabel ntr-un document Word: ActiveDocument.Tables.Add Range:=Selection.Range, _ NumRows:=3, _

18

NumColumns:= 3 unde, pe lng continuarea liniilor se va remarca utilizarea argumentelor numite la apelul metodei de adugare a unui nou tabel la colec ia de tabele a documentului. Dou instruc iuni pot fi scrise pe o aceeai linie dac sunt separate cu caracterul ":". Etichetarea liniilor O linie poate fi identificat: printr-o etichet: orice nume, care respect regulile generale, care ncepe n prima coloan a liniei i se termin cu caracterul ":" printr-un numr: orice combina ie de cifre, care ncepe n prima coloan a liniei i este unic n modulul respectiv. Identificatorii de linii pot fi utiliza i n instruc iuni de control, desi codul astfel construit nu respect regulile programrii structurate.. Comentarii Textele explicative (necesare documentrii codului) pot fi introduse pe linii separate sau n continuarea liniei de cod. O linie de comentariu ncepe cu un apostrof (') sau cu cuvntul Rem urmat de un spa iu. Comentariul de pe aceeai linie cu o instruc iune se introduce printr-un apostrof urmat de comentariu.

Operatori n formarea expresiilor de diverse tipuri, operatorii sunt cei utiliza i aproape general n limbajele de programare de nivel nalt. Pentru fixarea termenilor i nota iilor sunt totui prezenta i, pe categorii, nso i i, acolo unde este cazul de scurte explica ii. Operatori aritmetici Operator ^ * Semnifica ie Ridicarea la putere nmul irea Observa ii rezultatul este Double sau Variant(Double) cu excep ia: dac un operand este Null, rezultatul este tot Null rezultatul este dat de cel "mai precis" factor, ordinea cresctoare a "preciziei" fiind, pentru nmul ire, Byte, Integer, Long, Single, Currency, Double i Decimal. Dac o expresie este Null, rezultatul este Null. O expresie Empty este considerat ca 0. Pentru excep ii se va studia Help *(operator). rezultatul este, n general, Double sau Variant(Double). Dac o expresie este Null, rezultatul este Null. O expresie Empty este considerat ca 0. Pentru excep ii se va studia Help /(operator). nainte de mpr ire, operanzii sunt rotunji i la Byte, Integer sau Long. Rezultatul este Byte, Variant(Byte), Integer, Variant (Integer), Long, sau Variant(Long). Dac o expresie este Null, rezultatul este Null. O expresie Empty este considerat ca 0. operanzii sunt rotunji i la ntregi i se ob ine restul mpr irii. Rezultatul este Byte, Variant(Byte), Integer, Variant (Integer), Long, sau Variant(Long). Dac o expresie este

/

mpr irea

\

mpr irea ntreag

Mod

Restul mpr irii

19

Null, rezultatul este Null. O expresie Empty este considerat ca 0. + Adunarea numeric sau concatenarea irurilor n general, operanzi numerici produc adunarea, iar operanzi iruri produc concatenarea. n cazul numeric, rezultatul este de tipul cel "mai precis" al operanzilor, ordinea de "precizie" fiind pentru adunare i scdere: Byte, Integer, Long, Single, Double, Currency i Decimal. Deoarece operanzii pot fi orice expresie, pentru o informare complet (de exemplu operanzi Variant) se va studia Help +(operator). operanzii pot fi doar numerici. Rezultatul este de tipul cel "mai precis" al operanzilor, ordinea de "precizie" fiind pentru adunare i scdere: Byte, Integer, Long, Single, Double, Currency i Decimal. Dac o expresie este Null, rezultatul este Null. O expresie Empty este considerat ca 0. Pentru excep ii se va studia Help -(operator).

-

Scderea sau inversarea semnului

Operatori de comparare Rela iile care exist ntre diferite tipuri de entit i se pot eviden ia prin compara ii avnd una dintre formele urmtoare: result = expression1 comparisonoperator expression2 result = object1 Is object2 result = string Like pattern unde result este o variabil numeric expression este o expresie oarecare comparisonoperator este un operator rela ional object este un nume de obiect string este o expresie ir oarecare pattern este o expresie String sau un domeniu de caractere. Operatorii de comparare sunt cei uzuali: < (mai mic), (mai mare), >= (mai mare sau egal), = (egal), (diferit, neegal). Rezultatul este True (dac este adevrat rela ia), False (dac rela ia este neadevrat), Null (dac cel pu in un operand este Null). Operatorul Is produce True dac variabilele se refer la acelai obiect i False n caz contrar. Operatorul Like compar dou iruri cu observa ia c al doilea tremen este un ablon. Prin urmare rezultatul este True dac primul ir operand este format dup ablon, False n caz contrar. Atunci cnd un operand este Null, rezultatul este tot Null. Comportarea operatorului Like depinde de instruc iunea Option Compare, care poate fi:

20

Option Compare Binary, ordinea este cea a reprezentrii interne binare, determinat n Windows de codul de pagin. Option Compare Text, compararea este insenzitiv la capitalizarea textului, ordinea este determinat de setrile locale ale sistemului.

Construc ia ablonului poate cuprinde caractere wildcard, liste de caractere, domenii de caractere: ? un caracter oarecare * oricte caractere (chiar nici unul) # o cifr oarecare (09). [charlist] oricare dintre caracterele enumerate n list, un domeniu de litere poate fi dat prin utilizarea cratimei. [!charlist] orice caracter care nu este n list Observa ie. Pentru a utiliza n ablon caracterele speciale cu valoare de wildcard se vor utiliza construc ii de tip list: [[], [?] etc. Paranteza dreapta va fi indicat singur: ]. Pentru alte observa ii utile se va studia Help Like operator.

Operatori de concatenare Pentru combinarea irurilor de caractere se pot utiliza operatorii & i +. n sintaxa expression1 & expression2 unde operanzii sunt expresii oarecare, rezultatul este de tip String, dac ambii operanzi sunt String de tip Variant(String) n celelalte cazuri Null, dac ambii operanzi sunt Null.

nainte de concatenare, operanzii care nu sunt iruri se convertesc la Variant(String). Expresiile Null sau Empty sunt tratate ca iruri de lungime zero (""). Operatori logici Pentru opera iile logice sunt utiliza i urmtorii operatori, uzuali n programare. Operator And Semnifica ie conjunc ia logic Observa ii Null cu False d False, Null cu True sau cu Null d Null. Operatorul And realizeaz i opera ia de conjunc ie bit cu bit pentru expresii numerice.

21

Eqv

echivalen a logic

Dac o expresie este Null, rezultatul este Null. Eqv realizeaz i compararea bit cu bit a dou expresii numerice, pozi ionnd cifrele binare ale rezultatului dup regulile de calcul ale echivalen ei logice: 0 Eqv 0 este 1 etc. True Imp Null este Null, False Imp * este True, Null Imp True este True, Null Imp False (sau Null) este Null. Operatorul Imp realizeaz i compararea bit cu bit a dou expresii numerice, pozi ionnd cifrele binare ale rezultatului dup regulile de calcul ale implica iei logice: 1 Imp 0 este 0, n rest rezultatul este 1. Not Null este Null. Prin operatorul Not se poate inversa bit cu bit valorile unei variabile, pozi ionndu-se corespunztor un rezultat numeric. Null Or True este True, Null cu False (sau Null) este Null. Operatorul Or realizeaz i o compara ie bit cu bit a dou expresii numerice pozi ionnd bi ii corespunztori ai rezultatului dup regulile lui Or logic. Dac un operand este Null, atunci rezultatul este Null. Se poate efectua opera ia de sau exclusiv i bit cu bit pentru dou expresii numerice [b1+b2(mod 2)].

Imp

implica ia logic

Not Or

nega ia logic disjunc ia logic

Xor

disjunc ia exclusiv

Instruc iuni de atribuire Atribuirea se poate efectua prin instruc iunea Let (pentru valori atribuite variabilelor i propriet ilor), Set (pentru atribuirea de obiecte la o variabil de tip obiect), Lset i Rset (pentru atribuiri speciale de iruri sau tipuri definite de utilizator). Instruc iunea Let Atribuie valoarea unei expresii la o variabil sau proprietate. [Let] varname = expression unde varname este nume de variabil sau de proprietate. Este de remarcat forma posibil (i de fapt general utilizat) fr cuvntul Let. Observa ii. Valoarea expresiei trebuie s fie compatibil ca tip cu variabila (sau proprietatea): valori numerice nu pot fi atribuite variabilelor de tip String i nici reciproc. Variabilele Variant pot primi valori numerice sau String, reciproc nu este valabil dect dac valoarea expresiei Variant poate fi interpretat compatibil cu tipul variabilei: orice Variant poate fi atribuit unei variabile de tip String (cu excep ia Null), doar Variant care poate fi interpretat nuric poate fi atribuit unei variabile de tip numeric. La atribuirea valorilor numerice pot avea loc conversii la tipul numeric al variabilei. Atribuirea valorilor de tip utilizator poate fi efectuat doar dac ambii termeni au acelai tip definit. Pentru alte situa ii se va utiliza instruc iunea Lset. Nu se poate utiliza Let (cu sau fr cuvntul Let) pentru legarea de obiecte la variabile obiect. Se va utiliza n aceast situa ie instruc iunea Set.

22

Instruc iunea LSet Copie, cu aliniere la stnga, un ir de caractere (valoarea expresiei din dreapta) ntr-o variabila de tip String. Deoarece copierea este binar, poate fi utilizat pentru atribuiri ntre tipuri utilizator diferite (rezultatul este impredictibil deoarece nu se face nici o verificare de tipuri/componente ale valorilor de tip record). Sintaxa este LSet stringvar = string LSet varname1 = varname2 unde stringvar, string reprezint variabila de tip String i expresia de acelai tip implicate ntr-o atribuire de iruri. varname1, varname2 sunt denumiri de variabile, de tipuri definite de utilizator (vezi instruc iunea Type) diferite. Zona de memorie alocat celei de a doua variabile este copiat (aliniat la stnga) n zona de memorie a primei variabile. Caracterele care rmn neocupate se completeaz cu spa ii, iar dac zona de unde se copie este mai mare, caracterele din dreapta se pierd (sunt trunchiate). Instruc iunea LSet Copie, cu aliniere la dreapta, un ir de caractere (valoarea expresiei din dreapta) ntr-o variabila de tip String. Sintaxa este RSet stringvar = string Caracterele rmase neocupate n variabil sunt completate ccu spa ii. Instruc iunea RSet nu se poate utiliza (analog lui LSet) pentru tipuri definite de utilizator. Instruc iuni executabile Execu ia unui program are loc, n lipsa oricrui control, instruc iune cu instruc iune, de la stnga la dreapta i de sus n jos. Acest sens poate fi modificat, ntr-o oarecare msur, prin ordinea de preceden a opera iilor n evaluarea expresiilor. Este evident c o asemenea structur simpl nu poate cuprinde toate aspectele programrii i din acest motiv necesitatea structurilor de control a fluxului execu iei. Unele instruc iuni au fost pstrate doar din motive de compatibilitate cu versiunile ini iale ale limbajului, n locul lor fiind preferate structuri mai evoluate sau similare altor limbaje de programare. Instruc iuni de transfer (GoSubReturn, GoTo, OnError, OnGoSub, OnGoTo) Aceast categorie cuprinde instruc iunile prin care controlul execu iei este transferat la o alt instruc iune din procedur. n general, utilizarea acestor comenzi nu produce programe foarte structurate (n sensul programrii structurate) i prin urmare, pentru o mai mare claritate a codului, pot fi nlocuite cu alte structuri de programare. GoSubReturn n cadrul unei proceduri un grup de instruc iuni poate fi organizat ca o subrutin (similar unei proceduri on-line, nenumite) identificat prin linia de nceput. Transferul controlului la acest grup de instruc iuni i revenirea la locul apelului se poate efectua prin GoSubReturn cu sintaxa GoSub line

23

... line ... Return unde line este o etichet de linie sau un numr de linie din aceeai procedur. Pot exista mai multe instruc iuni Return, prima executat produce saltul la instruc iunea care urmeaz celei mai recente instruc iuni GoSub executate. GoTo Realizeaz tranferul controlului execu iei la o linie din aceeai procedur. GoTo line unde line este o etichet de linie sau un numr de linie din aceeai procedur. On Error Permite controlul erorilor prin transferul controlului la rutine de tratare. Observa ie. Este prezentat n sec iunea dedicat controlului erorilor. OnGoSub, OnGoTo Permit o ramificare multipl, dup valoarea unei expresii. Se recomand, pentru claritatea codului, utilizarea structurii Select Case n locul acestor structuri. On expression GoSub destinationlist On expression GoTo destinationlist unde expression este o expresie numeric avnd valoare ntreag (dup o eventual rotunjire) ntre 0 i 255 inclusiv. destinationlist este o list de etichete de linii sau numere de linii, separate prin virgule (elementele pot fi de ambele categorii), din aceeai procedur cu instruc iunea. Dac valoarea expresiei este negativ sau mai mare dect 255 se produce o eroare. Dac valoarea expresiei, fie ea k, este n domeniul rangurilor listei, atunci se transfer controlul la linia identificat de al klea element al listei. Dac valoarea expresiei este 0 sau mai mare dect numrul de elemente din list, transferul se efectueaz la linia care urmeaz instruc iunea On...GoSub sau On...GoTo.

24

Instruc iuni de terminare sau oprire a programului (DoEvents, End, Exit, Stop) Terminarea execu iei programului sau oprirea temporar (pauza) se pot realiza prin instruc iunile enumerate aici. DoEvents Dei nu este o instruc iune VBA ci este o func ie, includerea ei este natural prin aceea c permite cedarea controlului ctre sistemul de operare, care poate astfel s func ioneze n regim de multitasking. Ac iunea poate fi realizat i prin alte tehnici (de exemplu utilizarea unui Timer etc.). Sintaxa este DoEvents( ) Func ia returneaz, n general, valoarea 0. Controlul este redat programului dup ce sistemul de operare a terminat procesarea evenimentelor din coada de evenimente, ca i procesarea tuturor caracterelor din coada SendKeys. Observa ie. Pentru alte observa ii se va studia documenta ia comenzii DoEvents. End Termin execu ia unei proceduri (sub forma prezentat aici) sau indic sfritul codului unei structuri de tip bloc (cum ar fi End Function, End If etc., prezentate la structurile respective). Sintaxa, n ipostaza opririi execu iei, este: End Prin aceast instruc iune, care poate fi plasat oriunde n program, execu ia este terminat imediat, fr a se mai executa eventualele instruc iuni scrise pentru tratarea unor evenimente specifice sfritului de program (Unload, Terminate etc.). Fiierele deschise prin Open sunt nchise i toate variabilele sunt eliberate. Obiectele create din modulele clas sunt distruse, iar referin ele din alte aplica ii la asemenea obiecte sunt invalidate. Memoria este eliberat. Exit Prin instruc iunea Exit, sub una din multiplele ei forme, se ntrerupe o ramur de execu ie (cum ar fi o procedur, o structur iterativ etc.) pentru a se continua nivelul apelant. Sintaxa este Exit Do Exit For Exit Function Exit Property Exit Sub i efectele sunt prezentate la structurile respective. Nu trebuie confundat cu instruc iunea End.

25

Stop Efectul instruc iunii este dependent de modul de execu iei a programului. Dac se execut varianta compilat a programului (fiierul .exe) atunci instruc iunea este similar instruc iunii End (suspend execu ia i nchide fiierele deschise). Dac execu ia este din mediul VBA, atunci se suspend execu ia programului, dar nu se nchid fiierele deschise i nu se terge valoarea variabilelor. Execu ia poate fi reluat din punctul de suspendare. Stop Instruc iunea este similar introducerii unui punct de oprire (Breakpoint) n codul surs. Structuri iterative (Do...Loop, For...Next, For Each...Next, While...Wend, With) Prin intermediul construc iilor de tip bloc prezentate n aceast sec iune se poate repeta, n mod controlat, un grup de instruc iuni. n cazul unui numr nedefinit de repeti ii, condi ia de oprire poate fi testat la nceputul sau la sfritul unui ciclu, prin alegerea structurii adecvate. DoLoop Se vor utiliza structuri DoLoop pentru a executa un grup de instruc iuni de un numr de ori nedefinit aprioric. Dac se cunoate numrul de cicluri, se va utiliza structura ForNext. nainte de continuare se va testa o condi ie (despre care se presupune c poate fi modificat n instruc iunile executate). Diferitele variante posibile pentru DoLoop difer dup momentul evalurii condi iei i decizia luat. Do [{While | Until} condition] [statements] [Exit Do] [statements] Loop sau Do [statements] [Exit Do] [statements] Loop [{While | Until} condition] unde condition este o expresie care valoare de adevr True sau False. O condi ie care este Null se consider False.

26

statements sunt instruc iounile care se repet atta timp (while) sau pn cnd (until) condi ia devine True. Dac decizia este de a nu continua ciclarea, atunci se va executa prima instruc iune care urmeaz ntregii structuri (deci de dup linia care ncepe cu Loop). Se poate abandona ciclarea oriunde n corpul structurii prin utilizarea comenzii Exit Do (cu aceast sintax). Dac apare o comand Exit Do se poate omite chiar i condi ia din enun ntruct execu ia se va termina prin aceast decizie. Structurile Do pot fi inserate (dar complet) unele n altele. O terminare (prin orice metod) a unei bucle transfer controlul la nivelul Do imediat superior. Execu ia structurilor este explicat n tabelul urmtor Do WhileLoop Do UntilLoop DoLoop While DoLoop Until Testeaz condi ia la nceputul buclei, execut bucla numai dac rezultatul este True i continu astfel pn cnd o nou evaluare produce False. Testeaz condi ia la nceputul buclei, execut bucla numai dac rezultatul este False i continu astfel pn cnd o nou evaluare produce True. Se execut ntotdeauna bucla o dat, se testeaz condi ia la sfritul buclei i se repet bucla att timp ct condi ia este True. Oprirea este pe condi ie fals. Se execut ntotdeauna bucla o dat, se testeaz condi ia la sfritul buclei i se repet bucla att timp ct condi ia este False. Oprirea este pe condi ie adevrat.

ForNext Atunci cnd se cunoate numrul de repetri ale unui bloc de instruc iuni, se va folosi structura ForNext. Structura utilizeaz o variabil contor, a crei valoare se modific la fiecare ciclu, oprirea fiind atunci cnd se atinge o valoare specificat. Sintaxa este: For counter = start To end [Step step] [statements] [Exit For] [statements] Next [counter] unde counter este variabila contor (numr repetrile), de tip numeric. Nu poate fi de tip Boolean sau element de tablou. start este valoarea ini ial a contorului. end este valoarea final a contorului. step este cantitatea care se adun la contor la fiecare pas. n cazul n care nu se specific este implicit 1. Poate fi i negativ.

27

statements sunt instruc iunile care se repet. Dac nu se specific, atunci singura ac iune este cea de modificare a contorului de un numr specificat de ori. Ac iunea este dictat de pasul de incrementare i rela ia dintre valoarea ini ial i cea final. Instruc iunile din corpul structurii se execut dac o o counter = 0 sau counter >= end pentru step < 0.

Dup ce toate instruc iunile s-au executat, valoarea step este adugat la valoarea contorului i instruc iunile se execut din nou dup acelai test ca i prima dat, sau bucla ForNext este terminat i se execut prima instruc iune de dup linia Next. Specificarea numelui contorului n linia Next poate clarifica textul surs, mai ales n cazul cnd exist structuri ForNext mbricate. Corpul unei bucle ForNext poate include (complet) o alt structur ForNext. n asemenea situa ii, structurile mbricate trebuie s aib variabile contor diferite. Instruc iunile Exit For pot fi plasate oriunde n corpul unei bucle i provoac abandonarea ciclrii. Controlul execu iei se transfer la prima instruc iune de dup linia Next. For EachNext Similar structurii ForNext, structura For EachNext repet un grup de instruc iuni pentru fiecare element dintr-o colec ie de obiecte sau dintr-un tablou (cu excep ia celor de un tip utilizator). Este util atunci cnd nu se cunoate numrul de elemente sau dac se modific, n timpul execu iei, con inutul colec iei. Sintaxa este: For Each element In group [statements] [Exit For] [statements] Next [element] unde element este variabila utilizat pentru parcurgerea elementelor. Dac se parcurge o colec ie de obiecte, atunci element poate fi Variant, o variabil generic de tip Object, sau o variabil obiect specific pentru biblioteca de obiecte referit. Pentru parcurgerea unui tablou, element poate fi doar o variabil de tip Variant. group este numele colec iei de obiecte sau al tabloului. statements este grupul de istruc iuni executate pentru fiecare element.

28

Execu ia unei structuri For EachNext este 1. Se definete element ca numind primul element din grup (dac nu exist nici un element, se transfer controlul la prima instruc iune de dup Next se prsete bucla fr executarea instruc iunilor). 2. Se execut instruc iunile din corpul buclei For. 3. Se testeaz dac element este ultimul element din grup. Dac rspunsul este afirmatif, se prsete bucla. 4. Se definete element ca numind urmtorul element din grup. 5. Se repet paii 2 pn la 4. Instruc iunile Exit For sunt explicate la ForNext. Buclele ForEach...Next pot fi mbricate cu condi ia ca elementele utilizate la iterare s fie diferite. Observa ie. Pentru tergerea tuturor obiectelor dintr-o colec ie se va utiliza ForNext i nu For EachNext. Se va utiliza ca numr de obiecte colec ie.Count. WhileWend Execut un grup de instruc iuni att timp ct este adevrat o condi ie. Sintaxa While condition [statements] Wend Este recomandat s se utilizeze o structur DoLoop n locul acestei structuri. With Programarea orientat pe obiecte produce, datorit calificrilor succesive, construc ii foarte complexe atunci cnd se numesc propriet ile unui obiect. n cazul modificrilor succesive ale mai multor propriet i ale aceluiai obiect, repetarea zonei de calificare poate produce erori de scriere i conduce la un text greu de citit. Codul este simplificat prin utilizarea structurii WithEnd With. O asemenea structur execut o serie de instruc iuni pentru un obiect sau pentru o variabil de tip utilizator. Sintaxa este: With object [statements] End With unde object este numele unui obiect sau a unui tip definit de utilizator statements sunt instruc iunile care se execut pentru entitatea precizat. Permi nd omiterea recalificrilor din referin ele la obiectul precizat, orice construc ie de tipul ".nume" este interpretat n instruc iunile structurii drept "object.nume".

29

ntr-un bloc With nu se poate schimba obiectul procesat. La plasarea unui bloc With n interiorul altui bloc With, obiectul extern este mascat complet, deci calificrile eventuale la acest obiect vor fi efectuate. Nu se recomand saltul n i dintr-un bloc With. Structuri de decizie (IfThenElse, Select Case) Ramificarea firului execu iei dup rezultatul verificrii unei condi ii este o necesitate frecvent n orice implementare. Pe lng structurile prezentate, se pot utiliza trei func ii care realizeaz alegeri n mod liniarizat (pe o linie de cod): Choose(), Iif(), Switch(). IfThenElse O asemenea structur, ntlnit de altfel n toate limbajele de programare, execut un grup de instruc iuni ca rspuns la ndeplinirea unei condi ii (compus sau nu din mai multe condi ii testate secven ial). Sintaxa permite o mare varietate de forme: If condition Then [statements] [Else elsestatements] sau If condition Then [statements] [ElseIf condition-n Then [elseifstatements] ... [Else [elsestatements]] End If unde condition are una din formele: expresie numeric sau ir care se poate evalua True sau False (Null este interpretat False); expresie de forma TypeOf objectname Is objecttype, evaluat True dac objectname este de tipul obiect specificat n objecttype. statements, elsestatements, elseifstatements sunt blocurile de instruc iuni executate atunci cnd condi iile corespunztoare sunt True. La utilizarea primei forme, fr clauza Else, este posibil s se scrie mai multe instruc iuni, separate de ":", pe aceeai linie.

30

Verificarea condi iilor implic evaluarea tuturor subexpresiilor, chiar dac prin jocul operanzilor i operatorilor rezultatul poate fi precizat mai nainte (de exemplu OR cu primul operand True). Select Case Instruc iunea Select Case se poate utiliza n locul unor instruc iuni ElseIf multiple (dintr-o structur IfThenElseIf) atunci cnd se compar aceeai expresie cu mai multe valori, diferite ntre ele. Instruc iunea Select Case furnizeaz, prin urmare, un sistem de luare a deciziilor similar instruc iunii IfThenElseIf. Totui, Select Case produce un un cod mai eficient i mai inteligibil. Sintaxa este: Select Case testexpression [Case expressionlist-n [statements-n]] ... [Case Else [elsestatements]] End Select unde testexpression este o expresie numeric sau ir. expressionlist-n este lista, separat prin virgule, a uneia sau mai multe expresii de forma: expression. expression To expression. Cuvntul To introduce un interval de valori, valoarea minim fiind prima specificat. Is comparisonoperator expression. Se va utiliza Is cu operatori de comparare (exceptnd Is i Like) pentru a specifica un domeniu de valori.

statements-n reprezint una sau mai multe instruc iuni care se vor executa dac testexpression este egal cu un element din expressionlist-n. elsestatements reprezint una sau mai multe instruc iuni care se vor executa dac testexpression nu este egal cu nici un element din listele liniilor Case. Dac testexpression se potrivete cu un element dintr-o list Case, se vor executa instruc iunile care urmeaz aceast clauz Case pn la urmtoarea clauz Case, sau pn la End Select. Control execu iei trece apoi la instruc iunea care urmeaz liniei finale End Select. Rezult c dac testexpression se regsete n mai multe liste, doar prima potrivire este considerat. Clauza Case Else are semnifica ia uzual "altfel, n rest, n caz contrar etc.", adic introduce instruc iunile care se execut atunci cnd expresia de test nu se potrivete nici unui element din listele clauzelor Else. Dac aceasta este situa ia i nu este specificat o clauz Case Else, atunci execu ia urmeaz cu prima instruc iune de dup End Select. Instruc iunile Select Case pot fi scufundate unele n altele, structurile interioare fiind complete (fiecare structur are End Select propriu, includerea este complet). Apeluri de proceduri i programe

31

n aceast sec iune se prezint doar func ia Shell(), deoarece despre proceduri i apelul lor s-a discutat n capitolul 1.

Func ia Shell() Execut un program executabil i returneaz un Variant(Double) reprezentnd ID-ul de task al programului n caz de succes; n caz contrar returneaz zero. Sintaxa este Shell(pathname[,windowstyle]) unde pathname este Variant (String). Con ine numele programului care se execut, argumentele necesare i poate da calea complet (dac este nevoie). windowstyle este Variant (Integer) i precizeaz stilul ferestrei n care se va executa programul (implicit este minimizat, cu focus). Valorile posibile pentru argumentul windowstyle sunt Constanta numit VbHide VbNormalFocus VbMinimizedFocus VbMaximizedFocus VbNormalNoFocus VbMinimizedNoFocus Valoarea 0 1 2 3 4 6 Semnifica ia Fereastra este ascuns iar focus-ul este pe fereastra ascuns. Fereastra are focus-ul i este dimensionat i pozi ionat normal. Fereastra este afiat ca o icoan (minimizat) dar are focus-ul. Fereastr maximizat, cu focus. Fereastra este normal (restaurat la mrimea i pozi ia cea mai recent) dar nu are focus-ul. Fereastra activ curent i pstreaz focus-ul. Fereastr minimizat, fr focus. Fereastra activ curent i pstreaz focus-ul.

Dac func ia Shell nu poate porni programul specificat se va semnala eroare. Programul pornit prin Shell se execut asincron, deci nu exist certitudinea c acest program se termin nainte de execu ia instruc iunilor care urmeaz liniei Shell. Opera iuni de intrare-ieire n categoria opera iunilor de I/O se pot deosebi schimbul de informa ii cu utilizatorul: acesta se poate desfura prin intermediul unor formulare (forms) predefinite (InputBox, MsgBox) sau prin intermediul unor formulare definite de dezvoltatorul proiectului VBA. schimbul de informa ii cu fiiere i/sau baze de date: acesta se realizeaz prin intermediul unor instruc iuni dedicate acestor opera ii.

32

Dialogul standard cu utilizatorul n general, utilizatorul rspunde la apari ia unei boxe de dialog prin ac ionarea butonului adecvat rspunsului su i/sau prin nscrierea unei informa ii ntr-o zon dedicat acestui scop. Informa ia nscris este transferat programului ca valoare a func iei care ini iaz dialogul grafic. Func ia InputBox Apelul func iei InputBox afieaz o box de dialog care con ine un mesaj, dou butoane (OK i Cancel) i o zon text n care se poate tasta un rspuns (de tip String, chiar dac se transmite o valoare numeric). Se ateapt ca utilizatorul s introduc un text n zona rezervat sau s ac ioneze un buton. Textul introdus este transmis ca valoare a func iei la ac ionarea butonului OK (sau Enter), iar ac ionarea butonului Cancel (ca i nchiderea dialogului ca fereastr) transmite un ir de lungime zero (indiferent de valoarea zonei text. Sintaxa este InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context]) unde prompt este expresia String cu mesajul afiat n dialog (max. 1024 caractere). Mesajul poate fi aranjat pe mai multe linii prin combina ii de caractere Chr(13) carriage return, Chr(10) linefeed, Chr(13)&Chr(10) CR+LF. title este expresia de tip String cu titlul ferestrei dialogului. Dac este omis se va folosi titlul aplica iei. default este expresia de tip String, op ional, con innd textul afiat ini ial n zona text rezervat utilizatorului. Textul este, n lipsa modificrii lui, retransmis ca rspuns (ac ionnd butonul OK). xpos este expresia numeric specificnd pozi ia orizontal a dialogului (n twips, de la latura stnga a ecranului). n lipsa argumentului, boxa de dialog este centrat orizontal. ypos este expresia numeric specificnd pozi ia vertical a dialogului (n twips, de la latura de sus a ecranului). n lipsa argumentului, boxa de dialog este pozi ionat la aproximativ o treime de ecran. helpfile este expresia de tip String care identific fiierul Help utilizat.Dac este indicat helpfile, trebuie s fie precizat i context. Textul de ajutor poate fi vzut prin tasta F1, anumite aplica ii afieaz i un buton Help. context Expresie numeric cu numrul de context Help al intrrii corespunztoare dialogului afiat. Apare obligatoriu mpreun cu helpfile. Dac valoarea func iei nu este atribuit (sau utilizat ntr-o alt expresie), este evident c se pierde, fr semnalarea vreunei erori. Func ia MsgBox Un dialog mai simplu dect InputBox este realizat prin forma predefinit afiat de func ia MsgBox. Se afieaz un mesaj ntr-o box de dialog i se ateapt ca utilizatorul s ac ioneze unul dintre butoanele existente (numrul i tipul lor lor este fixat la proiectarea aplica iei). Func ia returneaz un ntreg indicnd care buton a fost ac ionat. Sintaxa este [intvariable=]MsgBox(prompt[, buttons] [, title] [, helpfile, context]) unde prompt este textul mesajului (Vezi InputBox)

33

buttons este o expresie numeric egalcu suma valorilor care specific numrul, tipul i atributele butoanelor. Aici se fixeaz i modalitatea ferestrei (Vezi constantele predefinite din tabelul care urmeaz). Valoarea implicit este 0. title,helpfile, context identice cu argumentele similare descrise la InputBox. Constantele recomandate pentru formarea argumentului buttons sunt

Constanta VbOKOnly VbOKCancel VbAbortRetryIgnore VbYesNoCancel VbYesNo VbRetryCancel VbCritical VbQuestion VbExclamation VbInformation VbDefaultButton1 VbDefaultButton2 VbDefaultButton3 VbDefaultButton4 VbApplicationModal VbSystemModal

Valoare 0 1 2 3 4 5 16 32 48 64 0 256 512 768 0 4096 Numai butonul OK OK i Cancel Abort, Retry i Ignore Yes, No i Cancel Yes i No Retry i Cancel Icoana de Critical Message Icoana de Warning Query Icoana Warning Message Icoana de Information Message

Descriere

Primul buton este cel implicit (echivalent cu Enter) Al doilea buton este cel implicit Al treilea buton este cel implicit Al patrulea buton este cel implicit Application modal: aplicatia curent este oprit pn cnd rspunde utilizatorul System modal: toate aplica iile sunt oprite pn cnd utilizatorul rspunde la dialog

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

34

Constanta VbOK VbCancel VbAbort VbRetry VbIgnore VbYes VbNo

Valoare 1 2 3 4 5 6 7

Descriere OK Cancel Abort Retry Ignore Yes No

Ac ionarea tastei Esc este echivalent cu ac ionarea butonului Cancel (dac acesta este prezent). Dac n dialog este prezent butonul Help, ac ionarea lui nu termin dialogul. Utilizarea fiierelor Procesrile tipice programate n VBA prelucreaz informa ii din dou mari categorii de fiiere: fiiere ale aplica iilor server (.doc n Word, .xls n Excel etc.) fiiere utilizator (create i/sau gestionate de proiect pentru date de intrare, temporare sau de ieire). Accesarea direct a fiierelor din prima categorie (fr apelul aplica iei server specifice) poate produce coruperea fiierului, astfel nct nu mai este recunoscut de aplica ia mam. Prelucrarea acestor fiiere trebuie s fie executat n aplica iile care le-au creat. Pentru lucrul cu un fiier utilizator (n continuare prin fiier se va n elege, fr alte precizri, un fiier utilizator) acesta trebuie mai nti deschis (instruc iunea Open), opera iunea producnd i crearea fiierului n cazul unui fiier inexistent (nou). Dup utilizare fiierul trebuie s fie nchis (opera iune efectuat, la terminarea normal a programului, n mod automat). Un fiier are ataat un numr de identificare, unic pentru un proces. Identificare fiierului se poate efectua, n program, prin numele su sau prin numrul ataat. Numrul poate fi n domeniul 1255 pentru fiierele proprii aplica iei i n domeniul 256511 pentru fiiere accesibile din alte aplica ii. Un numr neutilizat (liber) poate fi furnizat de apelul la func ia FreeFile(). Exist trei moduri de acces la nregistrrile unui fiier, acces definit la deschiderea acestuia. acces secven ial (modurile Input, Output i Append), utilizat de regul pentru scrierea fiierelor text (rapoarte, jurnale etc.); acces raandom (aleator) (modul Random), n cazul cnd este necesar s se scrie i s se citeasc nregistrrile ntr-o ordine nedefinit, opera iunile de intrare/ieire fiind amalgamate ntre ele; acces binar (modul Binary), utilizat la citirea/scrierea fiierelor byte cu byte (de exemplu fiiere bitmap).

Un fiier deschis cu un mod de acces trebuie exploatat n acest mod pn cnd este nchis i deschis n alt mod (dac structura lui permite aa ceva). Instruc iunile tipice pentru accesul la informa iile dintr-un fiier sunt

35

Modul de acces Secven ial Random Binar

Scriere Print #, Write # Put Put

Citire Input # Get Get

Deoarece gestionarea fiierelor nu se rezum doar la scriere/citire, n tabelul urmtor este un rezumat al principalelor opera iuni pe care le suport fiierele, cu instruc iunile care faciliteaz respectiva ac iune. Ac iune Citire Controlul ieirilor Copierea unui fiier Creare, acces Fixarea atributelor Fixarea pozi iei active de citire/scriere Inchidere Informa ii despre un fiier Lungimea unui fiier Opera ii asupra fiierelor Scriere Instruc iuni Get, Input, Input #, Line Input # Format, Print, Print #, Spc, Tab, Width # FileCopy Open FileAttr, GetAttr, SetAttr Seek Close, Reset EOF, FileAttr, FileDateTime, FileLen, FreeFile, GetAttr, Loc, LOF, Seek FileLen Dir, Kill, Lock, Unlock, Name Print #, Put, Write #

Doar instruc iunile i func iile des utilizate sunt prezentate n continuare, pentru celelalte se va studia intrarea corespunztoare din Help (n mediul VBA). Open Deschide un fiier n sensul c rezerv o zon tampon (buffer) pentru fiier i determin modul de acces utilizat. Nu se pot efectua instruc iuni de I/O pe un fiier dac acesta nu este deschis n prealabil. Sintaxa: Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength] unde pathname expresie String care specific numele fiierului (poate include ntreaga cale unitate, directoare etc., dup regulile uzuale);

36

mode cuvnt cheie care specific modul de acces la fiier: Append, Binary, Input, Output sau Random; dac nu se specific nimic se va considera acces Random; access clauz op ional specificnd opera iunile I/O permise pentru fiier: Read, Write sau Read Write; lock clauz op ional specificnd opera iile asupra fiierului permise altor procese care se execut (cnd fiierul este deschis): Shared, Lock Read, Lock Write i Lock Read Write. filenumber numrul de fiier pentru fiierul deschis (ntre 1 i 511, vezi observa ia din partea introductiv); func ia FreeFile furnizeaz urmtorul numr disponibil; reclength numr ( 1 Then MsgBox doc.Name + Str(doc.Words.Count)

51

End If Next End Sub care, ntr-o aplica ie Word, afieaz numele tuturor documentelor deschise cu mai mult de un cuvnt scris. Automatizarea ac iunilor prin folosirea obiectelor Prin automatizarea unei ac iuni se n elege scrierea unei proceduri care s produc, la executarea ei, ac iunea dorit. Execu ia poate fi comandat direct sau ca rspuns la declaarea unui eveniment. Pentru a automatiza o ac iune n Microsoft Office, se va ob ine o referin la obiectul care dispune de con inutul i func ionalitatea pe care le urmrim i se vor aplica propriet ile i metodele adecvate. Procesul poate necesita o succesiune de asemenea opera ii. Ob inerea unei referin e la un obiect Pentru a ob ine o referin la un obiect trebuie s se construiasc o expresie care ajunge s acceseze un obiect din modelul de obiecte i apoi, utiliznd propriet i i/sau metode, s se navigheze n sus sau n jos prin ierarhia de obiecte pn cnd ajungem la obiectul dorit. Propriet ile i metodele utilizate pentru a returna punctul de start i pentru a parcurge ierarhia de obiecte se numesc accesori de obiecte (object accessors) sau accesori. Cteva idei utile pentru construirea expresiei care returneaz referin a la un obiect sunt urmtoarele: - un loc obinuit pentru a accesa modelul de obiecte este obiectul cu nivelul cel mai nalt, uzual obiectul Application. Se va utiliza proprietatea Application pentru a returna o referin la obiectul Application. Urmtoarea expresie returneaz o referin la obiectul Application (pentru orice bibliotec de obiecte care con ine un obiect Application). Application - pentru a ajunge din vrful ierarhiei pn la un obiect, se vor parcurge obiectele de pe toate nivelele, utiliznd accesori care returneaz un obiect din altul. De exemplu, proprietatea Documents a obiectului Word Application returneaz obiectul colec ie Documents, care reprezint toate documentele deschise. Prin urmare urmtoarea expresie ntoarce o referin la obiectul colec ie Documents: Application.Documents - Exist accesori direc i (shortcut accessors) care dau acces direct la obiecte din model fr s fie necesar un acces prin vrful ierarhiei. Asemenea accesori sunt Documents, Workbooks, Presentations care dau acces imediat la colec ia de documente din Word, Excel i PowerPoint. Exist i alte propriet i cu rol de accesori direc i: ActiveWindow, ActiveDocument, ActiveWorksheet, ActiveCell. De exemplu, urmtoarea instruc iune nchide documentul Word activ: ActiveDocument.Close Observa ie. Se poate utiliza drept shortcut orice accesor care apare n zona Members of din Object Browser atunci cnd este selectat n zona Classes; adic nu trebuie s se returneze obiectul cruia i se aplic proprietatea sau metoda naintea utilizrii propriet ii sau metodei, ntruct Visual Basic poate s determine din contextul n care se execut codul crui obiect i se aplic proprietatea sau metoda respectiv.

52

- Pentru a returna un singur element al unei colec ii se va utiliza proprietatea sau metoda Item cu numele sau numrul de ordine al elementului. Pentru cele mai multe colec ii, Item este implicit, deci poate lipsi Workbooks.Item("Vanzari") Workbooks("Vanzari") - Pentru a "urca" n ierarhia de obiecte, se utilizeaz, de obicei, proprietatea Parent a obiectului curent. De notat c proprietatea Parent poate returna uneori, n special dac obiectul este membru al unei colec ii, "bunicul" obiectului n locul printelui (adic printele colec iei n locul colec iei). De exemplu Document.Parent - returneaz obiectul Application i nu Documents. - Prin func ia TypeName (executat eventual n Immediate Window) se poate gsi ce tip de obiect ntoarce proprietatea Parent (func ia nu este limitat la aceast proprietate, vezi VB Help). Aplicarea propriet ilor i metodelor Dup ob inerea unei referin e la obiectul urmrit, acestuia i se pot aplica propriet i i metode pentru a modifica valoarea unui atribut sau pentru a-l procesa. Se utilizeaz operatorul punct (".") pentru a separa expresia care returneaz o referin la obiect de proprietatea sau metoda care se aplic obiectului. De exemplu ActiveWindow.Left = 200 fixeaz pozi ia din stnga a ferestrei active utiliznd proprietatea Left a obiectului Window, referin a la acest obiect fiind returnat de accesorul direct ActiveWindow. ActiveDocument.Close nchide documentul activ (n Word) utiliznd metoda Close a obiectului Document la care returneaz o referin accesorul ActiveDocument. Propriet ile i metodele pot avea argumente care s precizeze valorile sau ac iunile. Urmtorul exemplu Word utilizeaz metoda PrintOut cu specificarea paginilor care se tipresc: ActiveDocument.PrintOut From:=" 3", To:=" 7" Este uneori necesar s se navigheze prin mai multe nivele n modelul de obiecte pentru a ajunge la ceea ce se consider date reale n aplica ie, cum ar fi valorile din celulele foii de calcul sau textul dintr-un document Word. Urmtoarele exemple Word arat cum se poate ajunge la text din vrful ierarhiei de obiecte: o o o o o o Proprietatea Application returneaz o referin la obiectul Application. Proprietatea Documents a obiectului Application returneaz o referin la colec ia Documents. Metoda Item a colec iei Documents returneaz o referin la un songur obiect Document. Proprietatea Words a obiectului Document returneaz o referin la colec ia Words. Metoda Item a colec iei Words returneaz o referin la un singur obiect Range. Proprietatea Text a obiectului Range stabilete textul itemului referit.

Astfel, urmtorul exemplu completeaz primul cuvnt din document

53

Application.Documents.Item(1).Words.Item(1).Text = "Primul " Deoarece proprietatea Documents este o proprietate global, poate fi utilizat fr calificativul Application; deoarece Item este proprietate sau metod implicit pentru colec ia de obiecte, nu trebuie enun at explicit. Din aceste considerente, exemplul urmtor realizeaz exact aceeai ac iune ca i exemplul precedent: Documents(1).Words(1).Text = :Primul " Pentru alte exemple de referin e i de utilizare a metodelor i propriet ilor se vor urmri exemplificrile de la capitolele urmtoare. Ajutor n scrierea programelor Pentru o imagine complet a uneltelor i mecanismelor prin care mediul de programare VB sus ine activitatea de scriere a instruc iunilor surs se va citi i capitolul dedicat mediului VBE. Utilizarea Macro Recorder nregistrarea unui macro ofer un ajutor important atunci cnd se cunoate realizarea unei ac iuni n interfa a utilizator a aplica iei de baz i se dorete cunoaterea obiectelor, propriet ilor i metodelor care pot s realizeze acea ac iune (sau ceva asemntor). n general, codul generat de nregistrarea macro nu este foarte eficient i robust, deoarece nregistrarea pleac de la obiectul selectat n momentul startului i realizeaz doar navigarea n restul modelului de obiecte. Orice utilizare ulterioar va necesita o selectare sau activare similar pentru a ndeplini ac iunea ateptat. Trebuie s se considere codul nregistrat doar o prim schi a procedurii, modificri ulterioare trebuind s produc o variant mai clar i mai robust. Codul generat este mai robust i mai flexibil dac va con ine expresii care navigheaz prin ierarhia de obiecte fr s nceap cu un obiect selectat sau activat. Idei n acest sens pot fi ob inute din studierea exemplelor date n Visual Basic Help: pozi ionarea punctului de inser ie pe o denumire de proprietate sau metod i ac ionarea tastei F1 afieaz subiectul respectiv din Help. O cale direct de accesare a fiierului de ajutor pentru un obiect este pozi ionarea n graficul care prezint ierarhia de obiecte (specific fiecrei aplica ii) i dublu click pe un obiect afieaz subiectul dedicat obiectului n VB Help. Exemplele prezentate n Help pot fi copiate, n mod uzual, utiliznd Clipboard, n fereastra de cod. Object Browser Fiecare aplica ie din Microsoft Office are o bibliotec de obiecte (object library sau type library), care con ine informa ii despre obiectele, propriet ile, metodele, evenimentele i constantele predefinite ale aplica iei. Pentru accesul la informa ia respectiv se poate utiliza Object Browser, unealt din VBE. Pentru a deschide Object Browser din VBE (n Excel, Word sau PowerPoint) sau dintr-un modul (Access), se alege Object Browser din meniul View. n boxa Project/Library se alege numele bibliotecii care se consult, sau pentru a vedea o list complet. Dac biblioteca dorit nu este n lista celor disponibile, se va crea o referin la aceast bibliotec prin alegerile corespunztoare n dialogul References (meniul Tools) al proiectului curent.

54

n boxa Classes se afieaz numele tuturor obiectelor i tipurilor enumerate (constantele predefinite) n bibliotecile referite. Not. O clas este un tip, o descriere a unui obiect. Un obiect este o instan efectiv a unei clase. Deseori aceti termeni sunt utiliza i unul n locul celuilalt, dac nu se produc confuzii (uneori chiar i atunci). n boxa Members of se afieaz toate propriet ile, metodele i evenimentele proprii (asociate) clasei selectate n boxa Classes. Selectarea unei intrri n list poate fi completat cu F1 pentru a vedea textul ajuttor, iar n zona inferioar (Detail pane) se afieaz infroma ii privind sintaxa, starea read-only sau read-write, biblioteca unde apar ine, tipul rezultatului returnat (dat sau obiect). D