Programarea aplicaiilor Microsoft Office Evaluare prima jumtate a


















![Declaraţii - constante [Public|Private] Const name [As type] = expression • dacă tipul nu Declaraţii - constante [Public|Private] Const name [As type] = expression • dacă tipul nu](https://slidetodoc.com/presentation_image/11d2272266f93dabca84fb5cf6c87574/image-19.jpg)





![Tipuri definite de utilizator [Public|Private] Type typename fieldname [([subscripts])] As type [fieldname [([subscripts])] As Tipuri definite de utilizator [Public|Private] Type typename fieldname [([subscripts])] As type [fieldname [([subscripts])] As](https://slidetodoc.com/presentation_image/11d2272266f93dabca84fb5cf6c87574/image-25.jpg)

![Declaraţii - proceduri (2) [Private|Public] [Static] Sub name([arglist]) [declarations] [instructions] [Exit Sub] [instructions] End Declaraţii - proceduri (2) [Private|Public] [Static] Sub name([arglist]) [declarations] [instructions] [Exit Sub] [instructions] End](https://slidetodoc.com/presentation_image/11d2272266f93dabca84fb5cf6c87574/image-27.jpg)
![Declaraţii - proceduri (3) • argumente [Optional] [By. Val|By. Ref] [Param. Array] name[()] [As Declaraţii - proceduri (3) • argumente [Optional] [By. Val|By. Ref] [Param. Array] name[()] [As](https://slidetodoc.com/presentation_image/11d2272266f93dabca84fb5cf6c87574/image-28.jpg)
![Declaraţii - proceduri (4) [Private|Public] [Static] Function name([arglist]) [As type] [declarations] [instructions] [name = Declaraţii - proceduri (4) [Private|Public] [Static] Function name([arglist]) [As type] [declarations] [instructions] [name =](https://slidetodoc.com/presentation_image/11d2272266f93dabca84fb5cf6c87574/image-29.jpg)













![Instrucţiuni de control (7) • decizie If condition 1 Then [statements] [Else. If condition Instrucţiuni de control (7) • decizie If condition 1 Then [statements] [Else. If condition](https://slidetodoc.com/presentation_image/11d2272266f93dabca84fb5cf6c87574/image-43.jpg)
![Instrucţiuni de control (8) • selecţie Select Case testexpression Case expression 1 [statements] Case Instrucţiuni de control (8) • selecţie Select Case testexpression Case expression 1 [statements] Case](https://slidetodoc.com/presentation_image/11d2272266f93dabca84fb5cf6c87574/image-44.jpg)


![Funcţia Input. Box în VBA var = Input. Box(Prompt[, Title] [, Default] [, Xpos] Funcţia Input. Box în VBA var = Input. Box(Prompt[, Title] [, Default] [, Xpos]](https://slidetodoc.com/presentation_image/11d2272266f93dabca84fb5cf6c87574/image-47.jpg)

![Funcţia Msg. Box var = Msg. Box(Prompt[, Buttons] [, Title] [, Helpfile, Context]) • Funcţia Msg. Box var = Msg. Box(Prompt[, Buttons] [, Title] [, Helpfile, Context]) •](https://slidetodoc.com/presentation_image/11d2272266f93dabca84fb5cf6c87574/image-49.jpg)
- Slides: 49
Programarea aplicaţiilor Microsoft Office
Evaluare • prima jumătate a semestrului – test scris – susţinere în săptămâna a 8 -a • a doua jumătate a semestrului – proiect – predare în săptămâna finală • condiţie de promovare: suma punctajelor la cele două probe să fie cel puţin 10 • condiţii de susţinere: cel mult 2 absenţe la laborator în fiecare jumătate de semestru 2
Bibliografie ajutătoare • P. Blattner, L. Ulrich, K. Cook, T. Dyck, Totul despre Ms Excel 2000, Ed. Teora, Bucureşti, 2001 • VBA for Office developers http: //msdn. microsoft. com/en-us/office/ff 688774. aspx • Getting Started with VBA in Office 2010 http: //msdn. microsoft. com/enus/library/office/ee 814735(v=office. 14). aspx • MSDN 3
Cuprins - prima jumătate • • • Introducere Obiecte Excel Obiecte Word Obiecte Power. Point Dialoguri 4
I. Introducere
VBA • Visual Basic for Applications • face parte din familia de limbaje Visual Basic • scop - automatizarea funcţionării programelor Microsoft • adoptat ulterior şi de alţi producători de software – Corel – Autodesk etc. 6
Caracteristici VBA • limbaj compilat – dar cu multe caracteristici ale limbajelor interpretate – ex. : nu este obligatorie declararea variabilelor • limbaj parţial orientat-obiect – permite programatorului definirea unor module similare claselor – esenţială este ierarhia de obiecte predefinte MSOffice specifică aplicaţiei folosite • Word, Excel, Power. Point, . . . 7
Proiecte VBA - conţinut • module de cod (. bas) – conţin declaraţii şi proceduri • module de clasă (. cls) – conţin definiţiile claselor utilizator • forme (. frm) – conţin definiţiile dialogurilor utilizator şi codul pentru tratarea evenimentelor asociate • referinţe – indică entităţile din alte proiecte/aplicaţii accesate din proiectul curent 8
Macrouri (1) • sunt de fapt proceduri • apelabile de către utilizator – pot fi asociate unor combinaţii de taste • creare – scrierea codului în editorul VBA – înregistrarea acţiunilor efectuate de utilizator (Macro Recorder) • apoi se poate observa/edita codul astfel generat în editorul VBA • util pentru depanare şi înţelegerea acţiunilor 9
Macrouri (2) • acţiunile care se pot realiza prin cod sunt similare celor care pot fi realizate direct din interfaţa programului • deci, pentru a putea scrie cod corect, trebuie să cunoaştem bine aplicaţia în care ne aflăm • MS-Office pune la dispoziţie o serie de obiecte predefinite care permit accesul la funcţionalităţile aplicaţiei de bază – unele sunt generale – majoritatea sunt specifice fiecărei aplicaţii 10
Editorul VBA • accesibil – prin combinaţia de taste Alt + F 11 – prin combinaţia de taste Alt + F 8, urmată de selectarea unui macro şi editarea acestuia – din interfaţa programului folosit (Word, Excel, Power. Point, . . . ) • permite – editarea codului – execuţia şi depanarea codului – vizualizarea proprietăţilor obiectelor etc. 11
Sistemul de ajutor • accesibil – din interfaţa editorului VBA • Help - Microsoft Visual Basic Help – prin tasta F 1 • furnizează automat informaţii despre cuvântul pe care este poziţionat cursorul (cuvânt-cheie, obiect, metodă/proprietate, procedură etc. ) • foarte utilă - autocompletarea – recunoaşte atât obiectele predefinite, cât şi variabilele/procedurile definite de utilizator 12
Module de cod • opţiuni de compilare – cuvântul-cheie Option • declaraţii – variabile globale – pot lipsi • proceduri – nu pot fi imbricate – pot fi apelate din alte proceduri – sau direct de către utilizator 13
I. 1. Declaraţii
Domenii de vizibilitate (1) • variabile locale – declarate în interiorul procedurilor – cuvinte-cheie: Dim, Static • variabile globale, vizibile la nivel de modul – declarate în secţiunea de declaraţii – cuvinte-cheie: Dim, Private • variabile globale, vizibile din alte module – declarate în secţiunea de declaraţii – cuvânt-cheie: Public 15
Domenii de vizibilitate (2) • proceduri vizibile la nivel de modul – cuvânt-cheie: Private – nu pot fi apelate direct de către utilizator • proceduri vizibile din alte module – cuvânt-cheie: Public (implicit) – pot fi apelate direct de către utilizator • dacă nu au parametri 16
Tipuri de date • predefinite – este introdus un tip special (Variant) – se poate substitui oricărui tip predefinit • mai puţin String de lungime variabilă • poate lua valori speciale – – Empty - neiniţializat Null - nu conţine date Error - valoare primită printr-o operaţie eronată Nothing - pentru variabile de tip Object • definite de utilizator – similar structurilor din limbajul C 17
Tipuri de date predefinite Boolean Byte Currency Date Decimal Single, Double Integer, Long Object String Variant True, False 0 -255 reprezentări financiare reprezentarea datei şi orei numere zecimale numere în virgulă mobilă numere întregi referinţe la obiecte MS-Office şiruri de caractere tip universal 18
Declaraţii - constante [Public|Private] Const name [As type] = expression • dacă tipul nu este precizat, se va ataşa tipul cel mai apropiat de expresia indicată • vizibilitate implicită: Private • exemple Const Nr. Linii = 15 Public Const Mesaj = "Acesta este un sir de caractere" Const Nr. Linii = 15, Pondere As Single = 1. 25 19
Constante predefinite • specifice diverselor obiecte sau proceduri predefinite – numele lor au prefixe standard • Excel: xl (ex. xl. No. Change) • Word: wd (ex. wd. Character) • Power. Point: pp (ex. pp. Layout. Blank) • atenţie – pot exista constante diferite cu aceleaşi valori – se recomandă utilizarea fiecărui nume de constantă doar în contextul în care a fost introdus 20
Declaraţii - variabile (1) • cuvinte-cheie: Dim, Private, Public, Re. Dim, Static • dacă nu este indicat tipul, este considerat implicit Variant Dim [With Events] name[([subscripts])] [As [New] type] Private [With Events] name[([subscripts])] [As [New] type] Public [With Events] name[([subscripts])] [As [New] type] Static name[([subscripts])] [As [New] type] Re. Dim [Preserve] name[([subscripts])] [As type] 21
Declaraţii - variabile (2) • tablourile pot avea cel mult 60 de dimensiuni, separate prin virgule • indicii pot fi precizaţi (lower To upper) (upper) • implicit, indicele minim este 0 • valoarea implicită poate fi modificată prin program () • tablou alocat dinamic • poate fi dimensionat ulterior, prin Re. Dim 22
Declaraţii - variabile (3) • cuvântul-cheie New – utilizat doar pentru variabile obiect – variabila este creată la prima referire a sa • exemple de declaraţii Dim i As Integer Public obiect – tip implicit Variant Dim matrice(1 To 10, 9) As Double Dim wdoc As Document – document Word 23
Tablouri • pot fi create prin declaraţiile de variabile, ca anterior • dinamic - prin apelul funcţiei Array – variabila rezultată este de tip Variant – indicele inferior este implicit 0 (se poate modifica) – exemplu A = Array("unu", "doi", "trei") • indiferent de modul de creare, indicii inferior şi superior pot fi obţinuţi prin funcţiile LBound şi UBound 24
Tipuri definite de utilizator [Public|Private] Type typename fieldname [([subscripts])] As type [fieldname [([subscripts])] As type]. . . End Type • fiecare câmp poate fi accesat la fel ca în limbajul C Dim p As Point p. x = 50 25
Declaraţii - proceduri (1) • tipuri de proceduri Sub Function Property • specifică definirii proprietăţilor unui obiect • orice instrucţiune trebuie să aparţină unei proceduri • nu există program principal sau funcţie main • procedurile sunt apelate de utilizator 26
Declaraţii - proceduri (2) [Private|Public] [Static] Sub name([arglist]) [declarations] [instructions] [Exit Sub] [instructions] End Sub • cuvântul-cheie Static: toate variabilele locale sunt statice • argumentele sunt separate prin virgule 27
Declaraţii - proceduri (3) • argumente [Optional] [By. Val|By. Ref] [Param. Array] name[()] [As type] [=defaultvalue] • argumentele opţionale - doar la finalul listei • cuvântul-cheie Param. Array - tablou opţional de elemente de tip Variant – poate apărea doar ca ultim argument • defaultvalue - valoarea implicită pentru argumentele opţionale – pentru tipul Object poate fi doar Nothing 28
Declaraţii - proceduri (4) [Private|Public] [Static] Function name([arglist]) [As type] [declarations] [instructions] [name = expression] [Exit Function] [instructions] [name = expression] Function • atribuirile care au în membrul stâng numele funcţiei stabilesc valoarea returnată 29
Execuţia procedurilor (1) • din interfaţa programului (Alt + F 8) – doar procedurile Sub publice şi fără parametri • din cod – prin apelare directă [[Project_name. ]Module_name. ]Proc_name Arglist – prin instrucţiunea Call [[Project_name. ]Module_name. ]Proc_name (Arglist) – parantezele sunt necesare pentru lista de parametri doar la utilizarea instrucţiunii Call 30
Execuţia procedurilor (2) • parametrii efectivi – trebuie să respecte tipul parametrilor formali • tipul Variant poate înlocui aproape orice alt tip – unii pot fi opţionali – pot fi identificaţi prin nume în loc de poziţie arg_name: =arg_value • caz în care poziţia în lista argumentelor nu mai este relevantă Selection. Home. Key(wd. Line, wd. Extend) Selection. Home. Key Extend: =wd. Extend, Unit: =wd. Line 31
I. 2. Instrucţiuni
Generalităţi (1) • se recomandă scrierea câte unei instrucţiuni pe un rând • dacă o instrucţiune este prea lungă – poate fi continuată pe mai multe rânduri prin utilizarea simbolului "_" la finalul fiecărei linii, mai puţin cea finală – simbolul trebuie separat prin spaţiu de restul liniei • două instrucţiuni se pot scrie pe o aceeaşi linie dacă sunt separate de ": " 33
Generalităţi (2) • dacă este necesar, o linie poate avea un identificator – etichetă - orice identificator care începe din prima coloană şi se termină cu caracterul ": " – număr - orice combinaţie de cifre care începe din prima coloană şi este unică în modulul respectiv • comentarii – după caracterul apostrof • înainte de care, pe aceeaşi linie, pot exista şi instrucţiuni – după cuvântul-cheie Rem • în acest caz, pe linie poate exista doar comentariul 34
Operatori • aritmetici: ^ (ridicare la putere), *, /, -, + (adunare, concatenare şiruri), (împărţire întreagă), mod • de comparare: <, <=, >, >=, =, <>, Is (referinţe la acelaşi obiect), Like (potrivire de şiruri) • de concatenare: +, & • logici: And, Eqv, Imp, Not, Or, Xor – acţionează atât pentru condiţii de test compuse, cât şi pe biţi 35
Instrucţiuni de atribuire • valori care nu reprezintă obiecte - Let – cuvântul-cheie poate lipsi [Let] i = i + 1 • obiecte - Set newdoc = Active. Document • operaţii speciale pe şiruri - LSet, RSet LSet s 1 = s 2 RSet s 1 = s 2 – copiere cu aliniere la stânga, respectiv dreapta 36
Instrucţiuni de control (1) • apel de subrutină Go. Sub line … line: … Return • salt Go. To line • tratarea erorilor On Error 37
Instrucţiuni de control (2) • părăsirea structurii de control curente – bucle: Exit Do, Exit For – procedură: Exit Sub, Exit Function – a se vedea în continuare structurile de control corespunzătoare • terminarea imediată a execuţiei programului – nu doar a buclei/procedurii curente End • suspendarea execuţiei programului Stop 38
Instrucţiuni de control (3) • gruparea instrucţiunilor pentru accesul facil la un obiect With object [statements] End With • buclă simplă While condition [statements] Wend 39
Instrucţiuni de control (4) • bucle cu număr nedeterminat de iteraţii – cu test la început – cu test la final Do [{While|Until} condition] [statements] [Exit Do] [statements] Loop Do [statements] [Exit Do] [statements] Loop [{While|Until} condition] 40
Instrucţiuni de control (5) • buclă cu număr determinat de iteraţii For counter = start To end [Step step] [statements] [Exit For] [statements] Next [counter] – atenţie la cazurile în care valoarea finală nu este constantă pe durata buclei – ex. : valoarea unei proprietăţi a unui obiect 41
Instrucţiuni de control (6) • parcurgerea unor colecţii sau tablouri For Each element In group [statements] [Exit For] [statements] Next [element] – în cazul colecţiilor, ordinea parcurgerii elementelor poate să nu fie sub controlul programatorului 42
Instrucţiuni de control (7) • decizie If condition 1 Then [statements] [Else. If condition 2 Then [statements] … [Else [statements]] End If – atenţie la scrierea pe linii a instrucţiunii 43
Instrucţiuni de control (8) • selecţie Select Case testexpression Case expression 1 [statements] Case expression 2 [statements]. . . [Case Else [statements]] End Select – expresiile 1, 2, . . . nu sunt neapărat constante 44
I. 3. Intrări-ieşiri simple
Intrări-ieşiri • comunicarea cu utilizatorul – dialoguri predefinite • intrare - Input. Box • ieşire - Msg. Box – dialoguri definite de utilizator • lucrul cu fişiere – instrucţiuni pentru lucrul la nivel jos • lucrul cu baze de date – obiecte specifice accesului la baze de date (ADO, DAO) 46
Funcţia Input. Box în VBA var = Input. Box(Prompt[, Title] [, Default] [, Xpos] [, Ypos] [, Helpfile, Context]) • valoarea returnată - de tip String – textul introdus de utilizator, dacă s-a apăsat butonul OK – şirul vid, dacă s-a apăsat butonul Cancel 47
Funcţia Input. Box în Excel • similară celei generale din VBA • are în plus un argument (Type) care controlează tipul permis pentru intrare – 0 - formulă, 1 - număr, 2 - String, 4 - Boolean, 8 Range, 16 - eroare, 64 - tablou de valori – sunt permise şi combinaţii (ex. 1 + 2), caz în care sunt acceptate mai multe tipuri de intrări • din Excel se poate apela şi funcţia generală • apelul funcţiei Excel var = Application. Input. Box(…, Type) 48
Funcţia Msg. Box var = Msg. Box(Prompt[, Buttons] [, Title] [, Helpfile, Context]) • parametrul Buttons indică butoanele prezente – valorile posibile pot fi date direct (numeric) sau prin constante predefinite – ex. : vb. OKOnly = 0, vb. OKCancel = 1 etc. • valoarea returnată indică butonul apăsat – similar, valorile posibile pot fi specificate numeric sau prin constante predefinite – ex. : vb. OK = 1, vb. Cancel = 2 etc. 49