Programarea aplicaiilor Microsoft Office Evaluare prima jumtate a

  • Slides: 49
Download presentation
Programarea aplicaţiilor Microsoft Office

Programarea aplicaţiilor Microsoft Office

Evaluare • prima jumătate a semestrului – test scris – susţinere în săptămâna a

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

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.

Cuprins - prima jumătate • • • Introducere Obiecte Excel Obiecte Word Obiecte Power. Point Dialoguri 4

I. Introducere

I. Introducere

VBA • Visual Basic for Applications • face parte din familia de limbaje Visual

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 –

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

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

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

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 –

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

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

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

I. 1. Declaraţii

Domenii de vizibilitate (1) • variabile locale – declarate în interiorul procedurilor – cuvinte-cheie:

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

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

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

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

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

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ă

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

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 –

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 -

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

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

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

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

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 =

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

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 •

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

I. 2. Instrucţiuni

Generalităţi (1) • se recomandă scrierea câte unei instrucţiuni pe un rând • dacă

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ă

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),

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

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: …

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,

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

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

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 =

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

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

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

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

I. 3. Intrări-ieşiri simple

Intrări-ieşiri • comunicarea cu utilizatorul – dialoguri predefinite • intrare - Input. Box •

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]

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

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]) •

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