Loading documents preview...
Universitatea OVIDIUS Constanţa Departamentul ID-IFR Facultatea de Știinţe Economice Specializarea Economia Comerţului, Turismului şi Serviciilor Forma de învăţământ ID Anul de studiu I Semestrul 1 Valabil începând cu anul universitar 2009-2010
Caiet de Studiu Individual pentru
Bazele informaticii
Coordonator disciplină: Prof. univ. Cosma Emil
Cuprins
Bazele informaticii CUPRINS Unitate Titlul de învăţare INTRODUCERE 1
2
3 şi 4
Pagina 1 3
O introducere în calculul tabelar Obiectivele Unităţii de învăţare Nr. 1 1.1. Programul de calcul tabelar Excel 1.2. Editarea documentelor Excel 1.3. Funcţii Excel 1.4. Rezumat Lucrare de verificare Unitate de învăţare Nr. 1
4 5 6 8 9 10
Editarea foilor electronice de calcul
11
Obiectivele Unităţii de învăţare Nr. 2 2.1. Inserare şi ştergere pentru linii şi coloane 2.2. Ajustarea dimensiunilor liniilor şi a coloanelor 2.3. Referinţe absolute şi relative de celulă 2.4. Copiere, tăiere, alipire de celule 2.5. Formatarea conţinutului celulelor 2.6. Rezumat Lucrare de verificare Unitate de învăţare Nr. 2
12 14 15 15 16 17 20 21
Calcule financiare. Tabele de decizie
24 25 25 26 26 27 27 28 28 30 31
Obiectivele Unităţii de învăţare Nr. 3 şi 4 3.1. Despre funcţii financiare 3.1.1. Funcţia FV 3.1.2. Funcţia PV 3.1.3. Funcţia NPER 3.1.4. Funcţia PMT 3.1.5. Funcţia IPMT 3.2. Tabele de decizie 3.3. Rezumat Lucrare de verificare Unitate de învăţare Nr. 3 şi 4
Bazele informaticii
I
Cuprins
5 şi 6
7
8
9
Tabele de date. Grafice
34
Obiectivele Unităţii de învăţare Nr. 5 şi 6 5.1. Tabele de date 5.1.1. Ştergere (Delete) şi inserare (Insert) 5.1.2. Sortare şi filtrare (Sort & Filter) 5.2. Grafice (diagrame) 5.3. Rezumat Lucrare de verificare Unitate de învăţare Nr. 5 şi 6
35 35 36 38 42 44 45
Macrocomenzi
47
Obiectivele Unităţii de învăţare Nr. 7 7.1. Înregistrarea unei macrocomenzi VBA 7.2. Rezumat Lucrare de verificare Unitate de învăţare Nr. 7
48 48 55 55
Editorul VBA
56
Obiectivele Unităţii de învăţare Nr. 8 8.1. Lansarea editorului VBA 8.2. Mediul de editare VBA 8.3. Module VBA 8.3.1. Identificarea modulelor 8.3.2. Rularea modulelor 8.3.3. Save şi Open pentru aplicaţiile Office şi modulele asociate 8.3.4. Sistemul de asistenţă la scrierea codului 8.3.5. Proceduri 8.3.5.1. Proceduri Sub 8.3.5.2. Proceduri Function 8.4. Formulare VBA 8.4.1. Crearea unui formular 8.4.2. Rularea unui formular 8.4.3. Controale OLE 8.5. Documente Office active 8.5.1. Controale ActiveX 8.5.2. Proceduri eveniment 8.6. Rezumat Lucrare de verificare Unitate de învăţare Nr. 8
57 57 57 59 59 59
Secvenţe de cod VBA
74
60 60 61 61 63 64 65 66 66 68 69 70 72 73
75 75 76 76 79 79
Obiectivele Unităţii de învăţare Nr. 9 9.1. Cuvintele 9.2. Comentariile 9.3. Tipuri de date 9.4. Expresiile 9.4.1. Operanzi Bazele informaticii
II
Cuprins
10
11
12
9.4.2. Operatori 9.4.3. Ordinea de evaluare a expresiilor 9.5. Constante şi variabile 9.5.1. Constante 9.5.2. Variabile 9.6. Instrucţiunea de atribuire 9.7. Liste (arrays) de variabile 9.7.1. Liste dinamice Lucrare de verificare Unitate de învăţare Nr. 9
79 80 81 81 82 83 84 85 86
Funcţii VBA predefinite
89
Obiectivele Unităţii de învăţare Nr. 10 10.1. Funcţia Format 10.2. Funcţii matematice 10.3. Funcţii financiare 10.4. Funcţii pe şiruri de caractere 10.5. Funcţii pentru dată calendaristică şi timp 10.6. Funcţii pentru conversii 10.7. Funcţii pentru testarea tipului de date Lucrare de verificare Unitate de învăţare Nr. 10
90 90 91 91 93 93 94 94 95
Structuri de control VBA
100
Obiectivele Unităţii de învăţare Nr. 11 11.1. Structurile de control 11.1.1. Instrucţiunea de selecţie simplă 11.1.2. Instrucţiunea de selecţie multiplă 11.1.3. Structurile repetitive 11.1.3.1. Ciclul Do While (cu test iniţial) 11.1.3.2. Ciclul Do Until (cu test iniţial) 11.1.3.3. Ciclurile Do While şi Do Until cu test final 11.1.3.4. Ciclul For … Next, cu număr finit de paşi 11.2. Lucrare de verificare Unitate de învăţare Nr. 11
101 102 102 103 107 107 108 110 110 111
Module VBA
112
Obiectivele Unităţii de învăţare Nr. 12 12.1. Variabile locale (private) 12.2. Variabile publice (globale) 12.3. Variabile private 12.4. Transmiterea argumentelor prin valoare şi prin referinţă 12.5. Funcţii recursive Lucrare de verificare Unitate de învăţare Nr. 12
113 113 113 114 117 118 119
Bazele informaticii
III
Cuprins
13 şi 14
Formulare VBA
121
Obiectivele Unităţii de învăţare Nr. 13 şi 14 13.1. Formulare (form-uri) 13.2. Proprietăţi şi proceduri eveniment 13.3. Proprietatea Caption 13.4. Proprietatea StartUpPosition 13.5. Proprietatea Height şi Width 13.6. Proprietăţile ForeColor şi BackColor 13.7. Utilizarea controalelor 13.7.1. CommandButton 13.7.2. Label 13.7.3. TextBox 13.7.4. CheckBox 13.7.5. Frame 13.7.6. OptionButton 13.7.7. ListBox 13.7.8. ComboBox 13.7.9. Image 13.7.10. SpinButton 13.8. Modificarea proprietăţilor din cod Lucrare de verificare Unitate de învăţare Nr. 13 şi 14
122 124 125 126 128 128 129 130 131 131 134 137 139 140 142 145 148 149 150 155
BIBLIOGRAFIE
161
Bazele informaticii
IV
Introducere
Bazele informaticii INTRODUCERE
Stimate cursant,
încă de la început doresc să îţi urez bun venit în domeniul informaticii. Acest curs se adresează atât cursanţilor cu un grad mai mare de familiarizare cu universul calculatoarelor cât şi cursanţilor începători. Există totuşi anumite cunoştinţe specifice necesare parcurgerii acestui curs şi anume: Cunoaşterea modalităţii de organizare şi manipulare a informaţiei în format electronic (sistem de fişiere, directoare, copierea, mutarea şi deschiderea fişierelor). Operaţii de bază utilizând sistemul de operare Microsoft Windows (pornirea unei sesiuni de lucru, deschiderea unei aplicaţii, comutarea între mai multe aplicaţii ce rulează simultan, noţiunea de desktop şi noţiunea de shortcut, închiderea în mod corespunzător a sistemului), Utilizarea tastaturii PC standard şi a mouse-ului (combinaţii de taste, utilizarea tastelor speciale, right şi left click pentru mouse) Manualul de faţă este organizat în două părţi (programare tabelară - Excel şi programare în limbajul Basic - VBA) cu 14 unităţi de învăţare, fiecare dintre aceste unităţi conţinând o parte de prezentare a subiectului tratat, o parte de exerciţii practice şi rezolvările acestora.
Exerciţiile practice sunt marcate cu simbolul
.
Spor la învăţat şi succes!
Bazele informaticii
1
Introducere
Programele de calcul tabelar („foi electronice de calcul”) se adresează utilizatorilor neprogramatori ce prelucrează date statistice, financiare, ştiinţifice, fiind, datorită funcţiilor predefinite puse la dispoziţie, un instrument flexibil şi uşor de învăţat. Foile electronice de calcul permit cele mai diverse operaţii asupra informaţiilor de piaţă, preiau datele colectate şi păstrate în fişiere sau date captate prin intermediul reţelelor de transmisie. Cele mai multe studii de piaţă care se comercializează la ora actuală în lume, se livrează în fişiere tip foaie electronică de calcul. Un program de calculator este o listă de instrucţiuni care spun unui calculator ce sarcini are de îndeplinit. Calculatorul rulează instrucţiunile până când ajunge la sfârşitul programului. Fiecare linie dintr-un program este, de obicei, o singură comandă pe care calculatorul trebuie să o execute, cum ar fi adunarea a două numere. Cu o succesiune de comenzi calculatorul poate realiza mai multe: bilanţul unui carnet de cecuri, tipărirea unui document, desenarea de imagini. Programul de calculator (program sursă) poate fi scris în limbaje diferite. Calculatoarele înţeleg numai limbajul maşină (program obiect) – un şir de biţi. Limbajele de programare ca BASIC (limbaj procedural simplu, creat în 1964) permit oamenilor să scrie programe într-un limbaj asemănător limbii engleze. În orice caz, toate programele pot să fie citite de oameni şi trebuie să fie convertite în limbaj maşină, pentru a putea fi interpretate de calculator. Adesea, numele limbajului BASIC este ortografiat cu litere mici (Basic). Cu toate acestea, BASIC şi-a făcut de fapt debutul ca un acronim, reprezentând prescurtarea de la Beginner's All-purpose Symbolic Instruction Code (codul de instrucţiuni simbolice generale pentru începători). Pentru a uşura lectura, materialul didactic prezentat în continuare include particularităţi şi elemente convenţionale: Simboluri explicative: Simbol Semnificaţie Atenţie
↓ Exemplu_
Bazele informaticii
Exemplu Indicaţii, menţiuni Aplicaţii
Simboluri pentru descrierea sintaxei instrucţiunilor VBA: elementul este opţional [] variantă | tip de dată valoarea unei constante, a unei variabile sau a unei expresii <expresie> expresie oarecare condiţie (expresie logică)
2
O introducere în calculul tabelar
Unitatea de învăţare Nr. 1 O introducere în calculul tabelar Cuprins Obiectivele Unităţii de învăţare Nr. 1 1.1. Programul de calcul tabelar Excel 1.2. Editarea documentelor Excel 1.3. Funcţii Excel 1.4. Rezumat Lucrare de verificare Unitate de învăţare Nr. 1
Bazele informaticii
Pagina 4 5 6 8 9 10
3
O introducere în calculul tabelar
Un program de calcul tabelar (Spreadsheets), numit şi "foaie electronică de calcul" este un produs ce cuprinde facilităţi de lucru cu tabele, baze de date şi posibilităţi de reprezentare grafică a foilor de calcul. Programele de calcul tabelar se adresează utilizatorilor neprogramatori ce prelucrează date statistice, financiare, ştiinţifice, fiind, datorită funcţiilor predefinite puse la dispoziţie, un instrument flexibil şi uşor de învăţat. De asemenea foile electronice de calcul permit cele mai diverse operaţii asupra informaţiilor de piaţă, preiau datele colectate şi păstrate în fişiere sau date captate prin intermediul reţelelor de transmisie. Cele mai multe studii de piaţă care se comercializează la ora actuală în lume, se livrează în fişiere tip foaie electronică de calcul. Foaia electronică de calcul este împărţită în linii şi coloane şi este prevăzută cu un sistem de coordonate. Coloanele sunt notate cu litere, iar liniile cu cifre arabe (“tablă de şah”), intersecţiile liniilor şi coloanelor numindu-se celule (de exemplu celula G3 este pe coloana G linia 3). Cu ajutorul acestui sistem de coordonate o celulă este determinată în mod unic. Fiecare celulă poate conţine unul din următoarele trei tipuri de date : un text, un număr sau o formulă. Ultimul tip este "găselniţa" problemei. Numerele aflate în celule sunt legate între ele prin formule, astfel încât dacă se modifică conţinutul unei celule, aceasta va afecta în lanţ multe altele. De exemplu, dacă celulele B1, B2, B3, B4, B5, conţin cifre, se poate aduna conţinutul lor, printr-o formulă plasată în altă celulă: B1+B2+B3+B4+B5 sau SUM(B1:B5). Un program de calcul tabelar oferă zeci de funcţii de calcul, atât matematice, cât şi financiare şi statistice. Acestea pot fi interconectate după toate regulile matematicii, fapt ce permite descrierea unui algoritm de calcul, utilitatea calculului tabelar fiind verificată ca valoare şi funcţionalitate în multe domenii de activitate. Instrumentele principale de lucru ale unui program de calcul tabelar sunt tabelul şi graficul. Prezentarea datelor în formă tabelară şi în formă grafică contribuie la redarea concentrată a informaţiilor.
Bazele informaticii
4
O introducere în calculul tabelar
Tabelele de date trebuie să fie astfel constituite încât: să asigure o prezentare compactă a datelor numerice; să nu fie supraîncărcate cu detalii (deseori două tabele scurte sunt preferabile unui tabel lung); să includă un titlu complet şi clar pentru identificarea imediată a conţinutului lor; să precizeze, dacă este cazul, unităţile de măsură; să indice tipul de preţ (curent sau constant); să prezinte datele sub formă procentuală sau ca indici, atunci când este necesar un plus de claritate.
Programul de calcul tabelar Excel Excel este un program de calcul tabelar, care face parte din familia de utilitare Microsoft Office. Faţă de Microsoft Office 2003, la Microsoft Office 2007 s-au făcut schimbări majore în interfaţa acestuia (de fapt a fost refăcută complet):
Meniurile şi barele de instrumente tradiţionale au fost înlocuite de tab-uri (Home, Insert, Page Layout, Formulas…), care includ butoane (Picture, Clip Art, Shapes, SmartArt…) grupate pe secţiuni (Tables, Illustrations, Charts…). În cazul în care spaţiul de lucru nu este suficient de întins pentru a lucra eficient pe el, minimizarea tab-urilor se realizează efectuând dublu clic pe ele (la fel pentru readucerea lor înapoi). Funcţiile extinse asociate secţiunilor sau butoanelor pot fi vizualizate prin clic, cu mouse-ul, pe săgeata din dreapta acestora. Funcţiile disponibile pot fi afişate şi prin comenzi rapide, de exemplu Ctrl+Shift+F, în cazul fonturilor. Comenzile asociate opţiunii File, dintr-un meniu clasic, se obţin prin acţionarea butonului Office. A fost dezvoltat un nou format pentru salvarea fişierelor (*xlsx în loc de *xls) existând compatibilitate cu vechile formate (Save As, Excel 97-2003 Workbook). A devenit disponibilă şi exportarea fişierelor direct în formatul PDF (Save As, Adobe PDF).
Bazele informaticii
Butonul Office
5
O introducere în calculul tabelar
În dreapta butonului Office se situează bara de instrumente Quick Acces, personalizabilă. Se pot adăuga, pe lângă butoanele Save, Undo şi Redo, o serie de alte funcţii precum Sort Ascending, Sort Descending, Quick Print, Print Preview... prin intermediul săgeţii din dreapta acesteia.
Definirea conţinutului unei foi electronice de calcul se face cu ajutorul tastelor ordinare (litere, cifre, caractere speciale) sau prin combinaţii de taste, în pagina logică. Pagina logică este încadrată în pagina fizică (coala de hârtie, de obicei de format A4) prin margini (dreapta/stânga, sus/jos). La lansarea Excel-ului cursorul se află în poziţia Home (celula A1).
Editarea documentelor Excel Documentele Excel (Book1, Book2, … sau numele fişierelor sub care au fost salvate foile electronice de calcul) cuprind pagini (Sheet1, Sheet2, ...). Unitatea de lucru, pe foaia electronică de calcul, fiind celula, acţiunile de editare se desfăşoară la nivel de celulă şi sunt vizualizate în linia de editare. Conţinutul curent al celulei poate fi validat dacă se acţionează tasta Enter sau dacă se iniţiază deplasarea cursorului într-o altă celulă. Adresa celulei active
Linia de editare
Poziţia Home
Editarea celulelor are ca scop introducerea celor trei tipuri de informaţie: text, numere, formule. Introducerea textului presupune tastarea oricărui şir de caractere. Alinierea textului se face la stânga celulei. Este posibil ca lungimea textului introdus într-o celulă să depăşească capacitatea celulei, în acest caz textul aflat în exces fiind afişat peste celulele următoare dacă acestea nu sunt vide
Bazele informaticii
6
O introducere în calculul tabelar
(în caz contrar se afişează conţinutul acestora). Introducerea numerelor se face cu ajutorul cifrelor, semnelor + şi - (plus şi minus) , virgulei zecimale (,) şi eventual a exponentului (E). Numerele sunt implicit aliniate la dreapta. Dacă un număr trebuie să fie tratat ca text, este necesar ca mai întâi să fie tastat un apostrof (exemplu: '20765). Introducerea formulelor trebuie să înceapă prin tastarea semnului =(egal). Expresiile de calcul pot să conţină: operatori, constante, identificatori de celule, nume de funcţii pentru calcul şi sunt alcătuite conform regulilor algebrice. Constantele conţin valori sub formă de numere întregi (ex: 1, -23), numere reale în format fix (ex: 22,31, -12,234), numere reale în format exponenţial (ex: 12,76E3) sau date procentuale (ex: 125%). Identificatorii de celule permit referirea acestora (ex: A1, D10, A1:E8). Funcţiile de calcul pot fi : - financiare - statistice - matematice şi trigonometrice - logice Operatorii, împreună cu ordinea lor de evaluare sunt descrişi în următoarea tabelă : Operator
Nivel
^ (exponenţial)
1
+ (pozitiv),
2
- (negativ)
* (înmulţire), / (împărţire)
3
+ (adunare), - (scădere)
4
= (egal), <> (diferit)
5
< (strict mai mic) > (strict mai mare) <= (mai mic sau egal cu)
Tastele utilizate cel mai frecvent pentru deplasarea cursorului sunt: Tasta
sau sau Home
Bazele informaticii
Mişcarea cursorului cu o celulă, la stânga sau la dreapta cu o linie, mai sus sau mai jos pe prima celulă din linie
7
O introducere în calculul tabelar
PgUp PgDn Ctrl+Home Ctrl+End
la începutul ferestrei precedente
Ctrl+G sau F5
la celula specificată
la începutul ferestrei următoare în colţul din stânga sus al foii de calcul în colţul din dreapta jos al foii de calcul
Funcţii Excel Funcţiile Excel (de 0, 1 sau mai multe argumente) pot fi introduse textual, dar este de preferat a se utiliza casetele de editare a lor (se apasă butonul ):
Implicit sunt afişate cele mai recent utilizate funcţii (Most Recently Used) dar se pot selecta şi funcţii din categoria dorită (All, Financial, Date & Time …) ↓ Exemplu____________________________________________________________________________________ Caseta de introducere a argumentelor funcţiei IF (dacă):
___________________________________________________________________________________Exemplu ↑
Bazele informaticii
8
O introducere în calculul tabelar
Comenzile mediului de editare Excel. Conceptul de “foaie electronică de calcul”. Editarea textului. Editarea informaţiei numerice. Editarea formulelor de calcul. Introducerea funcţiilor. Definirea domeniilor de celule.
1. Lansaţi programul de calcul tabelar Excel. 2. Consultaţi conţinutul tab-urilor. 3. Familiarizaţi-vă cu folosirea Help-ului (tasta F1 sau butonul din colţul dreapta sus al ecranului). 4. Să se editeze următorul document, să se salveze şi să se previzualizeze:
În celula F5, pentru calculul mediei aritmetice, se va introduce formula: =AVERAGE(A4:F4)
Bazele informaticii
9
O introducere în calculul tabelar
5. Să se editeze următoarea foaie electronică de calcul a rădăcinilor ecuaţiei de gradul 2, pentru diferite valori ale coeficienţilor a, b, c.
În celula E3, pentru calculul valorii delta, se va înscrie formula: =B4^2-4*B3*B5 (b2 - 4·a·c)
În celulele E4, E5 pentru determinarea rădăcinilor x1, x2 se vor înscrie formulele de calcul, conţinând funcţiile IF (“dacă”) şi SQRT (radical). Funcţia IF aparţine categoriei de funcţii Logical (sau All).
=IF(E3>=0;(-B4+SQRT(E3))/(2*B3);F2) =IF(E3>=0;(-B4-SQRT(E3))/(2*B3);F2) având semnificaţia: “dacă delta ≥ 0 atunci afişează rezultatul real, în caz contrar afişează mesaj de rezultat complex”
Bazele informaticii
10
Editarea foilor electronice de calcul
Unitatea de învăţare Nr. 2 Editarea foilor electronice de calcul Cuprins Obiectivele Unităţii de învăţare Nr. 2 2.1. Inserare şi ştergere pentru linii şi coloane 2.2. Ajustarea dimensiunilor liniilor şi a coloanelor 2.3. Referinţe absolute şi relative de celulă 2.4. Copiere, tăiere, alipire de celule 2.5. Formatarea conţinutului celulelor 2.6. Rezumat Lucrare de verificare Unitate de învăţare Nr. 2
Bazele informaticii
Pagina 12 14 15 15 16 17 20 21
11
Editarea foilor electronice de calcul
Editarea conţinutului unei celule selectate, se poate realiza prin apăsarea tastei F2 sau prin poziţionare directă, cu ajutorul mouse-ului, în linia de editare numită şi formula bar, folosind următoarele taste: Tasta sau
Acţiune salt cu un caracter, la stânga sau la dreapta
Home End Backspace Delete
salt la începutul liniei de editare
Shift + sau
selecţie unul sau mai multe caractere
salt la sfârşitul liniei de editare şterge caracterul din stânga cursorului şterge caracterul de pe poziţia cursorului
Conţinutul curent al celulei poate fi validat dacă se acţionează tasta Enter sau dacă se iniţiază deplasarea cursorului într-o altă celulă. Deoarece acţionarea tastei Enter determină trecerea cursorului cu o celula mai jos, pentru a introduce mai multe rânduri în aceeaşi celulă este utilizată combinaţia de taste Alt+Enter . Tasta ESC are rolul, ca şi în alte medii de editare, de anulare a operaţiei curente. Punerea în evidenţă (highlighting) a unui bloc (domeniu) de celule se face în vederea executării de către Excel a unei acţiuni ulterioare asupra acestuia (copiere, ştergere, construirea graficelor, etc). Selecţia unui bloc se realizează folosind tastele săgeţi sau cu ajutorul mouse-ului. Un bloc de celule poate fi alcătuit dintr-o singură celulă, dintr-o linie de celule, dintr-o coloană de celule sau oricare altă porţiune dreptunghiulară a foii de calcul. Specificarea unui bloc de celule se poate face prin precizarea primei şi ultimei celule din bloc (Ex. B3:B7, D2:E7). ↓ Exemplu____________________________________________________________________________________ Selectarea domeniului B2:D3
___________________________________________________________________________________Exemplu ↑ Bazele informaticii
12
Editarea foilor electronice de calcul
Celule vecine pot fi contopite în una singură utilizând butonul din tab-ul Home, secţiunea Alignment (Merge/Unmerge):
↓ Exemplu____________________________________________________________________________________
____________________________________________________________________________________Exemplu ↑ Principalul scop al editării foilor electronice fiind acela al efectuării unor calcule, trebuie respectate regulile sintactice de scriere a relaţiilor de calcul. În foarte multe relaţii de calcul sunt incluse şi funcţii. Excel oferă posibilitatea efectuării unor calcule diverse prin funcţii de calcul (financiare, statistice, matematice şi trigonometrice, pentru baze de date, etc). Caseta de introducere a argumentelor unei funcţii este afişată prin acţionarea butonului asociat liniei de editare. Funcţiile de calcul financiar dau posibilitatea efectuării unor calcule privind rata dobânzii, valoarea viitoare sau prezentă a unei investiţii raportate la un număr de perioade de timp. Valorile monetare sunt introduse din postura de debit/credit, prin convenţie cu +/- (de menţionat că toate valorile cu semnificaţie de plăţi sunt valori negative). Argumentele marcate cu bold (în caseta de specificare a argumentelor) sunt obligatorii a fi introduse, celelalte fiind opţionale. Valorile argumentelor pot rezulta şi prin editarea unor relaţii de calcul. ↓ Exemplu____________________________________________________________________________________ Funcţia NPER (Rate rata dobânzii; Pmt plata periodică; Pv valoarea prezentă - sold), returnează numărul de perioade necesare pentru a obţine un anumit sold cu rata şi dobânda specificate. Valoarea returnată este de tip real, de aceea, aceasta trebuie, eventual, rotunjită la o valoare întreagă (cu funcţia Round). Se poate observa prezenţa unor valori negative (-B1, -B3) dar şi a relaţiei B2/12 în postură de argument:
Bazele informaticii
13
Editarea foilor electronice de calcul
Funcţia FV (rata dobânzii; numărul de plăţi; plata periodică), calculează valoarea de viitor a unei investiţii, cu plăţi periodice egale, pentru perioade egale de timp, la o valoare dată a ratei dobânzii. Argumentele Rate, Nper, Pmt ale acestei funcţii sunt obligatorii (în caseta funcţiei sunt marcate bold), iar argumentele Pv, Type sunt opţionale.
____________________________________________________________________________________Exemplu ↑
Insert (inserare), Delete (ştergere) pentru linii şi coloane
Inserarea liniilor sau a coloanelor se face întotdeauna before (înaite) de linia curentă sau coloana curentă: din tab-ul Home, secţiunea Cells:
cu mouse-ul, prin clic dreapta pe linia de marcaj a liniilor (coloanelor):
Bazele informaticii
14
Editarea foilor electronice de calcul
Ajustarea dimensiunilor liniilor şi a coloanelor Prin lăţimea coloanei se precizează numărul de caractere conţinute de o celulă aparţinând acesteia. Lăţimea implicită a unei coloane este de 8,43 caractere normale. Dacă o celulă conţine text în exces acesta este afişat peste celulele următoare, cu condiţia ca acestea să nu fie vide.
Datele numerice care depăşesc ca număr de caractere lăţimea celulei sunt afişate în format exponenţial iar dacă şi acest mod de afişare nu este posibil se tipăreşte şirul de caractere ###### (depăşire de format !). Schimbarea dimensiunii unei coloane/linii se poate realiza utilizând mouse-ul, prin culisarea liniilor grilă pentru coloane şi rânduri (se ţine apăsat butonul stâng al mouse-ului). ↓ Exemplu____________________________________________________________________________________ Schimbarea dimensiunii unei coloane:
_____________________________________________________________________________Exemplu ↑
Referinţe absolute şi relative de celulă Celulele pot fi referite în două moduri, modurile de referire rezultând din tabelul următor : Referire coloană relativă, linie relativă coloană absolută, linie absolută coloană relativă, linie absolută coloana absolută, linie relativă
Bazele informaticii
Exemple
A2 $A$2 A$2 $A2
15
Editarea foilor electronice de calcul
O referire absolută înseamnă o poziţie fixă în foaia de calcul, poziţie care nu este afectată de modificări în foaia de calcul. Modificările din foaia de calcul (ştergeri de linii şi coloane) se reflectă şi în referinţele relative.
Copierea formulelor (procedeele de copiere vor fi tratate ulterior) dintr-o celulă de calcul în altă celulă de calcul este influenţată de modul de referire a celulelor. Toate referirile relative sunt "translatate", în timp ce referirile absolute rămân nemodificate.
Copy (copiere), Cut (tăiere), Paste (alipire) Copierea şi mutarea conţinutului celulelor se realizează în patru paşi: 1. 2. 3. 4.
Se selectează celula (sau domeniul de celule). Copy (sau Cut). Se stabileşte celula (sau domeniul de celule) receptoare. Paste.
Pentru realizarea posibilităţi:
paşilor
amintiţi
anterior
sunt
oferite
următoarele
din tab-ul Home, secţiunea Clipboard se selectează butoanele
Copy,
Cut sau
Din combinaţii de taste:
Paste: Ctrl+C Ctrl+X Ctrl+V
Copy Cut Paste
Prin clic dreapta pe elementul selectat, din meniul vertical, se alege Copy, Cut sau Paste:
Bazele informaticii
16
Editarea foilor electronice de calcul
Dacă, în loc de Paste se selectează Paste Special… posibilităţile de alipire sunt extinse. De exemplu, dacă sursa copiată este o formulă se poate obţine, prin copiere, doar valoarea (Values), fără a se efectua translatarea formulei.
Mouse-ul se plasează în colţul dreapta jos al zonei selectate acesteia, astfel încât cursorul îşi schimbă forma în simbolul . Ţinându-se apăsat butonul drept se face deplasarea mouse-ului în zona receptoare, la eliberarea lui obţinându-se rezultatul copierii. ↓ Exemplu____________________________________________________________________________________
Copierea formulei din E1 (C1*D1) în E2 determină translatarea (devine C2*D2):
Copierea formulei din E1 ($C$1*$D$1) în E2 se realizează fără translatare (rămâne $C$1*$D$1):
Bazele informaticii
17
Editarea foilor electronice de calcul
La copierea celulei E1 prin Paste Special…, Values în E2 se reproduce valoarea 56:
Copierea celulei E1, în E2, utilizând mouse-ul:
____________________________________________________________________________________Exemplu ↑
Formatarea conţinutului celulelor
Modul de afişare al conţinutului celulelor (afişarea numerelor Number, alinierea Alignment, fontul Font, aspectul liniilor de bordare Border, umplerea Fill, …) poate fi schimbat în funcţie de tipul informaţiei pe care-l conţine:
Bazele informaticii
18
Editarea foilor electronice de calcul
Prin apăsarea butonului săgeată din dreapta secţiunilor tab-ului Home. Prin clic dreapta pe zona selectată, Format Cells… . Din combinaţie de taste Ctrl+Shift+F.
Pentru numere se poate utiliza separatorul punct (Use 1000 separator) sau numărul de zecimale cu care se face afişarea acestora (Decimal places). Un tip foarte utilizat de afişare a numerelor este cel procentual (Percentage, exemplu: 25%) sau monetar (Currency, exemplu: 23,45 lei).
Formatul celulelor se păstrează. Dacă modul de afişare a valorilor conţinute în celule trebuie schimbat se va acţiona în consecinţă. De exemplu dacă într-o celulă se înscrie valoarea 14% formatul celulei va fi
Percentage şi orice nouă valoare numerică înscrisă va fi afişată prin adăugarea simbolului %.
Cele mai multe funcţii financiare calculează valori monetare, ca urmare formatul de afişare stabilit va fi Currency.
Bazele informaticii
19
Editarea foilor electronice de calcul
Atributele textului, afişat în celule, pot fi fixate şi utilizând butoane: Font: bold, italic, subliniat
bordarea (Border) celulelor
umplere (Fill), culoarea fontului
alinierea conţinutului tipul fontului şi mărimea
Editarea conţinutului unei celule Contopirea celulelor Editarea funcţiilor de calcul financiar Inserarea liniilor şi a coloanelor Ajustarea dimensiunii liniilor şi a coloanelor Referinţe relative şi absolute de celule Copiere şi mutare Formatarea celulelor
Bazele informaticii
20
Editarea foilor electronice de calcul
1. Pentru comercializarea mărfurilor se folosesc documente justificative cum ar fi factura. Să se editeze următoarea factură folosind posibilităţile de calcul oferite de Excel:
Celulele D1:E1, B12:C13, D12:E13 sunt contopite. Denumirile din capul de tabel sunt scrise pe două rânduri (Alt+Enter pentru rând nou în interiorul celulei). În celula E4 este introdusă funcţia TODAY. Valoare (Pret Unitar * Cantitate) şi Valoare TVA (Valoare * 19%) se vor calcula doar pentru primul produs (=E8*F8, =G8*19%), pentru restul produselor formulele se pot copia (de exemplu utilizând mouse-ul). Sumele totale se vor calcula prin acţionarea butonului din tab-ul Home. Se vor respecta modalităţile de bordare (Border) şi umplere (Fill).
Bazele informaticii
21
Editarea foilor electronice de calcul
2. Ştiind suma lunară care se poate investi şi rata dobânzii oferită de o bancă oarecare să se calculeze câte depuneri sunt necesare pentru a se atinge soldul propus:
Singurele valori care se introduc de la tastatură (datele de intrare) sunt cele din celulele B1 (format Currency), B2 (format Percentage), B3 (format Currency), restul valorilor se calculează. Numărul de perioade necesar atingerii soldului propus de 1.500 lei prin depuneri de 100 lei, cu dobânda 13% se calculează în celula E1 cu funcţia NPER. Rezultatul, rotunjit în E2 (14 depuneri), intră în calculul soldului final (E3), prin funcţia FV.
Formule:
E1 E2 E3 A6 B6 C6 D6 E6 A7
Bazele informaticii
: : : : : : : : :
=-NPER(B2/12;-B1;-B3) =ROUND(E1;0) =FV(B2/12;E2;-B1) =1 =D6 =0 =$B$1 =D6 =A6+1
22
Editarea foilor electronice de calcul
B7 C7 D7 E7
: : : :
=B6+C7+D7 =B6*$B$2/12 =$B$1 =E6+D7
Conţinutul celulelor din domeniul A8:E19 se va obţine prin copierea (cu mouse-ul) domeniului A7:E7 (calculele din linia cu numărul 2 din tabel se repetă). Valorile din interiorul tabelului sunt afişate cu două zecimale şi cu separatorul punct (Decimal places, Use 1000 separator).
Bazele informaticii
23
Calcule financiare. Tabele de decizie
Unitatea de învăţare Nr. 3 şi 4 Calcule financiare. Tabele de decizie Cuprins Obiectivele Unităţii de învăţare Nr. 3 şi 4 3.1. Despre funcţii financiare 3.1.1. Funcţia FV 3.1.2. Funcţia PV 3.1.3. Funcţia NPER 3.1.4. Funcţia PMT 3.1.5. Funcţia IPMT 3.2. Tabele de decizie 3.3. Rezumat Lucrare de verificare Unitate de învăţare Nr. 3 şi 4
Bazele informaticii
Pagina 25 25 26 26 27 27 28 28 30 31
24
Calcule financiare. Tabele de decizie
Despre funcţii financiare Funcţiile financiare efectuează calcule obişnuite pentru afaceri, ca de pildă determinarea plăţii pentru un împrumut, valoarea viitoare sau valoarea netă actualizată a unei investiţii şi valorile obligaţiunilor sau cupoanelor. Argumentele comune pentru funcţiile financiare includ:
Valoarea viitoare (Fv) – valoarea investiţiei sau împrumutului după ce s-au efectuat toate plăţile. Numărul de perioade (Nper) – numărul total de plăţi sau perioade ale unei investiţii. Plată (Pmt) – suma plătită periodic pentru o investiţie sau împrumut. Valoarea actualizată (Pv) – valoarea unei investiţii sau a unui împrumut la începutul perioadei de investiţie. De exemplu, valoarea actualizată a unui împrumut este capitalul de bază care este împrumutat. Rata (Rate) – rata dobânzii sau rata de actualizare pentru un împrumut sau o investiţie. Tip (Type) – intervalul la care sunt efectuate plăţile în timpul perioadei de plată, ca de pildă la începutul unei luni sau la sfârşitul acesteia.
Unele funcţii financiare se folosesc pentru anuităţi. O anuitate constă dintr-o serie de plăţi constante efectuate pe o perioadă continuă (de exemplu,
un
împrumut
pentru
un
autoturism
sau un
împrumut
ipotecar).
În funcţiile de anuităţi, sumele plătite, cum ar fi depozitele pentru economii, sunt reprezentate de numere negative; sumele primite, cum ar fi un cec de dividente, sunt reprezentate prin numere pozitive.
Bazele informaticii
25
Calcule financiare. Tabele de decizie
Se recomandă consecvenţă în legătură cu unităţile utilizate pentru specificarea argumentelor Rate şi Nper (de exemplu, pentru plăţi lunare la un împrumut pe un număr de ani, rata dobânzii va fi împărţită întotdeauna cu 12, iar Nper va fi înmulţit cu 12 şi cu numărul de ani).
Funcţia FV Funcţia FV întoarce valoarea viitoare a unei investiţii bazate pe plăţi periodice şi constante şi o rată a dobânzii constantă.
Rate - rata dobânzii pe o perioadă; Nper - numărul total de perioade de plată dintr-o anuitate; Pmt - plata efectuată periodic, neschimbată pe durata anuităţii (în mod tipic, argumentul Pmt conţine capital şi dobândă, dar nu şi alte taxe şi datorii); Pv - valoarea actualizată, sau suma globală pe care o serie de plăţi viitoare o reprezintă în momentul actual (dacă argumentul Pv este omis, se consideră zero); Type - este 0 sau 1 şi indică momentul când sunt datorate plăţile (dacă Type este omis, se consideră 0). argumentele Pv şi Type sunt opţionale. Funcţia PV
PV întoarce valoarea actualizată a unei investiţii. Valoarea actualizată este suma totală pe care o reprezintă în prezent o serie de plăţi viitoare. De exemplu, pentru împrumut, suma împrumutată este valoarea actualizată pentru creditor.
Rate - rata dobânzii pe perioadă; Nper - numărul total de perioade de plată dintr-o anuitate; Pmt - plata efectuată periodic, neschimbată pentru toată durata anuităţii (în mod tipic, argumentul Pmt include capital de bază şi dobândă, dar nu
Bazele informaticii
26
Calcule financiare. Tabele de decizie
şi alte onorarii sau taxe); Fv - este valoarea viitoare, sau balanţa în numerar la care se ajunge după efectuarea ultimei plăţi (dacă Fv este omis, se presupune a fi 0 valoarea viitoare a unui împrumut, de exemplu, este 0); Type - este 0 sau 1 şi indică momentul când sunt datorate plăţile. argumentele Pv şi Type sunt opţionale. Funcţia NPER
Funcţia NPER furnizează numărul de perioade pentru o investiţie bazată pe plăţi periodice constante şi o rată constantă a dobânzii.
Rate - rata dobânzii pe o perioadă; Pmt - plata făcută în fiecare perioadă, neschimbată pe parcursul anuităţii (tipic, Pmt conţine capital şi investiţii, dar nu şi alte onorarii sau taxe); Pv - valoarea actualizată, sau valoarea globală pe care ar reprezenta-o în acest moment o serie de plăţi viitoare; Fv - este valoarea viitoare, sau o balanţă în numerar, obţinută după efectuarea ultimei plăţi (dacă Fv este omisă, se presupune a fi egală cu 0 - valoarea viitoare a unui împrumut, de exemplu, este 0). argumentele Fv şi Type sunt opţionale. Funcţia PMT
PMT calculează plata pentru un împrumut bazat pe plăţi constante şi o rată constantă a dobânzii.
Rate - rata dobânzii pentru împrumut; Nper - numărul total de plăţi pentru împrumut; Pv - valoarea actualizată, sau suma totală pe care valorează în prezent o serie de plăţi viitoare, denumită şi capital de bază; Fv - valoarea viitoare, sau balanţa în numerar la care se ajunge după
Bazele informaticii
27
Calcule financiare. Tabele de decizie
efectuarea ultimei plăţi (dacă Fv este omis, se presupune a fi zero, ceea ce înseamnă că valoarea viitoare a împrumutului este zero; Type - este 0 sau 1 şi indică momentul când sunt datorate plăţile. argumentele Fv şi Type sunt opţionale. Funcţia IPMT
IPMT întoarce plata dobânzii pentru o perioadă dată, pentru o investiţie bazată pe plăţi periodice constante şi o rată constantă a dobânzii.
Rate - rata dobânzii pentru împrumut; Per - perioada pentru care se calculează dobânda cuprinsă în intervalul [1, Nper]; Nper - numărul total de perioade de plată dintr-o anuitate; Pv - valoarea actualizată, sau valoarea globală pe care ar reprezenta-o în acest moment o serie de plăţi viitoare; Fv - valoarea viitoare, sau balanţa în numerar obţinută după efectuarea ultimei plăţi (dacă Fv este omis, se presupune a fi egală cu 0 - valoarea viitoare a unui împrumut, de exemplu, este 0); argumentul Fv este opţional.
În casetele de introducere a argumentelor funcţiilor nu este permisă folosirea separatorului punct sau a simbolului monetar (de exemplu, nu se poate introduce 1.000, 1.000 lei sau 1000 lei, corect este: 1000).
Tabele de decizie
Un tabel de decizie este o zonă de celule care arată modul în care modificările anumitor valori referite în formule afectează rezultatele formulelor. Tabelele de decizie oferă facilitatea de a calcula variante multiple ale unei operaţii şi un mod de a vizualiza şi compara rezultatele (prognozarea valorilor cu ajutorul analizei: “ce se întâmplă dacă - What If”) - tab-ul Data, secţiunea Data Tools, butonul What-if Analysis, opţiunea Data Table… : Bazele informaticii
28
Calcule financiare. Tabele de decizie
Aceste tabele de date se construiesc pe baza unei formule având ca date de intrare una sau două valori numite celule de intrare.
Tabelele de decizie cu două variabile (doi factori de influenţă) preiau date dispuse pe linii şi coloane, le trec prin formula de calcul şi le afişează tabelar. Logica constituirii lor constă în definirea unei relaţii de calcul care se scrie o singură dată dar se aplică de mai multe ori. Pentru afişarea rezultatelor se selectează domeniul corespunzător al intrărilor şi al rezultatelor (inclusiv formula) după care se completează casetele Row input cell şi Column input cell cu adresele celulelor de intrare pentru linii şi coloane. ↓ Exemplu____________________________________________________________________________________
Se consideră relaţia : a+2*b (variabilele sunt a şi b). În celula aflată în colţul stânga sus al tabelului de lucru se defineşte relaţia de calcul, pe date din afara tabelului (care pot fi chiar fictive), în dreapta şi sub aceasta se scriu datele pentru care se vor face calculele:
Se selectează tabelul (inclusiv formula) şi se stabilesc celule de intrare:
Bazele informaticii
29
Calcule financiare. Tabele de decizie
În interiorul tabelului se obţin valorile calculate conform formulei –
{Table(D1;C1)}:
____________________________________________________________________________________Exemplu ↑
Tabelele de decizie cu o variabilă (un singur factor de influenţă) reprezintă un caz particular al celor prezentate anterior.
Funcţiile de calcul financiar FV, PV, NPER, PMT, IPMT. Tabele de decizie.
Bazele informaticii
30
Calcule financiare. Tabele de decizie
1. Exerciţii a. O persoană fizică depune 500 lei, într-un cont de economii, cu o dobândă anuală de 11% şi îşi planifică să mai depună câte 50 lei timp de 2 ani. Câţi bani va avea în cont la sfârşitul celor 24 luni (atenţie, argumentul Type este 1)? Răspuns: 1970,08 lei
b. Ca urmare a depunerii cu o dobândă anuală de 15% a unei sume, o bancă returnează lunar 400 de lei timp de şase ani. Care este valoarea acestei sume?
Răspuns: -18.917 lei
c. După câte luni se va atinge un sold propus de 3 mii lei pentru depuneri lunare de 150 lei şi la o rată a dobânzii anuale de 14% ? Răspuns: 22,907… ≈ 23 luni
d. Cât trebuie să economisiţi lunar ca, după 10 ani, contul în bancă să fie de 1.500 lei la o dobândă lunară de 1% ? Răspuns: -6,52 lei
e. Care este dobânda datorată după al doilea an pentru un împrumut de 1.000 de lei, pe trei ani, la o dobândă anuală de 12% ? Răspuns: -84,438 lei
2. Returnarea unui împrumut bancar se poate realiza în plăţi constante (care se determină cu funcţia PMT) sau în plăţi variabile (valoarea împrumutului/numărul de perioade + dobânda calculată prin IPMT). Suma plăţilor constante este egală cu suma plăţilor variabile. Să se verifice această situaţie pentru un împrumut de 4.000 lei returnabil în 4 luni, cu o dobândă lunară de 2%.
Bazele informaticii
31
Calcule financiare. Tabele de decizie
Dobânda (calculată cu IPMT) scade – argumentul Per ia valorile 1, 2, 3, 4. Plăţile constante se calculează cu funcţia PMT.
3. Pentru un împrumut de 32.500 de lei, se rambursează lunar anumite sume. Ştiind că valoarea la zi a ratei dobânzii anuale este de 10% şi că valoarea maximă estimată a acesteia pentru următorii ani este 17% să se calculeze: a) Plăţile lunare pentru diverse valori ale ratei dobânzii în situaţia în care plăţile pot fi eşalonate pe un număr de 6, 7 sau 8 ani:
Se va construi un tabel de decizie cu două variabile. Celula de intrare
pentru coloană este D5 iar pentru linie este D4. Formula de calcul va conţine funcţia PMT - PMT(D5/12;D4*12;D3).
b) Plăţile lunare, împreuna cu dobânzile aferente, pentru valori ale ratei dobânzii mai mari de 10%:
Bazele informaticii
32
Calcule financiare. Tabele de decizie
Ca
formă de calcul se poate utiliza un tabel de decizie cu o singură
variabilă. Celula de intrare (pe coloană) este D5. Pentru coloana de plăţi se va utiliza funcţia PMT - PMT(D5/12;D4*12;D3), iar pentru dobânzi IPMT IPMT(D5/12;D4*12;D4*12;D3).
Bazele informaticii
33
Tabele de date. Grafice
Unitatea de învăţare Nr. 5 şi 6 Tabele de date. Grafice Cuprins Obiectivele Unităţii de învăţare Nr. 5 şi 6 5.1. Tabele de date 5.1.1. Ştergere (Delete) şi inserare (Insert) 5.1.2. Sortare şi filtrare (Sort & Filter) 5.2. Grafice (diagrame) 5.3. Rezumat Lucrare de verificare Unitate de învăţare Nr. 5 şi 6
Bazele informaticii
Pagina 35 35 36 38 42 44 45
34
Tabele de date. Grafice
Tabele de date Tabelele de date reprezintă un grup de date organizate tabelar, pe linii (Rows) şi pe coloane (Columns), astfel încât, principalele elemente care definesc un tabel de date sunt:
Înregistrările (articole, records), entitatea de lucru a tabelului de date.
Câmpurile
(fields), informaţiile distincte din cadrul unei
înregistrări.
Linia
de
antet
(header
row) care permite identificarea
informaţiilor cuprinse în înregistrări. O zonă dintr-un Sheet poate fi definită ca tabel de date, devenind astfel o entitate de sine stătătoare, utilizând tab-ul Home, secţiunea Styles:
Prin acţionarea butonului Format as Table se alege stilul sub care va fi afişat tabelul (dintre stilurile predefinte). El va primi un nume (Table1, Table2, …) vizibil în tab-ul Design, Properties… :
Denumirile din cap de tabel prin care sunt precizate câmpurile tabelului de date trebuie să fie diferenţiate în mod corespunzător. Dacă un titlu de coloană trebuie scris pe mai multe rânduri se poate folosi combinaţia de taste Alt+Enter . Prin clic dreapta pe zona selecţionată (Format cells,
Bazele informaticii
35
Tabele de date. Grafice
Alignment) se pot face precizări legate de afişarea textului cum ar fi: alinierea
textului
pe
orizontală
sau
pe
verticală
(Horizontal,
Vertical), scrierea multirând (Wrap text), adaptarea dimensiunii textului la dimensiunea celulei (Shrink to fit), contopirea mai multor celule (Merge cells), orientarea direcţională a textului (Orientation).
datele de pe coloană trebuie să fie de acelaşi tip; liniile (coloanele) nu trebuie să fie goale sau întrerupte; datele de tip text nu trebuie să înceapă cu spaţiu (se pot crea probleme la căutarea sau sortarea în listă).
↓ Exemplu____________________________________________________________________________________ Un tabel este definit ca tabel de date (a se observa apariţia butoanelor săgeţi, lângă denumirile din capul de tabel, utilizate pentru prelucrarea conţinutului tabelului):
____________________________________________________________________________________Exemplu ↑
Ştergere (Delete) şi inserare (Insert) Actualizarea unui tabel de date se poate face la nivel de celulă, se pot introduce (Insert) linii/coloane noi sau se pot elimina cele existente (Delete). Inserarea de noi linii şi coloane depinde de poziţia cursorului în tabel şi este edificată, de obicei, prin clic dreapta, cu mouse-ul, şi alegerea opţiunii Insert:
Bazele informaticii
36
Tabele de date. Grafice
↓ Exemplu____________________________________________________________________________________
Inserarea unei linii (Table Rows Above):
Inserarea unei coloane (Table Columns to the Left):
____________________________________________________________________________________Exemplu ↑
Ştergerile de linii şi coloane se realizează, de asemenea, prin clic dreapta cu mouse-ul şi alegerea opţiunii Delete :
↓ Exemplu____________________________________________________________________________________
Ştergerea unei linii (Table Rows) – linia a doua din tabelul anterior:
Bazele informaticii
37
Tabele de date. Grafice
Ştergerea unei coloane (Table Columns) – coloana a doua:
___________________________________________________________________________________Exemplu ↑
Sortare şi filtrare (Sort & Filter)
De cele mai multe ori datele trebuie prelucrate într-o ordine diferită de cea în care au fost introduse în tabelul de date. Procedeul de ordonare a tabelelor de date (selecţie pe verticală), după diferite criterii, este realizat pe nivele (Levels). Ordonarea poate fi ascendentă sau descendentă. Nu întotdeauna trebuie prelucrate toate datele din tabel. Acest lucru implică filtrări (selecţia pe orizontală), care reprezintă posibilitatea de a introduce în prelucrare doar datele care îndeplinesc o anumită condiţie. Filtrarea se poate realiza pe o valoarea anumită cuprinsă în unul din câmpurile bazei de date şi poate fi personalizată prin criterii de filtrare particularizată (Custom), care permite precizarea condiţiilor logice: Is Greater Than (mai mare decât), Equals (egal cu), Does Not Equal (diferit de), Begins With (începe cu), etc.
Pentru efectuarea sortărilor şi a filtrărilor este utilizat butonul Sort & Filter (tab-ul Home, secţiunea Editing):
În funcţie de tipul datelor de pe coloane este afişat un meniu vertical ce permite lansarea operaţiilor de sortare sau filtrare:
Bazele informaticii
38
Tabele de date. Grafice
Selectarea opţiunii Filter determină afişarea/ascunderea butoanelor săgeţi asociate
denumirilor
de
câmpuri,
deci,
utilizarea
sau
neutilizarea
acestora. Acţionarea butoanelor săgeţi determină apariţia, funcţie de tipul datelor din câmpul activ – textual sau numeric, unui meniu vertical, din care pot fi selectate mai multe opţiuni:
Prin procedeul de sortare se poate stabili ordinea în care liniile din tabel intră în prelucrare. ↓ Exemplu___________________________________________________________________________________
Sortare după câmpul Media (în ordine descrescătoare) - Sort Largest to Smallest (se acţionează butonul săgeată asociat câmpului):
Bazele informaticii
39
Tabele de date. Grafice
Sortare în ordine alfabetică - Sort A to Z (se acţionează butonul săgeată asociat câmpului Student):
____________________________________________________________________________________Exemplu ↑ Dacă se impune necesitatea ordonării unui tabel de date după mai multe criterii – sortare pe nivele, se alege opţiunea Custom Sort… din meniul vertical apărut la acţionarea butonului Sort & Filter (tab-ul Home, Editing). În fereastra Sort se pot adăuga nivele - Add Level sau se pot elimina - Delete Level. ↓ Exemplu____________________________________________________________________________________ Pentru sortarea tabelului utilizat în exemplificările anteriore, pe anul de studii (primul Level) şi în ordinea descrescătoare a mediilor (al doilea Level) fereastra Sort are următorul conţinut:
iar tabelul de date va fi afişat astfel:
___________________________________________________________________________________Exemplu ↑
Bazele informaticii
40
Tabele de date. Grafice
Prin procedeul de filtrare, prelucrarea unui tabel este limitată doar la numite înregistrări. Pentru stabilirea unor criterii de filtrare se acţionează butoanele sub formă de săgeţi din antetul tabelului şi, funcţie de tipul de date de pe coloane - Text Filters, Number Filters, acestea se aleg din meniurile contextuale:
Opţiunea Custom Filter… permite stabilirea intervalului de valori pe care se va realiza prelucrarea tabelului.
↓ Exemplu____________________________________________________________________________________ Pentru o filtrare particularizată pe valori ale mediilor strict mai mari ca 9 şi mai mici sau egale cu 10, fereastra Custom AutoFilter va avea următorul conţinut:
Bazele informaticii
41
Tabele de date. Grafice
astfel încât tabelul va fi afişat astfel:
___________________________________________________________________________________Exemplu ↑
Pentru invalidarea unor criterii de filtrare deja stabilite,
se alege, din
meniul contextual aferent, opţiunea Select All. Astfel tabelul de date are disponibile, spre prelucrare, toate înregistrările.
Grafice (diagrame)
Datele din tabele devin mai convingătoare atunci când sunt prezentate sub formă de histograme, diagrame circulare, grafice liniare, etc. Mediile de realizare a foilor de calcul electronic conţin facilităţi de redare grafică a tabelelor. Construirea unui grafic, pornind de la un tabel dat, presupune următoarele etape : 1) Alegerea tipului de grafic: a) linii (line) b) bare (bar) c) stivă de bare (stacked bar) d) diagrame circulare (pie) 2) Alegerea zonelor din tabel în care se găsesc seriile de date care se doresc a fi reprezentate şi seria de date care va constituii axa orizontală a graficului (de regulă date temporale - ani, zile, etc). 3) Alegerea datelor ce vor fi marcate pe axa verticală (de regulă cantităţi, preţuri, etc). 4) Alegerea titlurilor axelor şi a titlului graficului. 5) Stabilirea legendelor şi a altor detalii care contribuie la claritate reprezentării grafice.
Bazele informaticii
42
Tabele de date. Grafice
6) Alegerea datelor care vor fi marcate cu valori în clar în interiorul graficului.
pentru a putea stabili corelaţii între diverse serii de date se recomandă reprezentare simultană pe acelaşi grafic a uneia sau a mai multor serii de date, dar nu a mai mult de şase; marcarea axelor, scrierea titlurilor şi folosirea legendelor; folosirea, dacă este necesară identificarea unor valori pe grafic, liniilor paralele verticale care prelungesc gradaţiile verticale; marcarea valorilor reprezentative pe grafic; Crearea unui grafic în Excel începe cu specificarea datelor (seriilor) ce vor fi reprezentate şi presupune selectarea blocurilor de date numerice din foaia electronică de calcul. Liniile din cadrul unui bloc selectat constituie, de obicei, seriile.
Etapele realizării unui grafic :
1) Se selectează seriile; 2) Se fixează colţul stânga-sus al zonei unde va fi afişat graficul; 3) Se selectează tab-ul Insert;
Bazele informaticii
43
Tabele de date. Grafice
4) Din secţiunea Charts (tipuri de diagramă) se alege tipul de grafic. Componentele unui grafic sunt constituite din obiecte şi pot fi modificate prin instrumente de tip Chart (titlul graficului, denumirea axelor, etichetarea datelor, legende). Însuşi grafic este un obiect care, atunci când este selectat, determina apariţia tab-ului Design. Pentru a modifica un obiect din cadrul graficului se utilizează mouse-ul.
Crearea şi prelucrarea tabelelor de date. Grafice.
Bazele informaticii
44
Tabele de date. Grafice
1. În vederea centralizării şi prelucrării datelor privind comerţul mondial pe anul 2006 au fost înregistrate valorile privind exporturile, importurile (milioane de dolari) şi populaţia (milioane de locuitori):
Să se constituie tabelul de date corespunzător şi să se afişeze următoarele liste: a) lista ţărilor în ordine alfabetică; b) lista exporturilor şi a importurilor în ordine descendentă; c) topul ţărilor cu cele mai mari deficite comerciale;
se ataşează o nouă coloană pe care se calculează exportul – importul,
pentru o sortare ascendentă:
Bazele informaticii
45
Tabele de date. Grafice
d) topul ţărilor cu cel mai mare export pe cap de locuitor;
se ataşează o nouă coloană pe care se calculează exportul/populaţie,
pentru o sortare descendentă
e) lista ţărilor pentru care exporturile sunt cuprinse între 100 şi 300 miliarde de dolari.
2. Să se facă reprezentările grafice corespunzătoare punctelor 1b, 1c, 1d folosind diferite tipuri de diagrame .
pentru 1b
Bazele informaticii
46
Macrocomenzi
Unitatea de învăţare Nr. 7 Macrocomenzi Cuprins Obiectivele Unităţii de învăţare Nr. 7 7.1. Înregistrarea unei macrocomenzi VBA 7.2. Rezumat Lucrare de verificare Unitate de învăţare Nr. 7
Bazele informaticii
Pagina 48 48 55 55
47
Macrocomenzi
Limbajul Visual Basic for Applications (VBA), integrat în editoarele din familia Microsoft Office (Word, Excel, PowerPoint, Acces, Outlook), constituie un mediu de programare puternic, asemănător celui din Visual Studio (Visual Basic, C++, Java, etc.). Acest limbaj de programare poate fi utilizat pentru: înregistrarea acţiunilor utilizatorului (de exemplu: introducerea şi formatarea unui text, rularea unor comenzi de meniu, lansarea opţiunilor din casetele de dialog etc.) prin transpunerea lor în secvenţe de instrucţiuni Basic, care definesc un script numit macrocomandă; gestionarea conţinutului documentului Office, cu care VBA-ul poate comunica; dezvoltarea unor programare independente de conţinutul documentului Office (este necesară deschiderea, cel puţin formal, unei aplicaţii Word, Excel, etc.). O macrocomandă (apelată printr-o comandă de meniu, apăsarea unei taste sau a unui buton dintr-o bară de instrumente) reprezintă o listă de instrucţiuni - instrucţiuni de macrocomandă (macro statements). Unele instrucţiuni execută operaţii specifice macrocomenzii, însă cele mai multe corespund acţiunilor înregistrate ale utilizatorului. Este, astfel, posibilă automatizarea activităţilor de rutină sau repetitive şi derularea lor, prin lansarea macrocomenzilor. Mediul de programare abordat este Visual Basic for Applications inclus în Microsoft Office 2007 dar, informaţiile sunt, în general, valabile şi pentru suita Office 2003. Acesta conţine un instrument complet de dezvoltare VBA, numit
Visual Basic Editor.
Înregistrarea unei macrocomenzi VBA
Cea mai simplă metodă de creare a unei macrocomenzi este utilizarea resursei Macro Recorder. Prin această metodă, operaţiunile dorite a fi automatizate sunt înregistrate pas cu pas (editare text, comenzi de meniu, casete de dialog …). Bazele informaticii
48
Macrocomenzi
Macro Recorder-ul transformă corespunzătoare (module VBA).
toate
operaţiile
în
instrucţiuni
Basic
În Word, Excel sau PowerPoint (celelalte programe din pachetul Office nu posedă funcţii de înregistrare ale macrocomenzilor) înregistrarea unei macrocomenzi începe prin stabilirea unui nume pentru macrocomandă (cum ar fi Macro1), dar acest nume se poate schimba cu orice alt nume, în caseta de text Macro name: numele nu pot avea mai mult de 255 de caractere, dar este recomandată specificarea unor nume scurte, uşor accesibile; primul caracter trebuie să fie o literă sau o liniuţă de subliniere (_); în nume nu sunt permise spaţiile sau punctele. ↓ Exemple____________________________________________________________________________________ În Word, macrocomanda poate fi asociată cu un buton (Button) de pe o bară de instrumente, sau, cu o combinaţie de taste (Keyboard) → Alt+, Ctrl+. Ea se poate stoca (Store macro in) în orice şablon deschis (devine astfel disponibilă pentru orice document care foloseşte şablonul) sau în orice document deschis (va putea fi utilizată doar în documentul respectiv). Caseta de text Description conţine, opţional, descrierea macrocomenzii. În Excel, macrocomanda va fi plasată în registrul de lucru curent, într-un registru de lucru nou sau în registrul Personal Macro Workbook (macrocomenzile vor fi disponibile în toate registrele de lucru).
____________________________________________________________________________________Exemple ↑
Bazele informaticii
49
Macrocomenzi
Deoarece modulul de înregistrare a macrocomenzilor memorează toate acţiunile
utilizatorului,
este
indicată
neefectuarea
unor
comenzi
neesenţiale pe parcursul înregistrării. Intrarea în starea ”Recording” este marcată în bara de stare a programului Office. Acest buton va fi acţionat în momentul terminării înregistrării:
În PowerPoint, macrocomanda se poate memora în orice prezentare
deschisă. Ea va fi creată utilizând editorul VBA.
↓
Exemplu (Word) ____________________________________________________________________
Adăugarea unui buton de rulare a unei macrocomenzi, în Quick Access Toolbar:
Quick Access Toolbar
se deschide în editare un document; se iniţiază înregistrarea unei macrocomenzi, ; se stabileşte numele macrocomenzii (aici Antet) care va fi asociată unui buton (Assign macro to, Button); în fereastra Word Option, Customize, , ; noul buton va apare în lista Quick Access:
Bazele informaticii
50
Macrocomenzi
. se acţionează butonul din fereastra Modify Button se selectează un ): simbol (de exemplu
în Quick Access Toolbar va apare noul buton:
se introduce, în fereastra documentului un text (pentru dată şi oră, se selectează din tab-ul Insert,
):
Universitatea "Ovidius" Constanţa Facultatea de Ştiinţe Economice
Data: 11 februarie 2007 Ora: 11:24
se încheie înregistrarea apăsând butonul
, din bara de stare;
macrocomanda, fiind asociată documentului, poate fi utilizată oricând prin acţionarea butonului
(a se remarca actualizarea datei şi a orei):
Universitatea "Ovidius" Constanţa Facultatea de Ştiinţe Economice
Data: 13 februarie 2007 Ora: 17:16
vizualizarea conţinutului macrocomenzii VBA:
Bazele informaticii
, Edit în Editorul
51
Macrocomenzi
În corpul macroinstrucţiunii apar instrucţiuni ale limbajului de programare Visual Basic în care sunt transformate acţiunile utilizatorului. Acest instrucţiuni au mai multă sau mai puţină semnificaţie, mai ales pentru un programator începător. Deocamdată, important este faptul de a ştii că ele pot fi modificate. ___________________________________________________________________________________Exemplu ↑
O macrocomandă obişnuită are următoarele elemente: Cuvântul cheie Sub (prescurtare de la subrutină) - acest cuvânt cheie marchează începutul unei macrocomenzi. Numele macrocomenzii - după cuvântul cheie Sub este plasat numele unei macrocomenzi urmat de paranteze. Comentariile - rânduri care încep cu un apostrof ('). Comentariile nu sunt prelucrate atunci când macrocomanda este rulată. Instrucţiunile macrocomenzii - corpul principal al macrocomenzii (liniile dintre cuvintele cheie Sub şi End Sub).
Bazele informaticii
52
Macrocomenzi
Dacă, în bara de mesaje (Message Bar), este notificat faptul că executarea
macrocomenzilor
nu
este
permisă,
din
motive
de
securitate,utilizatorul poate lua decizia adecvată acţionând butonul :
Rularea unei macrocomenzi se poate realiza şi prin shortcut-ul
Alt+F8.
↓
Exemplu (Excel) ___________________________________________________________________ se deschide în editare un document; se poziţionează cursorul (de exemplu în celula B2); se iniţiază înregistrarea unei macrocomenzi, ; se stabileşte numele macrocomenzii (aici Data) care va fi asociată cu combinaţia de taste Ctrl +d ; în celula curentă se introduce funcţia TODAY():
se salvează foaia electronică de calcul: Save as type, Excel MacroEnabled Workbook ; se deschide documentul Excel, dându-se permisiunea de executare a , Enable this content ; macrocomenzilor: Bazele informaticii
53
Macrocomenzi
se poate introduce data curentă, în orice celulă (de exemplu în D4) utilizând shortcut-ul Ctrl +d :
vizualizarea conţinutului macrocomenzii VBA:
, Edit în Editorul
la executarea macrocomenzii se poate constata că, este introdusă data curentă, dar cursorul se va deplasa, mereu, în celula B3 (pentru că, la înregistrarea macrocomenzii, după introducerea funcţiei de dată calendaristică a fost apăsată tasta Enter). Dacă, în editorul VBA, se şterge instrucţiunea Range(”B3”).Select, activarea celulei B3 va fi
anulată. ____________________________________________________________________________________Exemplu ↑
Macrocomenzile sunt asociate documentelor Office. Ele pot fi salvate
împreună cu aceste documente: din lista Save as type, se selectează tipul de fişier ce conţine menţiunea Macro-Enabled.
Bazele informaticii
54
Macrocomenzi
O macrocomandă reprezintă o listă de instrucţiuni scrise în limbajul de programare Basic, varianta VBA.
VBA este un mediu de programare puternic, asemănător celui din Visual Studio (Visual Basic, C++, Java, etc.)
Instrucţiunile unei macrocomenzi pot fi editate - se pot modifica, şterge instrucţiunile Basic existente, se pot adăuga altele noi.
Macrocomenzile pot fi rulate de câte ori este nevoie. Din motive de securitate, la lansarea aplicaţiilor
Office, se notifică existenţa macrocomenzilor, executarea lor nefiind permisă în mod implicit.
Să se înregistreze şi să se ruleze macrocomenzile din exemplele marcate cu simbolul
Bazele informaticii
.
55
Editorul VBA
Unitatea de învăţare Nr. 8 Editorul VBA Cuprins Obiectivele Unităţii de învăţare Nr. 8 8.1. Lansarea editorului VBA 8.2. Mediul de editare VBA 8.3. Module VBA 8.3.1. Identificarea modulelor 8.3.2. Rularea modulelor 8.3.3. Save şi Open pentru aplicaţiile Office şi modulele asociate 8.3.4. Sistemul de asistenţă la scrierea codului 8.3.5. Proceduri 8.3.5.1. Proceduri Sub 8.3.5.2. Proceduri Function Formulare VBA 8.4. 8.4.1. Crearea unui formular 8.4.2. Rularea unui formular 8.4.3. Controale OLE 8.5. Documente Office active 8.5.1. Controale ActiveX 8.5.2. Proceduri eveniment 8.6. Rezumat Lucrare de verificare Unitate de învăţare Nr. 8
Bazele informaticii
Pagina 57 57 57 59 59 59 60 60 61 61 63 64 65 66 66 68 69 70 72 73
56
Editorul VBA
Programele din suita Office au asociate un editor VBA numit VBE care facilitează scrierea şi editarea unor secvenţe program în limbajul Visual Basic (în cercurile programatorilor profesionişti, Visual Basic Editor este numit mediu integrat de dezvoltare sau IDE). VBE transpune acţiunile utilizatorului în instrucţiuni Basic sub forma macrocomenzilor, prin procedeul de înregistrare. Se pot edita însă şi macrocomenzi proprii, fie pornind de la zero, fie utilizând ca punct de plecare o macrocomandă înregistrată.
Lansarea editorului VBA Activarea editorului VBE poate fi realizată în mai multe moduri: prin vizualizarea unei macrocomenzi înregistrate; prin shortcut-ul Alt+F11 (de fapt, acest shortcut este un comutator care face trecerea între Visual Basic Editor şi aplicaţia de bază). acţionarea butonului (Visual Basic) din tab-ul Developer. Acest tab nu este vizualizat implicit, dar poate fi activat: clic pe butonul Microsoft Office Options , Popular, .
,
Mediul de editare VBA Editorul de programe Basic oferă instrumente de lucru, cum ar fi: Bara de meniuri, MenuBar, conţine o serie de meniuri, fiecare dintre acestea conţinând comenzi. De exemplu, se poate selecta comanda Run Sub/UserForm din meniul Run. Multe dintre comenzile meniurilor au aşanumitele taste rapide (hotkeys) care se pot folosi pentru a selecta Bazele informaticii
57
Editorul VBA
comanda direct din tastatură (F5 în cazul de faţă) – fără deschiderea meniului. MenuBar ToolBar
Fereastra Project
Fereastra de cod Fereastra Properties
Bara de instrumente, Toolbar, furnizează acces la multe dintre comenzile cele mai des utilizate în limbajul Visual Basic. Multe dintre butoanele din bara de instrumente sunt doar modalităţi rapide de selectare a unei comenzi din meniuri. De exemplu, butonul (Save) salvează documentul din proiectul curent, având aceeaşi pictogramă şi acelaşi efect ca şi selectarea comenzii din meniul File. Fereastra Project oferă o trecere în revistă a obiectelor din proiectul curent. De exemplu, un modul sau un formular utilizator (UserForm) va fi unul dintre aceste obiecte. De fapt, în unele proiecte pot exista mai multe obiecte. Executând un clic pe semnele plus(+) şi minus(-) de lângă dosarele din fereastra Project, se pot afişa mai multe sau mai puţine detalii. Fereastra Properties afişează proprietăţile obiectului care este curent selectat. Proprietăţile sunt atribute ale unui obiect. De exemplu, modulul are o proprietate numită (Name) pentru identificarea acestuia. Fereastra de cod. Chiar dacă limbajul Visual Basic permite construirea Bazele informaticii
58
Editorul VBA
unei părţi din proiect, prin procedeul „Recording”, este necesară şi scrierea codului sursă al programului. Programele conţin linii de comenzi care se introduc în fereastra de cod.
Module VBA În Visual Basic Editor, macrocomenzile sunt grupate în aşa numitele module (esenţa limbajului VBA). Modulele sunt secţiuni care grupează instrucţiuni Basic. Dacă documentul Office are asociată o macrocomandă, instrucţiunile care o compun sunt afişate în fereastra de cod. Pentru editarea propriilor module este necesară inserarea acestora (prin meniu, Insert, sau utilizând butonul
din Toolbar).
Identificarea modulelor Atunci când se introduce un modul nou într-un proiect, VBA îi atribuie un nume generic, cum ar fi Module1, Module2, …. Practic este necesară utilizarea unor nume sugestive pentru ca, prin acestea, modulele să poată fi diferenţiate. Pentru a schimba numele unui modul: Se selectează modulul în fereastra Project Explorer. În fereastra Properties, proprietatea (Name), se tastează numele modulului. Numele utilizat începe cu o literă, nu conţine spaţii sau semne de punctuaţie (liniuţele de subliniere sunt acceptate) şi nu are mai mult de 31 de caractere. Rularea modulelor Modulele includ o secvenţă de instrucţiuni Basic care trebuie să fie corecte din punct de vedere sintactic. Detectarea erorilor se poate efectua prin compilare (Debug, Compile Project). În aplicaţiile Office există mai multe metode de rulare a modulelor, însă cel mai des utilizate sunt următoarele două: În cadrul editorului, se acţionează, de obicei, butonul ToolBar. Aceeaşi comanda se poate lansa şi prin meniu:
din ,
. În aplicaţia Office, caseta Macros evidenţiază modulul care poate fi executat prin clic pe butonul Run. Caseta Macros este vizualizată: prin tab-ul View, Macros , cu Shortcut-ul Alt+F8 (cel mai frecvent).
Bazele informaticii
59
Editorul VBA
şi
pentru aplicaţiile Office şi modulele asociate
Modulele create într-un document Office pot fi stocate în două moduri: Împreună cu documentul. În acest caz este necesar ca, la salvare, să se facă precizarea tipului de fişier: Macro-Enabled (Save As type). Pentru un astfel de fişier, atunci când se deschide, în Message Bar va apare mesajul:
Se poate permite executarea macrocomenzilor în fereastra Security Alert – Macro (clic pe butonul Options…) : Separat, ca fişiere cu extensia .bas (fişiere Basic). Pe această cale se exportă/importă modulul ca fişier .bas, de fapt un fişier text care cuprinde codul VBA. Exportare/importarea unui modul este realizată prin meniul editorului (File, Export File… Ctrl+E / File, Import File… Ctrl+M). Sistemul de asistenţă la scrierea codului VBA oferă sugestii şi alternative în timpul tastării codului, prin instrumentul
IntelliSense, după ce s-a introdus un cuvânt-cheie care este recunoscut ca
având parametri. Editorul de program afişează lista valorilor posibile pentru respectivii parametrii. Parametri semnifică proprietăţile unui control (care în cod se separă de numele controlului prin punct), argumentele unei proceduri sau funcţii, tipurile de dată etc. Această facilitate se numeşte Auto Members. Poziţionarea în listele respective se face mai uşor prin tastarea primelor litere ale cuvântului dorit („Int" pentru Integer). Scrierea efectivă a cuvântului dorit are loc prin apăsarea tastei Enter, tasta „virgulă" dacă se scriu elementele unei liste.
La tastarea liniilor de cod, VBA execută mai multe operaţii: Formatează culoarea fiecărui cuvânt din linie. În mod prestabilit, cuvintele cheie din VBA sunt afişate cu albastru, comentariile cu verde,
Bazele informaticii
60
Editorul VBA
erorile cu roşu, iar celelalte texte cu negru. Adaugă linii şi cuvinte noi, specifice limbajului. De exemplu, dacă se introduce cuvântul cheie Sub urmat de numele procedurii, VBA adaugă automat o pereche de paranteze rotunde după nume şi introduce o linie End Sub pentru a marca sfârşitul procedurii. Cuvintele cheie sunt schimbate în formatul potrivit (dacă se tastează end sub, VBA transformă expresia în End Sub la apăsarea tastei Enter. Verifică erorile de sintaxă, adică erorile care apar atunci când un cuvânt este ortografiat greşit, o funcţie este introdusă incorect, etc. VBA semnalează o eroare de sintaxă, fie afişând o casetă de dialog, fie neafişând cuvântul, în formatul şi culoarea corespunzătoare. ↓ Exemplu____________________________________________________________________________________ Într-un modul se tastează
sub Salut,
Se apasă tasta Enter, Se apasă tasta Tab, Se introduce textul msgbox(”Bun
venit in VBA!”),
Modulul va fi afişat astfel:
____________________________________________________________________________________Exemplu ↑
În exemplificările următoare, pentru afişarea unor casete de mesaj, se va utiliza funcţia MsgBox. Proceduri Un modul este compus din una sau mai multe unităţi de bază numite proceduri. Există două tipuri de proceduri: proceduri Sub (subrutine) proceduri Function (funcţii) Pentru lucrul cu procedurile trebuie avută în vedere, în primul rând, definirea grupului de instrucţiuni care vor constitui corpul procedurii şi, în al doilea rând apelul lor (de câte ori este nevoie). Proceduri
Sub
O procedură Sub reprezintă un grup de instrucţiuni care primeşte, de la programul apelant un şir de parametri, realizează anumite prelucrări, după care dă controlul programului apelant.
Bazele informaticii
61
Editorul VBA
Definiţia sintactică este (Exit Sub este opţional şi reprezintă punctul de ieşire din procedură, dacă lipseşte procedura se termină la End Sub):
Sub NumeProcedură (argument1, argument2, …) [Exit Sub]
End Sub Apelul procedurii (cuvântul Call poate să nu apară): [Call] NumeProcedură (parametru1, parametru2, …) Argumentele de apel - 0, 1 sau mai multe - sunt în corespondenţă biunivocă cu parametrii de transmis. Această corespondenţă este determinată de ordinea şi tipul argumentelor aflate în listă.
↓
Exemple______________________________________________________________________________
Procedura apelantă este ex1(), iar cea apelată este ex2() – nu au argumente:
Procedura apelantă este ex1(), iar cea apelată este ex2() – are 2 argumente:
____________________________________________________________________________________Exemple ↑
Bazele informaticii
62
Editorul VBA
Proceduri
Function
O funcţie definită de utilizator reprezintă un grup de instrucţiuni care primeşte un set de parametrii (argumentele funcţiei) de la programul apelant şi îi returnează acestuia valoarea. Numele unei funcţii poate intra în componenţa expresiilor de calcul ca operand. Definiţia sintactică este:
Function NumeFuncţie (argument1, argument2, …) [As ] [Exit Function]
End Function Apelul funcţiei se realizează prin parametrilor, pusă între paranteze.
numele
funcţiei
urmat de lista
Între lista parametrilor de apel şi lista argumentelor funcţiei trebuie să existe o
corespondenţă
biunivocă, determinată de ordinea
argumentelor în listă.
Exit Function este opţional şi reprezintă punctul de ieşire din procedură - dacă lipseşte procedura se termină la End Function.
Argumentul
As,
opţional,
impune
tipul
valorii
returnate
la
terminarea funcţiei. ↓
Exemple______________________________________________________________________________ Din procedura Sub ex1() este apelată procedura Function ex2() – funcţie fără nici un argument:
Bazele informaticii
63
Editorul VBA
O funcţie ValoareTva, pentru calculul valorii TVA, poate fi definită într-un modul:
____________________________________________________________________________________Exemple ↑
Tratarea mai pe larg a acestor secţiuni de program va fi făcută în capitolul Module VBA.
Formulare VBA Cu ajutorul formularelor (se poate utiliza şi termenul form) se defineşte interfaţa grafică, asemănătoare cu cea editată în mediile de programare Visual Studio, astfel că practica în VBA poate fi considerată introductivă către acestea. În formular se pot introduce controale OLE (numite şi controale ActiveX), situate în caseta cu instrumente ToolBox, care permit interacţiunea cu utilizatorul. Un control are atribute (proprietăţi) ajustabile şi sesizează evenimente (este „viu”). Controalelor li se asociază secvenţe de cod, sub forma unor proceduri, numite proceduri eveniment.
Bazele informaticii
64
Editorul VBA
Design
Project
Properties
Formular
Toolbox
Caseta cu instrumente
Crearea unui dialog utilizator (termenul utilizator este adăugat pentru diferenţierea de dialogurile încorporate mediului) necesită parcurgerea mai multor etape: crearea unui formular (UserForm), care constituie suportul pe care sunt adăugate controalele; plasarea controalelor pe formular; stabilirea proprietăţilor pentru controale; scrierea procedurilor asociate controalelor, de răspuns la evenimentele declanşate prin acţionarea lor. Crearea unui formular În Visual Basic Editor crearea unui formular (prin meniu, Insert, sau utilizând butonul proiectare (design mode).
Bazele informaticii
din Toolbar) se realizează în modul de
65
Editorul VBA
Rularea unui formular În modul de execuţie (run mode) controalele răspund evenimentelor. Pentru rularea unui formular se acţionează, de obicei, butonul din ToolBar (aceeaşi comanda se poate lansa şi prin meniu: Run, Run Sub/UseForm). Se pot rula doar proiectele corecte sintactic (verificare prin compilare: Debug, Compile Project).
Controale OLE Fereastra UserForm include obiectul care are UserForm1 în bara de titlu. Pe formular se pot introduce, din Toolbox, controalele care definesc interfaţa cu utilizatorul, cum ar fi:
Buton
Etichetă
Casetă de text
Buton radio (opţiune)
Casetă cu listă
Listă derulantă
Casetă de imagine
Numele proiectului apare în fereastra Project Explorer, iar proprietăţile controalelor (dar şi ale formularului) sunt afişate în fereastra Properties. Aceste proprietăţi pot fi stabilite manual (din fereastra Properties) sau prin instrucţiuni program. Pentru a adăuga un control în formular se execută clic pe pictograma corespunzătoare din Toolbox şi se trasează în fereastra formularului (o linie punctată gri şi punctele de dimensionare înconjoară controlul). Mărimea controlului se poate stabili utilizând punctele de dimensionare. Când se plasează indicatorul mouse-ului deasupra unui punct de dimensionare, acesta îşi modifică înfăţişarea pentru a indica direcţiile în care se poate trage acesta, ţinând apăsat butonul stâng al mouse-ului. Pentru a muta controlul, se plasează indicatorul mouse-ului deasupra sa, cursorul acestuia transformându-se într-o pictogramă cu patru săgeţi. Butonul mouse-ului se ţine apăsat şi se deplasează cursorul. Bazele informaticii
66
Editorul VBA
Se pot redimensiona majoritatea controalelor, trăgând de punctele lor de dimensionare. De asemenea se poate realiza deplasarea lor. ↓
Exemplu_____________________________________________________________________________ Adăugarea unui buton în formular: se execută clic pe controlul CommandButton şi se trasează în fereastra formularului; Textul înscris în antetul formularului (UserForm1) se poate modifica stabilind, de exemplu, proprietatea Caption la valoarea Fereastra mea; Pentru buton, proprietăţile Caption şi Name se modifică la valoarea Start:
Atunci când se execută dublu clic pe control, limbajul VBA afişează fereastra de cod în care sunt incluse şi liniile de cod implicite (procedură). Procedura Private Sub Start_Click() se va executa ori de câte ori utilizatorul, în faza de execuţie, acţionează butonul (procedura este un eveniment pe care Windows îl transmite programului spre a fi administrată). Programatorul poate adăuga propriul lui cod sursă. De exemplu instrucţiunea MsgBox (”Bun venit in VBA”) spune limbajului VBA să afişeze o casetă de mesaj: Sub Start_Click() MsgBox („Bun venit in VBA”) End Sub La rularea programului ( ) va apare caseta de mesaj conţinând textul ”Bun venit in VBA”:
Bazele informaticii
67
Editorul VBA
___________________________________________________________________________________Exemplu ↑
Tratarea mai pe larg a controalelor care definesc interfaţa grafică cu
utilizatorul va fi făcută în capitolul Formulare VBA.
Documente Office active Controalele ActiveX (în cazul formularelor mai sunt denumite şi controale OLE, pentru a face diferenţierea) pot fi plasate şi direct în documentele aplicaţiilor: documente Word, foi de calcul Excel, diapozitive PowerPoint. În Word controalele se introduc pe stratul de text și sunt selectate din grupul Controls, tab-ul Developer:
Aceste controale au atribute cu proprietăţi ajustabile, recunosc evenimente. Prin scrierea procedurilor eveniment, interfaţa cu utilizatorul poate fi personalizată şi definită corespunzător. Pot fi adăugate controale unui document în acelaşi mod în care controalele se adaugă unui formular. Astfel, unui document i se pot incorpora casete de text, liste, butoane radio, pentru a-l transforma într-un formular activ (online). Deşi modul de operare al controalelor ActiveX este foarte asemănător cu cel al controalelor OLE, există unele deosebiri: Bazele informaticii
68
Editorul VBA
Adăugarea controalelor se realizează cu ajutorul cutiei de unelte ActiveX Controls (şi nu Toolbox ca în VBE). Editarea lor este permisă în modul Design mode iar activarea lor în Run Mode. Bascularea între cele două moduri este realizată în Word din tab-ul (dar şi în Excel) prin acţionarea butonului Developer. În PowerPoint se trece în Slide Show pentru a se ajunge în Run Mode şi se revine într-un context de editare pentru Design Mode. Proprietăţile controalelor se stabilesc după ce se acţionează butonul .
Evenimentele dintr-un document Office şi dintr-un formular fiind uneori diferite şi tratările acestora sunt diferite. Pentru editarea şi utilizarea documentelor Word active se impune respectarea următoarelor reguli: Controalele ActiveX se pot adăuga stratului (layer-ului) de text. Controlul este inserat ca un caracter, respectându-se atributele liniei şi paragrafului. Controalele nu pot fi aduse prin drag&drop, cu mouse-ul, în document. La click pe un control, acesta este inserat în punctul de inserţie pe text. În Design Mode, controalele ActiveX sunt disponibile pentru editare. În Run Mode controalele reacţionează la evenimente. Controale ActiveX
Controlul CommandButton este tipic pentru startul evenimentelor. Codul program de executat este plasat în procedura eveniment Click. Textul afişat pe buton este conţinut în proprietatea Caption, iar numele lui în proprietatea (Name). Mediul de proiectare VBA atribuie nume butoanelor (CommandButton1, CommandButton2, …) dar este indicat ca utilizatorul să folosească denumiri semnificative.
Controlul Label este utilizat pentru afişarea unor texte care nu pot fi editate de utilizator. Este util pentru descrierea altor obiecte din formular cum ar fi TextBox.
Bazele informaticii
69
Editorul VBA
Acest control este unul dintre cele mai folosite în programarea interfeţelor grafice datorită avantajelor pe care le oferă la introducerea datelor şi la manipularea lor. Defineşte un câmp de editare în care utilizatorul poate introduce un text (proprietatea Text). Aspectul textului afişat este determinat de proprietăţile Font şi ForeColor. La fel ca şi la alte controale, proprietăţile pot fi modificate prin cod program, în timpul rulării aplicaţiei. O casetă de text poate fi folosită în modul activ (utilizatorul are acces la conţinutul său) sau în modul inactiv (utilizatorul poate doar să vizualizeze conţinutul, textul fiind protejat în cazul în care se încearcă modificarea sa).
Este controlul care se foloseşte atunci când trebuie selectată doar o singură opţiune din mai multe posibile.
Proceduri eveniment
Procedurile eveniment sunt secvenţe de instrucţiuni asociate diferitelor controale la activarea/dezactivarea acestora. Afişarea ferestrei de cod este realizată prin executarea unui dublu clic pe controlul pentru care se doreşte scrierea instrucţiunilor program. Numele procedurii (Click - pentru CommandButton sau OptionButton, Change – pentru TextBox) este legat de numele controlului prin simbolul _ (underline) : Private Sub control_procedura() End Sub În instrucţiunile Basic, referirea la proprietatea unui control se face prin construcţia control.proprietate – numele proprietăţii este legat de numele controlului printr-un punct.
La testarea secvenţelor de cod se produc, deseori, erori de sintaxă sau de natură logică, mai ales de către începători. Pentru a le rezolva este necesar un Reset (din meniul Run al VBA-ului):
Bazele informaticii
70
Editorul VBA
↓
Exemplu (Word) ___________________________________________________________________
În Design mode se introduc, în document, două TextBox-uri: _______________________________________________________________
Preţul:
TVA:
_______________________________________________________________ Se stabilesc proprietăţile:
Proprietatea
Enabled
=
True
pentru
TVA
anihilează
scrierile
accidentale în această casetă de text, destinată afişării rezultatului unui calcul.
Se editează procedura eveniment: Private Sub Pret_Change() TVA = Pret * 0.19 End Sub Mai
complet, se poate testa dacă preţul este într-adevăr o valoare
numerică (funcţia IsNumeric şi instrucţiunea If vor fi tratate ulterior):
Private Sub Pret_Change() If IsNumeric(Pret.Text) Then TVA = Pret * 0.19 End If End Sub
!
În limbajele de programare se foloseşte punct zecimal în loc de virgulă
zecimală, vezi : 0.19
În Run Mode se pot iniţia calcule:
Bazele informaticii
71
Editorul VBA
______________________________________________________________ Preţul:
142,50
TVA:
27.075
______________________________________________________________
! preţul apare cu virgulă zecimală datorită setărilor de sistem: Regional and Language Options: Romanian ____________________________________________________________________________________Exemplu ↑
VBA
se poate lansa dintr-o aplicaţie Office, cel mai adesea utilizând shortcut-ul Alt+F11.
După
lansarea mediului de programare VBA se pot edita module şi formulare noi sau se pot edita cele existente (stocate împreună cu documentele Office sau exportate ca fişiere cu extensia .bas).
Fereastra
Project Explorer arată modulele, formularele și documentele Office din proiect. Un proiect are cel puţin un modul sau un formular.
Pentru
a crea o aplicaţie VBA e necesară scrierea codului sursă al programului şi apoi compilarea programului (Debug, Compile Project) pentru eliminarea eventualelor erori de sintaxă.
Instrucţiunile programului se introduc în fereastra de cod VBA. Fereastra Properties afişează atributele unui obiect din proiect. Controalele se folosesc pentru a realiza interfaţa grafică cu utilizatorul. Se poate construi o interfaţă cu utilizatorul plasând controale pe un formular sau pe stratul de text al Word-ului.
Se pot redimensiona controalele (şi formularul) trăgând de punctele de
dimensionare ale controalelor, care apar atunci când este selectat controlul.
O modalitate de afişare a ferestrei de cod este executarea unui dublu clic pe controlul pentru care se doreşte scrierea codului de program.
Atunci când utilizatorul apasă pe un buton dintr-un formular sau dintr-un Bazele informaticii
72
Editorul VBA
document, VBA generează un eveniment Click. Codul de program care se adaugă la procedura de eveniment Click a butonului determină ce anume face butonul.
Dacă utilizatorul introduce date într-o casetă de text evenimentul Change oferă posibilitatea preluării acestor date în programul Basic.
Să se editeze şi să se ruleze secvenţele de instrucţiuni Basic din exemplele marcate cu simbolul
Bazele informaticii
.
73
Secvenţe de cod VBA
Unitatea de învăţare Nr. 9 Secvenţe de cod VBA Cuprins Obiectivele Unităţii de învăţare Nr. 9 9.1. Cuvintele 9.2. Comentariile 9.3. Tipuri de date 9.4. Expresiile 9.4.1. Operanzi 9.4.2. Operatori 9.4.3. Ordinea de evaluare a expresiilor 9.5. Constante şi variabile 9.5.1. Constante 9.5.2. Variabile 9.6. Instrucţiunea de atribuire 9.7. Liste (arrays) de variabile 9.7.1. Liste dinamice Lucrare de verificare Unitate de învăţare Nr. 9
Bazele informaticii
Pagina 75 75 76 76 79 79 79 80 81 81 82 83 84 85 86
74
Secvenţe de cod VBA
O aplicaţie VBA include unul sau mai multe formulare şi module. Secvenţele de cod (program sursă), asociate acestora, sunt constituite din linii de program editat în limbajul de programare Visual Basic. În principiu o linie de program, formată din mai multe cuvinte care pot fi scrise cu majuscule şi/sau cu minuscule, are două părţi: o instrucţiune şi unul sau mai multe argumente. Editorul de program colorează cuvintele pentru a facilita detectarea lor. Sunt câteva culori implicite: verde pentru comentarii, albastru pentru cuvintelecheie, negru pentru elementele definite de utilizator (variabile şi constante) etc. Cuvintele Prin reunirea caracterelor alfabetice, numerice, precum şi a unor caractere speciale se formează cuvintele. Acestea se pot grupa în 2 categorii: • •
cuvinte rezervate (cheie); cuvinte utilizator.
Cuvintele rezervate (cheie) aparţin limbajului şi au o semnificaţie predefinită, motiv pentru care pot fi folosite numai în modul în care sunt specificate în formatele generale (de exemplu: For, Next, Do, Loop, etc). Cuvintele utilizator sunt create de programator atât pentru a defini datele ce se prelucrează, programele, fişierele, procedurile, cât şi pentru a înscrie comentarii în programe (de exemplu: cantitate, PU, Valoare, etc).
O linie poate ocupa şi două rânduri, reunite prin spaţiu şi linie de subliniere ( _) la sfârşitul primului rând. O linie de program poate conţine mai multe instrucţiuni separate prin : (două puncte), lucru nerecomandabil datorită dificultăţilor de citire a programului. Nu este permisă tăierea cuvintelor !
Bazele informaticii
75
Secvenţe de cod VBA
↓ Exemple____________________________________________________________________________________ Instrucţiune scrisă pe două rânduri:
Valoare = pret * _ cantitate Instrucţiuni scrise pe acelaşi rând:
Valoare = 2 : cantitate = 50 ____________________________________________________________________________________Exemple ↑
Comentariile Un comentariu constituie o linie de cod care nu se execută, având în cuprins explicaţii asupra altor porţiuni de cod (care, de regulă, urmează). În acest fel, la o parcurgere ulterioară a codului, va fi facilitată înţelegerea acestuia. Comentariile incluse de programatori la scrierea unei aplicaţii ajută foarte mult la modificarea sau întreţinerea acesteia. Un comentariu este deci un mesaj inclus într-o secvenţă de program cu diferite scopuri, precum:
identificarea programului; descrierea obiectivului general al programului; descrierea scopului fiecărei proceduri în parte; explicarea secvenţelor sau a calculelor mai complexe.
În Basic există două variante: Utilizarea instrucţiunii
REM: desemnează un comentariu care se întinde
pe întreg rândul;
Utilizarea unui apostrof (') la începutul comentariului: în acest caz se
pot scrie comentarii şi după o instrucţiune, pe acelaşi rând.
Liniile de comentarii nu sunt executate şi nu sunt vizibile în momentul execuţiei aplicaţiei - Basic ignoră la execuţie liniile care încep cu REM sau apostrof.
Bazele informaticii
76
Secvenţe de cod VBA
↓ Exemplu____________________________________________________________________________________ REM Programator: Parvulescu Andrei REM Program de calcul al salariilor '... REM Aici sunt alte instructiuni '... Sub Calc_Impozit(Salariu As Single) 'Procedura de calcul a impozitului Dim Impozit As Single 'variabila pentru memorarea 'impozitului 'Se utilizeaza 2 variabile: 'una pentru suma fixa si una pentru procent. Dim SumaFixa, Procent As Single 'calculul impozitului Impozit = SumaFixa + Salariu * Procent / 100 End Sub ____________________________________________________________________________________Exemplu ↑
Tipuri de date Există 3 mari categorii de date: numerice, şir de caractere (string) şi speciale. Încadrarea unei date într-o anume categorie este absolut necesară pentru a putea efectua calcule sau alte prelucrări. Un şir de caractere este o secvenţă de zero sau mai multe caractere care sunt tratate ca o entitate. Visual Basic lucrează cu şiruri de caractere de lungime fixă sau variabilă. Tipul de dată considerat implicit este Variant, care indică o dată de tip nespecificat. La preluarea acestei date într-o secvenţă de cod este necesară conversia ei în tipul corespunzător prelucrării ce urmează. Tipul
Descriere
Lungime
Interval de valori
(byte)
Boolean
Date de tipul logic
Byte Integer Long
Bazele informaticii
Numere întregi
1
True sau False
1
0 255
2
-32.768 32.767
4
-2.147.483.648 2.147.483.647
77
Secvenţe de cod VBA
Currency
Format monetar
8
-922.337.203.685.477,5808 922.337.203.685.477,5807
Single
Double
4 Numere zecimale în virgulă flotantă (pentru aplicaţii ştiinţifice)
-3.4028235E+38 -1.401298E-45
8
-1,797.693.134.86232E308 -4,940.656.458.41247E-324 şi 4,940.656.458.41247E-324 1,797.693.134.86232E308
Date
Date calendaristice şi de timp
String
Şir de caractere
Object
Obiecte (cum ar fi controale şi formulare)
Variant
Date de orice tip, utilizat atunci când tipul acestora este incert
8
1 ian. 100 31dec. 9999
4
Pentru scrierea valorilor numerice sunt folosite, uneori, literele E sau D. „E" provine de la „exponent" iar „D" de la „exponent dublă precizie". Prin exponent se înţelege o putere a lui 10 cu care se înmulţeşte o altă valoare. Literele E şi e (sau D şi d) sunt utilizate într-o notaţie specială, denumită ştiinţifică. Notaţia ştiinţifică este o reprezentare prescurtată, utilizată pentru numere foarte mari sau foarte mici. Se consideră că această notaţie este mai inteligibilă decât repetarea unui număr mare de zerouri. Convertirea la valoarea reală se poate face oricând, astfel: calculează 10 la puterea dată de numărul care urmează după D sau E; valoarea obţinută se înmulţeşte cu numărul care-l precede pe D sau E. ↓ Exemplu____________________________________________________________________________________ o o
87,972E+6 înseamnă 87,972 * 106 adică 87.972.000.000 ____________________________________________________________________________________Exemplu ↑ Bazele informaticii
78
Secvenţe de cod VBA
Expresiile (de calcul) Relaţiile de calcul se transpun în expresii formate din: Operanzi care pot fi: Constantele. Variabilele. Funcţiile (Basic sau utilizator). Operatori.
Operatorii leagă operanzi de acelaşi tip. Operatorii folosiţi în programele Basic sunt următorii :
Operatorii aritmetici - leagă operanzi numerici. Operator +
adunare
-
scădere
*
înmulţire
/
împărţire
\
câtul unei împărţiri cu rest
Mod ^
Descriere
modulo (restul împărţirii) ridicare la putere
Operatorii relaţionali - produc rezultate de tip boolean. Operator
Descriere
<
strict mai mic
>
strict mai mare
=
egalitate
<> sau ><
diferit
<= sau =<
mai mic sau egal
>= sau =>
mai mare sau egal
Operatorii logici - leagă expresii logice.
Bazele informaticii
79
Secvenţe de cod VBA
Operator
Descriere
NOT
Rezultatul este adevărat dacă operandul este fals şi invers (Not X).
(nu) AND
Rezultatul este adevărat când cei doi operanzi sunt adevăraţi (X And Y).
(şi) OR
Rezultatul este adevărat dacă unul din operanzi este adevărat (X OR Y)
(sau) XOR (sau exclusiv)
Rezultatul este adevărat dacă unul din operanzi este adevărat. Dacă ambii operanzi sunt, sau adevăraţi, sau falşi, rezultatul este fals.
Operatorul de concatenare a şirurilor: &
Ordinea de evaluare a expresiilor Dacă o relaţie sau o expresie cuprinde simultan operatori aritmetici, relaţionali şi logici ordinea de evaluare este : Operator
Prioritate
Operatorii aritmetici sau &
0 (maximă)
Operatorii relaţionali
1
Operatorii logici
2
Pentru expresiile aritmetice: Operator Operatorul unar (semn +, -)
Bazele informaticii
Prioritate 0
Ridicarea la putere
1
Înmulţirea şi împărţirea
2
Adunarea şi scăderea
3
80
Secvenţe de cod VBA
Parantezele pot modifica ordinea de efectuare a operaţiilor. ↓ Exemplu____________________________________________________________________________________ (3 + 2) * (4 + 1)
25
102 / 4
25.5
102 \ 4
25
102 Mod 4
2
____________________________________________________________________________________Exemplu ↑
Constante şi variabile Ca toate limbajele de programare, Basic permite utilizarea memoriei calculatorului pentru stocarea datelor utilizate de programele ce se execută. Conţinutul acestor zone de stocare este asociat unor identificatori, cuvinte cărora li se asociază o valoare definită prin unul din tipurile de date menţionate.
Identificatorii de variabile pot conţine litere, cifre şi caracterul de subliniere (underscore), nu pot să înceapă cu cifre, nu pot conţine spaţii ori alte caractere speciale.
Este interzisă folosirea unor nume care sunt cuvinte cheie în Basic (de exemplu, nu se poate defini o variabilă numită Sub, dar se poate utiliza identificatorul Sub16) Constante O constantă este un identificator a cărui valoare asociată nu se modifică pe parcursul unui program. Constantele se pot declara (explicit) cu instrucţiunea:
Const As ] = <expresie>
Bazele informaticii
81
Secvenţe de cod VBA
↓ Exemplu____________________________________________________________________________________ Const PI As Double = 3.1416, Raza As Integer = 25 Const LungimeCerc = 2 * PI * Raza ___________________________________________________________________________________Exemplu ↑
Constantele de tip String se scriu între ghilimele.
↓ Exemplu____________________________________________________________________________________ "Parvulescu Andrei"
"Constanta" "204712" "Str Trifoiului nr 5" "#%$" "" 'este şirul nul pentru că intre ghilimele 'nu este specificat nici un caracter ____________________________________________________________________________________Exemplu ↑
Constantele de tip Date se scriu între 2 caractere # (diez). Data şi
ora se pot scrie în funcţie de setările definite în calculator. ↓ Exemplu____________________________________________________________________________________ #1/17/2007# #1:12:00 PM# #1/17/2007 1:12:00 PM# ____________________________________________________________________________________Exemplu ↑ Variabile Numai o parte a datelor dintr-o aplicaţie sunt constante. O variabilă este un identificator al unei porţiuni din memoria calculatorului, a cărui conţinut poate fi schimbat prin program. Fiecare variabilă este de un anumit tip care impune lungimea zonei de memorie ocupată de aceasta. Pentru declararea explicită a variabilelor se utilizează instrucţiunea Dim. Aceasta este plasată la începutul programului, indicând că, undeva pe parcurs, vor fi necesare variabilele declarate. Formatul instrucţiunii de declarare este: Bazele informaticii
82
Secvenţe de cod VBA
Dim As
Instrucţiunea Dim se poate plasa oriunde într-o procedură, dar se
recomandă scrierea sa la începutul acesteia. Nu se pot defini două variabile cu acelaşi nume în aceeaşi procedură. ↓ Exemplu____________________________________________________________________________________ Dim Raza As Single, LungimeCerc As Single Dim Contor As Integer ____________________________________________________________________________________Exemplu ↑
Instrucţiunea de atribuire Prin instrucţiunea de atribuire, unei variabile i se asociază valori. Formatul ei este: = <expresie> <expresie> poate fi o constantă, o expresie matematică sau o altă variabilă.
↓ Exemplu____________________________________________________________________________________ Dim Pretul As Single, Valoarea As Single Dim Cantitatea As Integer '... Pretul = 34.3 Cantitatea = 10 Valoarea = Pretul * Cantitatea _____________________________________________________________________________________Exemplu ↑ Bazele informaticii
83
Secvenţe de cod VBA
Declaraţiile constantelor şi a variabilelor pot fi explicite sau implicite,
iar Basic suportă ambele tipuri de declaraţii. Declararea implicită are loc
o dată cu prima instrucţiune de atribuire, VBA atribuind automat tipul cel mai adecvat. ↓ Exemplu____________________________________________________________________________________ 'prin instrucţiunea de atribuire: Raza = 25 'raza este considerată de tip Integer PI = 3.14 'PI este considerată de tip Single LungimeCerc = 2 * PI * Raza 'LungimeCerc va fi de tip Single 'dar prin instrucţiunea de atribuire: Raza = 25& 'raza este considerată de tip Long _____________________________________________________________________________________Exemplu ↑
Liste (arrays) de variabile Termenul englezesc array are în terminologia românească doi corespondenţi: listă sau vector, pentru tablourile cu o singură dimensiune, matrice pentru tablourile cu 2 dimensiuni. Termenul tablou, care corespunde direct celui array, este mai utilizat când sunt definite mai multe dimensiuni.
O
listă reuneşte mai multe variabile care au acelaşi nume, fiind
identificate în cadrul listei printr-un indice. Limita minimă implicită a
indicelui este zero !
↓ Exemplu____________________________________________________________________________________ '... '...
Dim Salariu(25) As Single 'salariul a 25 persoane Dim Masiv3D(5, 6, 7) As Integer 'Tablou cu 3 dimensiuni Salariu(0) = 1546.23 'Salariul primei persoane Salariu(1) = 1265.7 'Salariul celei de a doua persoane
'... Masiv3D(2, 5, 6) = 11 _____________________________________________________________________________________Exemplu ↑
Bazele informaticii
84
Secvenţe de cod VBA
Liste dinamice Prin instrucţiunea Dim se declară o listă cu număr finit de elemente. Există instrucţiunea ReDim care permite crearea de liste dinamice. ReDim urmează unei instrucţiuni Dim la care nu se precizează nici o limită. Nu se poate utiliza ReDim pentru a redimensiona o listă care s-a declarat deja cu un număr finit de elemente. ReDim poate include şi clauza Preserve pentru a se conserva vechile valori ale listei. ↓ Exemplu____________________________________________________________________________________ Dim Salariu() As Single '... '... '...
'...
'listă dinamică
ReDim Salariu(25) Salariu(0) = 1546.23 Salariu(9) = 1366.7 ReDim Salariu(30)
'se adaugă elemente suplimentatre 'dar ATENŢIE! 'se pierd valorile 'Salariu(0) şi Salariu(9)
ReDim Preserve Salariu(30) 'cu clauza Preserve 'nu se pierd valori
_____________________________________________________________________________________Exemplu ↑
Bazele informaticii
85
Secvenţe de cod VBA
1. Să se editeze o secvenţă de instrucţiuni pentru afişarea următoarelor valori: nume (student), prenume, vârsta, anul (de studii), taxă (plătitor de taxă), utilizând tipurile de date adecvate.
(Word)
_______________________________________________________________ Date personale
Andrei Vârsta 21 Taxa True
_______________________________________________________________ Controale CommandButton
TextBox
Proprietăţi (Name): Datele Caption: Date personale (Name): Personale
Procedura eveniment (Click): Private Sub Datele_Click() nume = "Andrei" varsta = 21 taxa = True Personale = nume & " Vârsta " & varsta End Sub
& " Taxa " & taxa
2. Să se scrie o secvenţă de program în care să se declare o listă de salarii (ale unor salariaţi), pentru care se va calcula un salariu mediu:
(Word)
_______________________________________________________________ Salariul mediu
1541.4
_______________________________________________________________
Bazele informaticii
86
Secvenţe de cod VBA
Controale CommandButton
TextBox
Proprietăţi (Name): Salarii Caption: Salariul mediu (Name): Media
Procedura eveniment (Click): Private Sub Salarii_Click() Dim Sal(25) As Single Sal(0) = 1543.1 Sal(1) = 1447.76 Sal(2) = 1633.34 Media = (Sal(0) + Sal(1) + Sal(2)) / 3 End Sub
3. Pentru calculul valorii de viitor a unei investiţii (MyFv) se utilizează formula:
MyFV Pmt *
(1 Rate) Nper 1 Rate
Unde: Pmt – reprezintă plăţile, Rate – este rata dobânzii, Nper – numărul de perioade. Să se scrie un program pentru calculul depunerilor băneşti cu dobândă.
(Word) _______________________________________________________________ Sold
2327,59698849949
_______________________________________________________________ Controale CommandButton
TextBox
Bazele informaticii
Proprietăţi (Name): Sold Caption: Sold (Name): Valoare
87
Secvenţe de cod VBA
Procedura eveniment (Click): Private Sub Plata = Dobanda Numar = Valoare End Sub
Bazele informaticii
Sold_Click() 100 'Suma depusă lunar = 0.06 'Dobânda este de 6% 15 'Se fac 15 depuneri = Plata * ((1 + Dobanda) ^ Numar - 1) / Dobanda
88
Funcţii VBA predefinite
Unitatea de învăţare Nr. 10 Funcţii VBA predefinite Cuprins Obiectivele Unităţii de învăţare Nr. 10 10.1. Funcţia Format 10.2. Funcţii matematice 10.3. Funcţii financiare 10.4. Funcţii pe şiruri de caractere 10.5. Funcţii pentru dată calendaristică şi timp 10.6. Funcţii pentru conversii 10.7. Funcţii pentru testarea tipului de date Lucrare de verificare Unitate de învăţare Nr. 10
Bazele informaticii
Pagina 90 90 91 91 93 93 94 94 95
89
Funcţii VBA predefinite
Basic oferă utilizatorului mai multe funcţii pentru a realiza diferite operaţiuni pentru care, altfel, ar trebui scrise secvenţe de cod. Funcţiile pot apare ca operanzi în relaţiile de calcul şi pot avea 0, 1 sau mai multe argumente (constante sau expresii de calcul) iar cu ajutorul lor se execută calcule sau prelucrări şi se furnizează un rezultat. Funcţia Format
Se utilizează, în special, pentru a specifica modul de afişare a numerelor: Format ( <expresie>, <strFormat>) <expresie> poate fi o variabilă, o constantă sau o expresie formată din acestea. <strFormat> este una dintre valorile predefinite prezentate în tabelul următor sau formatul de afişare definit de utilizator sub forma unui şir de caractere. Fiecare caracter # indică o cifră, iar 0 precizează dacă apar în completare zerouri, la început sau la sfârşit. <strFormat>
Exemple
Format(8.6, "#.#") 8,6 Format(8.6, "#.00") 8,60 Formatarea valorilor numerice Format(8.76, "#.00") 8,76 Format(8.76, "#.0") 8,8 Format(0.1, "Percent") 10,00 % Format procentual Format(0.1, "# %") 10 % Separarea grupurilor de 3 cifre Format(10000,"###,### lei") 10.000 lei Format monetar Format(10, "Currency") 10,00 lei Afişare cu două zecimale Format(10.236, "Fixed") 10,24 Format ştiinţific Format(1233.07, "Scientific") 1,23E+03 True/Yes, False/No dacă <expresie> este #0 Format(0, "True/False") False sau 0 Format(12.1, "Yes/No") Yes Format("SALUT", "<") salut Formatarea string‐urilor Format("salut", ">" SALUT Format(Date, "Long Date") 27 martie 2007 Formatarea datelor Format(Date, "dddd, mmm d yyyy") Marţi, mar 27 2007 calendaristice … Date este o funcţie VBA care furnizează data curentă
Bazele informaticii
90
Funcţii VBA predefinite
Funcţii matematice Funcţiile matematice şi trigonometrice au ca argumente şi ca rezultate valori numerice. Funcţia Int
Descriere Numărul întreg mai mic sau egal
Fix
Partea întreagă
Abs Sgn
Valoarea absolută Semnul unei expresii
Rnd
Exp Log Sqr Atn Sin Cos Tan
Exemple Int(‐8.4) Int(8.4) Fix(‐8.4) Fix(8.4) Abs(‐7.2) Sgn(‐2/3)
‐9 8 ‐8 8 7,2 ‐1
Numere aleatoare subunitare
Int((100 * Rnd) + 1) numere între 1 şi 100
83 ?
e la puterea x Logaritmul natural (baza e) În baza 10 : log(x)/log(10) Radical indice 2 Arctangentă Sinus Cosinus Tangentă
e = Exp(1) Log(e) Log(1000)/Log(10) Sqr(9) Pi = 4*Atn(1) Sin(Pi/2) Cos(Pi) Tan(Pi/4)
2,7182… 1 3 3 3,1415… 1 ‐1 1
Funcţii financiare Funcţiile financiare efectuează calcule obişnuite pentru afaceri, ca de exemplu determinarea plăţii pentru un împrumut, valoarea viitoare sau valoarea netă actualizată a unei investiţii şi valorile obligaţiunilor sau cupoanelor. Argumentele comune pentru funcţiile financiare includ: Valoarea viitoare (fv) – valoarea investiţiei sau împrumutului după ce s-au efectuat toate plăţile. Numărul de perioade (nper) – numărul total de plăţi sau perioade ale unei investiţii. Valoarea actualizată (pv) – valoarea unei investiţii sau a unui împrumut la începutul perioadei de investiţie. De exemplu, valoarea actualizată a unui împrumut este capitalul de bază care este împrumutat. Rata (rate) – rata dobânzii sau rata de actualizare pentru un împrumut sau o investiţie. Tip (type) – intervalul la care sunt efectuate plăţile în timpul perioadei de plată, ca de exemplu la începutul unei luni sau la sfârşitul acesteia ( 0 sau 1, implicit 0). Bazele informaticii
91
Funcţii VBA predefinite
Unele funcţii financiare se folosesc pentru anuităţi. O anuitate
constă dintr-o serie de plăţi constante efectuate pe o perioadă continuă (de exemplu un împrumut pentru un autoturism, sau un împrumut ipotecar). În funcţiile de anuităţi, sumele plătite, cum ar fi depozitele pentru economii, sunt reprezentate de numere negative; sumele primite, cum ar fi un cec de dividente, sunt reprezentate prin numere pozitive. Se recomandă consecvenţă în legătură cu unităţile utilizate pentru specificarea argumentelor rate şi nper (de exemplu, pentru plăţi lunare la un împrumut pe un număr de ani, rata dobânzii va fi împărţită întotdeauna cu 12, iar nper va fi înmulţit cu 12 şi cu numărul de ani). Cele mai importante funcţii financiare sunt incluse în tabelul următor: Funcţia FV(rate, nper, pmt, pv, type)
Descriere Calculează valoarea viitoare a unei investiţii bazate pe plăţi periodice şi constante şi o rată a dobânzii constantă. PV(rate, nper, pmt, fv, type) Întoarce valoarea actualizată a unei investiţii. Valoarea actualizată este suma totală pe care o reprezintă în prezent o serie de plăţi viitoare. De exemplu, pentru împrumut, suma împrumutată este valoarea actualizată pentru creditor. NPer(rate, pmt, pv, fv, type) Furnizează numărul de perioade pentru o investiţie bazată pe plăţi periodice constante şi o rată constantă a dobânzii. Pmt(rate, nper, pv, fv, type) Calculează plata pentru un împrumut bazat pe plăţi constante şi o rată constantă a dobânzii. Ipmt(rate, per, nper, pv, fv, type) Determină plata dobânzii pe o perioadă dată, pentru o investiţie bazată pe plăţi periodice constante şi o rată constantă a dobânzii. Argumentele marcate bold sunt obligatorii, celelalte sunt opţionale.
Bazele informaticii
92
Funcţii VBA predefinite
Funcţii pe şiruri de caractere Aceste funcţii realizează prelucrări simbolice asupra unor şiruri de caractere. Funcţia Asc Len Ucase Lcase LTrim RTrim Trim Mid Space Replace Left Right
Descriere Codul unui caracter Numărul de caractere din şir Litere mari Litere mici Elimina spaţiile din stânga Elimina spaţiile din dreapta Elimina spaţiile de la capete Extrage un subşir Generează spaţii Înlocuieşte un şir cu alt şir Extrage un subşir stânga Extrage un subşir dreapta
Exemple Asc("B") Len("Visual Basic") UCase("abc") LCase("ABC") LTrim(" def") RTrim("def ") Trim(" def ") Mid("abcdef", 3, 2) "a" + Space(5) + "b" Replace("As","s","ce") Left("abcef", 3) Right("abcef", 3)
66 12 "ABC" "abc" "def" "def" "def" "cd" "a b" "Ace" "abc" "cef"
Funcţii pentru dată calendaristică şi timp Aceste funcţii sunt utilizate frecvent în aplicaţii: de la afişarea datei şi/sau orei curente, la transformarea din ani în zile sau din ore în minute. Funcţia Descriere Exemple Now Data si ora curentă Now 17.03.2007 17:01:08 Date Data curentă Date 17.03.2007 Time Ora curentă Time 17:01:08 Day Ziua Day(Date) 17 Month Luna Month(Date) 3 Year Anul Year(Date) 2007 DateSerial Data specificată DateSerial(2007,2,17) 17.02.2007 TimeSerial Ora specificată TimeSerial(18, 5, 27) 18:05:27 *** DateAdd Adună la o dată x=DateAdd("d", 10, Date) 04.07.2007 *** DateDiff Diferenţa dintre date DateDiff("d", Date, x) 10 DatePart*** Un interval de timp DatePart("m", Date) 3 *** Primul argument reprezintă intervalul de timp (d – ziua, m – luna, q – trimestrul, y – ziua din an, w – ziua din săptămână, ww ‐ săptămâna, yyyy – anul)
Bazele informaticii
93
Funcţii VBA predefinite
Funcţii pentru conversii Se utilizează pentru a converti argumentul într-o dată de tipul specificat de funcţia utilizată. Funcţia Exemple Chr Chr(65) "A" Str Str(‐14.34) "‐14.34" Val Val(" 1615 198Constanta") 1615198 CBool CBool(4 > 5) False CByte CByte(12 * 13) 156 CInt CInt(1725.6 ‐ 1700) 26 CSng CSng(17 / 18) 0,9444444 CDbl CDbl(1 / 2.0E+99) 5E‐100 CDate CDate(#3/17/2007#) 17.03.2007
Funcţii pentru testarea tipului de date Funcţiile pentru testarea tipului de date sunt denumite şi funcţii pentru inspectarea datelor, stabilind dacă o expresie, sau o variabilă, este sau nu este de un anume tip. Funcţia IsDate IsNumeric VarType
Bazele informaticii
Descriere Argumentul este o expresie Argumentul este o variabilă 0 ‐ Empty 1 ‐ Null 2 ‐ Integer 3 ‐ Long 4 ‐ Single 5 ‐ Double 6 ‐ Currency 7 ‐ Date 8 ‐ String
Exemple IsDate(#3/17/2007#) IsNumeric(12.3)
True True
VarType("Basic")
8
94
Funcţii VBA predefinite
1. Să se calculeze valoarea funcţiei f(x) pentru diferite valori ale argumentului x≥0 :
f ( x) x 2 x 1 e x
(Word) _______________________________________________________________ x= 7
Valoarea lui f: 1104.18299286373
_______________________________________________________________ Controale TextBox TextBox
Proprietăţi (Name): (Name): Enabled:
x f False
Procedura eveniment (Change): Private Sub x_Change() If IsNumeric(x.Text) And Val(x.Text)>=0 Then E = Exp(1) f = Sqr(x ^ 2 + x + 1) + E ^ x End If End Sub
2. Scrieţi o secvenţă program prin care să determinaţi a câta zi de naştere sărbătoriţi astăzi.
(Word) _______________________________________________________________ Data naşterii =
3/20/1990
Au trecut:
7214 zile
_______________________________________________________________
Bazele informaticii
95
Funcţii VBA predefinite
Controale TextBox TextBox
Proprietăţi (Name): DataNasterii (Name): Zile Enabled : False
Procedura eveniment (Change): Private Sub DataNasterii_Change() If IsDate(DataNasterii) Then Zile = DateDiff("d", DataNasterii, Date) End If End Sub
3. Să se editeze o interfaţă grafică pentru efectuarea unor calcule financiare (funcţiile de calcul FV, PV, Nper, Pmt).
(Word)
_______________________________________________________________
10
%
13 -100 FV
PV
Valoarea calculată:
NPer
1.367,03 lei
Pmt
_______________________________________________________________ Controale TextBox TextBox TextBox TextBox
OptionButton OptionButton OptionButton OptionButton
Proprietăţi (Name): (Name): (Name): (Name): Enabled : Caption : Caption : Caption : Caption :
v1 v2 v3 fc False FV PV NPer Pmt
Procedurile eveniment (Click): Private Sub OptionButton1_Click() ' Definirea formatului monetar. Fmt = "###,##0.00 lei" functia = FV(v1 / 100 / 12, v2, v3) Bazele informaticii
96
Funcţii VBA predefinite
fc = Format(functia, Fmt) End Sub Private Sub OptionButton2_Click() ' Definirea formatului monetar. Fmt = "###,##0.00 lei" functia = PV(v1 / 100 / 12, v2 * 12, v3) fc = Format(functia, Fmt) End Sub Private Sub OptionButton3_Click() ' Definirea formatului. Fmt = "###,##0 luni" functia = NPer(v1 / 100 / 12, v2, v3) fc = Format(functia, Fmt) End Sub Private Sub OptionButton4_Click() ' Definirea formatului monetar. Fmt = "###,##0.00 lei" functia = Pmt(v1 / 100 / 12, v2 * 12, v3) fc = Format(functia, Fmt) End Sub Verificare:
FV
Pentru 13 depuneri lunare, a 100 unităţi lei, cu dobândă anuală
10%, valoarea soldului atins:
PV Valoarea depunerii bancare pentru returnarea lunară a 150 lei (dobânda anuală 9,5%, 12 ani):
Bazele informaticii
97
Funcţii VBA predefinite
NPer Numărul de luni necesare atingerii unui sold de 2000 lei (depunere lunară 100, dobânda anuală 9,5%):
Pmt Pentru un împrumut bancar de 13000 unităţi bancare, pe 12 ani, dobânda anuală 9,5%, plăţile lunare sunt:
4. Returnarea unui împrumut bancar se poate realiza în plăţi constante (care se determină cu funcţia Pmt) sau în plăţi variabile (valoarea împrumutului/ numărul de perioade + dobânda calculată prin Ipmt). Suma plăţilor
constante este egală cu suma plăţilor variabile. Să se verifice această situaţie pentru un împrumut de 4000 lei returnabil în 4 luni cu o dobândă lunară de 2%.
(Word) _______________________________________________________________ -4201.9800427406
/
-4201.9800427406
Verificare
_______________________________________________________________
Bazele informaticii
98
Funcţii VBA predefinite
Controale TextBox TextBox CommandButton
Proprietăţi (Name): (Name): (Name): Caption :
PlataCt PlataVar Verificare Verificare
Procedura eveniment (Click): Private Sub Verificare_Click() 'dobanzile pe cele 4 luni Ipmt1 = IPmt(2 / 100, 1, 4, 4000) Ipmt2 = IPmt(2 / 100, 2, 4, 4000) Ipmt3 = IPmt(2 / 100, 3, 4, 4000) Ipmt4 = IPmt(2 / 100, 4, 4, 4000) 'Suma platilor constante PlataCt = 4 * Pmt(2 / 100, 4, 4000) 'Suma platilor variabile PlataVar = (-4000 + Ipmt1 + Ipmt2 + Ipmt3 + Ipmt4) End Sub
Bazele informaticii
99
Structuri de control VBA
Unitatea de învăţare Nr. 11 Structuri de control VBA Cuprins Obiectivele Unităţii de învăţare Nr. 11 11.1. Structurile de control 11.1.1. Instrucţiunea de selecţie simplă 11.1.2. Instrucţiunea de selecţie multiplă 11.1.3. Structurile repetitive 11.1.3.1. Ciclul Do While (cu test iniţial) 11.1.3.2. Ciclul Do Until (cu test iniţial) 11.1.3.3. Ciclurile Do While şi Do Until cu test final 11.1.3.4. Ciclul For … Next, cu număr finit de paşi Lucrare de verificare Unitate de învăţare Nr. 11
Pagina 101 102 102 103 107 107 108 110 110 111
Bazele informaticii
100
Structuri de control VBA
Procesul de rezolvare a problemelor cu ajutorul calculatorului constă în două activităţi: dezvoltarea algoritmului şi reprezentarea acestuia ca program. Procesul de elaborare al algoritmului reprezintă etapa cea mai importantă, obligatorie şi de cele mai multe ori cea mai dificilă. Descoperirea algoritmului înseamnă găsirea unei metode de rezolvare a problemei, claritatea şi calitatea acestuia impunând fiabilitatea şi calitatea programului. În contextul dezvoltării programelor, etapele de rezolvare ale problemelor corespund cu cele definite de matematicianul G. Polya, în 1945: Înţelegerea problemei este etapa cea mai importantă şi constă în: • definirea datelor de intrare (tip, proprietăţi, domeniul valorilor), • definirea rezultatelor (ieşirile), • stabilirea relaţiilor dintre date şi rezultate. Conceperea modului de rezolvare a problemei şi descrierea acestuia printr-un algoritm. Reprezentarea algoritmului ca program. Evaluarea programului din punct de vedere al corectitudinii şi ca potenţial instrument pentru rezolvarea altor probleme. În practica reprezentării algoritmilor se utilizează diverse forme cum ar fi schemele logice, limbajul algoritmic (pseudocod), limbajele de programare, însă, indiferent de modul de descriere al acestora, se stabileşte o mulţime bine definită de blocuri elementare la care se au în vedere două elemente: sintaxa şi semantica (sintaxa se referă la reprezentarea simbolică a acestora, în timp ce semantica la semnificaţia lor). Ansamblul de instrucţiuni ale limbajului de programare, alese pentru reprezentarea algoritmilor, trebuie să fie adaptat la specificul de calcul electronic. De obicei aceste instrucţiuni sunt definite la un nivel mai înalt decât cel oferit de limbajul în cod maşină, astfel încât abordarea construcţiei şi analizei algoritmilor se face prin prisma unor concepte moderne, cum ar fi principiile programării structurate. Programarea structurată (introdusă în 1972 de E.W. Dijkstra, fundamentarea matematică fiind făcută de Böhm şi Jacopini într-un articol publicat în 1966) este o metodă de codificare a algoritmilor de calcul, prin definirea unui set de instrucţiuni grupate în trei structuri fundamentale: secvenţa, selecţia şi ciclul. Bazele informaticii
101
Structuri de control VBA
Secvenţa, tradusă în instrucţiuni simple (instrucţiunea de atribuire, instrucţiunea de apel subprogram, instrucţiuni de intrare/ieşire, subprograme). Instrucţiune 1
Instrucţiune 2
Instrucţiune n
Selecţia, (structura alternativă) ‐ If … Then … End If.
Instrucţiune 1
True
Condiţie
False
Instrucţiune 2
Ciclul (iteraţia) cu test iniţial sau cu test final (“atâta timp cât”, ”până când”) ‐ Do While, Do Until. Instrucţiuni
Condiţie
Condiţie
Instrucţiuni
Structurile de control Structurile selective Instrucţiunea de selecţie simplă
If Then [Else ]
End If Instrucţiunea de selecţie simplă condiţionează execuţia unor seturi de instrucţiuni prin evaluarea expresiei logice reprezentată în . Dacă
Bazele informaticii
102
Structuri de control VBA
expresia logică este True se va executa grupul . În cazul valorii False a condiţiei apar două cazuri: dacă există clauza Else se va executa grupul . în absenţa clauzei Else nu se execută nici o instrucţiune, comanda terminându-se imediat. ↓
Exemplu (Word) ____________________________________________________________________
Un an este bisect dacă este divizibil cu 4 și (And) nu este divizibil cu 100 sau (Or) este divizibil cu 400. _______________________________________________________________ Anul: 1900
Anul nu este bisect
_______________________________________________________________ Controale TextBox TextBox
Proprietăţi (Name): An (Name): R Enabled: False Următoarea secvenţă verifică dacă un an este bisect sau nu: Private Sub An_Change() If IsNumeric(An) Then If An Mod 4 = 0 And An Mod 100 <> 0 Or An Mod 400 = 0 Then R = "Anul este bisect" Else R = "Anul nu este bisect" End If End If End Sub
____________________________________________________________________________________Exemplu ↑
Instrucţiunea de selecţie multiplă Pentru a codifica mai multe alternative, este posibilă înlănţuirea mai multor instrucţiuni If, dar cu cât numărul acestora este mai mare, cu atât urmărirea lor devine mai dificilă. Alternativă pentru astfel de situaţii este instrucţiunea Select Case.
Bazele informaticii
103
Structuri de control VBA
Select Case <expresie> Case <listă de valori 1> | Is
Case < listă de valori 2>| Is
….
Case < listă de valori n>| Is
[Case Else ]
End Select
Selecţie după listă de valori. În funcţie de valoarea efectivă a expresiei, care poate fi numerică sau caractere, se va executa un singur bloc de instrucţiuni. Dacă expresia are o valoare ce nu se regăseşte între valorile prevăzute, se va executa - dacă s-a specificat - blocul de instrucţiuni de după Case Else (altfel, nu se execută nimic). În lista de valori, elementele listei sunt separate prin virgulă. Se poate folosi şi clauza To (pentru precizarea unui interval de valori). Exemplu 1 (Word) _________________________________________________________________________ ___________________________________________________________ Selecţie: 3
Culoare:
Nuanta de verde
_______________________________________________________________ Controale TextBox TextBox
Proprietăţi (Name): (Name): Enabled:
Selectie Cul False
Procedura eveniment:
Private Sub Selectie_Change() Select Case selectie Case 1 Culoare = "Rosu" Case 2, 3, 4 Culoare = "Nuanta de verde" Case 5 Culoare = "Albastru" Bazele informaticii
104
Structuri de control VBA
Case 6 To 9 Culoare = "Nuanta de gri" Case Else Culoare = "Nici o Culoare" End Select Cul = Culoare End Sub ____________________________________________________________________________________Exemplu ↑ ↓ Exemplu 2 (Word)________________________________________________________________________ Notând cu a, b, c trei valori pozitive să se stabilească dacă segmentele de
dreaptă corespunzătoare acestora pot constituii un triunghi - trei segmente de dreaptă pot forma un triunghi dacă fiecare este strict mai mic ca suma celorlalte două. _______________________________________________________________
1 3 c= b= Nu formeaza un triunghi răspuns:
a= 2
_______________________________________________________________ Controale TextBox TextBox TextBox TextBox
Proprietăţi (Name): (Name): (Name): (Name): Enabled:
S1 S2 S3 Raspuns False
Procedurile eveniment:
Private Sub S1_Change() a = Val(S1) b = Val(S2) c = Val(S3) If a < b + c And b < a + c And c < a + b Then Select Case True Case a = b And b = c Raspuns = "Echilateral" Case a = b Or a = c Or b = c Raspuns = "Isoscel" Case Else
Bazele informaticii
105
Structuri de control VBA
Raspuns = "Oarecare" End Select Else Raspuns = "Nu formeaza un triunghi" End If End Sub Private Sub S2_Change() S1_Change End Sub Private Sub S3_Change() S1_Change End Sub ____________________________________________________________________________________Exemplu ↑
Selecţie după condiţie. Pentru a extinde posibilităţile de utilizare a structurii alternative, se foloseşte un format care permite compararea expresiei cu o valoare, folosind alt operator decât cel de egalitate (clauza Is). ↓
Exemplu (Word) ____________________________________________________________________
Pentru citirea a două note de la tastatură şi afişarea unor calificative se poate utiliza următoarea interfaţă:
_______________________________________________________________ Nota1:
8
Nota2:
9
Media:
8.5
Foarte bine Calificativ:
_______________________________________________________________ Controale TextBox TextBox TextBox
TextBox
Bazele informaticii
Proprietăţi (Name): (Name): (Name): Enabled: (Name): Enabled:
Nota1 Nota2 Media False Calificativ False
106
Structuri de control VBA
Procedurile eveniment:
Private Sub Nota1_Change() n1 = Val(Nota1) n2 = Val(Nota2) Media = (n1 + n2) / 2 Select Case Val(Media) Case Is < 5 Calificativ = "Nesatisfacator" Case Is <= 7 Calificativ = "Slab" Case Is <= 8 Calificativ = "Bine" Case Is < 10 Calificativ = "Foarte bine" Case 10 Calificativ = "Felicitari" Case Else Calificativ = "Eroare" End Select End Sub Private Sub Nota2_Change() Nota1_Change End Sub ____________________________________________________________________________________Exemplu ↑ Structurile repetitive Ciclul Do While cu test iniţial („execută cât timp…”)
Do While [Exit Do]
Loop Într-un ciclu Do While grupul de instrucţiuni care constituie corpul ciclului este executat atât timp cât este îndeplinită condiţia. Clauza Exit Do impune abandonarea execuţiei instrucţiunii (salt după Loop). Ciclul se poate executa de zero, unu sau mai multe ori.
Bazele informaticii
107
Structuri de control VBA
Ciclul Do Until cu test iniţial („execută până când…”)
Do Until [Exit Do]
Loop Într-un ciclu Do Until grupul de instrucţiuni care constituie corpul ciclului este executat pâna când este îndeplinită condiţia. Clauza Exit Do impune abandonarea execuţiei instrucţiunii (salt după Loop). Ciclul se poate executa de zero, unu sau mai multe ori. ↓ Exemplu 1 (Word) ______________________________________________________________________ Pentru scrierea unui număr natural zecimal în baza de numeraţie 2, se poate folosi metoda împărţirilor succesive la 2, până la obţinerea primului cât egal cu zero. Exemplu:
6:2=3:2=1:2=0 6 2 0 _ 0 1 1 Rezultă că 6(10)= 110(2)
__________________________________________________________ Număr în baza 10:
23
Număr în baza 2:
10111
_____________________________________________________________ Controale TextBox TextBox
Proprietăţi (Name): (Name): Enabled:
B10 B2 False
Procedura eveniment:
Private Sub B10_Change() Dim NumarZecimal As Integer Dim SirulResturilor(30) As Integer Dim NumarBinar As String NumarBinar = ""
Bazele informaticii
108
Structuri de control VBA
NumarZecimal = B10 câtul = NumarZecimal indice = 0 Do While câtul > 0 SirulResturilor(indice) = câtul Mod 2 câtul = câtul \ 2 indice = indice + 1 Loop Do Until indice = 0 indice = indice - 1 NumarBinar = NumarBinar & SirulResturilor(indice) Loop B2 =NumarBinar End Sub indice reprezintă poziţia în şirul resturilor (rezultate prin împărţiri succesive la 2); SirulResturilor conţine valorile cifrelor binare (dar în ordine inversă) şi este o variabilă de tip Array completată in ciclul Do
While;
NumarBinar este şirul caracterelor binare, compus în ciclul Do
Until.
____________________________________________________________________________________Exemplu ↑ ↓
Exemplu 2 (Word) ________________________________________________________________
Să se calculeze, folosind ciclurile cu test iniţial, suma numerelor naturale pare, strict mai mici decât un număr natural n dat. _______________________________________________________________ Numărul natural:
6 Suma:
5
_______________________________________________________________ Controale TextBox TextBox
Bazele informaticii
Proprietăţi (Name): (Name): Enabled:
Numar Sum False
109
Structuri de control VBA
Procedura eveniment (în două variante):
Private Sub Numar_Change() 'nr trebuie sa fie pozitiv nr = Val(Numar) If nr > 0 Then s = 0: i = 0 Do While i < nr s = s + i i = i + 2 Loop Sum = s End If End Sub
Private Sub Numar_Change() 'nr trebuie sa fie pozitiv nr = Val(Numar) If nr > 0 Then s = 0: i = 0 Do Until i >= nr s = s + i i = i + 2 Loop Sum = s End If End Sub
______________________________________________________________________________Exemplu ↑ Ciclurile Do While şi Do Until cu test final Există variante ale instrucţiunilor Do While şi Do Until care permit execuţia condiţionată a secvenţei de instrucţiuni, cel puţin o dată:
Do [Exit Do] []
Loop While | Until Ciclul For … Next, cu număr finit de paşi
For = To [Step ] [Exit For] Next []
În ciclul For … Next grupul de instrucţiuni, constituind corpul acestuia, se execută după valorile variabilei contor , într-un interval specificat prin şi . Variabila contor se incrementează implicit cu 1, dacă nu este precizat pasul (Step) sau cu valoarea dacă apare
Bazele informaticii
110
Structuri de control VBA
clauza Step. Variabila contor primeşte o valoare iniţială (). După fiecare ciclu, contorul este incrementat şi comparat cu valoarea finală (). Dacă nu s-a ajuns la valoarea finală, execuţia ciclului de instrucţiuni se reia, în caz contrar trecându-se la linia de după Next. Exit For are acelaşi rol ca Exit Do de la comenzile Do … Loop.
Exemplu (Word) _____________________________________________________________________ ______________________________________________________________ Suma primelor
100
numere naturale este:
5050
______________________________________________________________ Controale TextBox TextBox
Proprietăţi (Name): (Name): Enabled:
n Suma False
Procedura eveniment:
Private Sub n_Change() Suma = 0 For i = 1 To n suma = suma + i Next End Sub ____________________________________________________________________________________Exemplu ↑
Să se editeze şi să se ruleze secvenţele de instrucţiuni Basic din exemplele marcate cu simbolul
Bazele informaticii
.
111
Module VBA
Unitatea de învăţare Nr. 12 Module VBA Cuprins Obiectivele Unităţii de învăţare Nr. 12 12.1. Variabile locale (private) 12.2. Variabile publice (globale) 12.3. Variabile private 12.4. Transmiterea argumentelor prin valoare şi prin referinţă 12.5. Funcţii recursive Lucrare de verificare Unitate de învăţare Nr. 12
Pagina 113 113 113 114 117 118 119
Bazele informaticii
112
Module VBA
Programarea modulară este un procedeu prin care mai multe instrucţiuni sunt grupate în proceduri (Sub şi Function) destinate realizării în mod repetat a unor acţiuni. Acestea pot fi definite în cadrul limbajului (proceduri standard) sau de către programator (proceduri utilizator). Programarea structurată combinată cu programarea modulară contribuie la creşterea eficienţei şi productivităţii în proiectarea de aplicaţii. Procedurile de dimensiuni mici, scrise pentru realizarea diverselor sarcini, în locul programelor vaste, monolitice, concretizează programarea structurată. Prin divizarea aplicaţiei în mai multe proceduri se reduce efortul, o dată cu numărul de erori în scrierea programelor. De asemenea, este simplificată întreţinerea aplicaţiei. În general, programatorii preferă să pună procedurile de utilitate generală în module. Se includ aici procedurile necesare în mai multe aplicaţii. (Module), din linia Pentru a adăuga un modul extern se acţionează butonul de butoane standard (prin meniu Insert, Module). Noul modul apare în structura proiectului iar în fereastra de cod se poate scrie codul necesar. Din punct de vedere al referirii variabilelor de lucru, din diferite zone ale programului, se deosebesc două tipuri de variabile:
Variabile locale accesibile doar în procedura în care au fost definite. Ele sunt declarate prin Dim, Redim sau Static. Variabilele declarate cu Static îşi păstrează valorile pe tot timpul execuţiei programului, spre deosebire de cele declarate prin Dim sau Redim care sunt şterse din memorie la terminarea procedurii. Sub test() Static Dobanda As Single Dobanda = 3 / 100 '... End Sub Variabile publice (globale) accesibile din orice procedură – prin declaraţia Public. '... Public rataDobanzii As Single '...
Bazele informaticii
113
Module VBA
Variabile private limitate la un modul sau procedură – prin declaraţia Private. '... Private rataDobanzii As Single '...
Variabilele publice şi locale sunt declarate la început de modul.
Orice program poate conţine unul sau mai multe proceduri.
Singura deosebire dintre procedurile Sub şi Function este că cele de tip Function returnează o valoare care se atribuie unei variabile iar celelalte nu.
Din orice procedură pot fi apelate alte proceduri (apeluri în cascadă).
Orice procedură apelată este căutată mai întâi în cadrul secţiunii curente, apoi în modulele externe.
Execuţia unei proceduri depinde de parametrii externi transmişi acestuia şi se va opri la sfârşit (End Sub, End Function) sau la întâlnirea instrucţiunii de ieşire din procedură (Exit Sub, Exit
Function).
După executarea unei proceduri se revine în programul apelant.
O procedură poate avea atributele Private sau Public.
↓ Exemple____________________________________________________________________________________ () O procedură ValoareTva, pentru calculul valorii TVA (Tva este variabilă cu atribut Public), poate fi definită într-un modul extern:
Apelul procedurii şi transmiterea parametrului:
Bazele informaticii
114
Module VBA
() Se editează o procedură, inclusă într-un modul, pentru ordonarea unui şir de numere prin metoda interschimbării. Explicarea metodei interschimbării:
Se consideră un şir de numere a1, a2, a3 … an-1, an. Se compară, pe rând câte două elemente ale şirului. Dacă valorile lor corespund criteriului de ordonare (crescător sau descrescător) atunci ele rămân pe aceeaşi poziţie, dacă nu, se interschimbă: a1 a2 a3 … an-1 an Comparările se reiau până când nu mai e necesară nici o interschimbare.
Sub Ordonare(n As Integer, a() As Single) Dim aux As Single Do While Not gata gata = True For i = 0 To n - 2 If a(i) > a(i + 1) Then aux = a(i) a(i) = a(i + 1) a(i + 1) = aux gata = False End If Next Loop End Sub Pentru definirea elementelor şirului, apelul procedurii de ordonare a elementelor lui şi afişarea şirului ordonat, se poate utiliza următoarea secvenţă: Sub test() Const n As Integer = 4 Dim a(n) As Single a(0) = 89.5 a(1) = -7.23 a(2) = 2.5 a(3) = 6 '
Bazele informaticii
115
Module VBA
Call Ordonare(n, a) 'Apelul procedurii ' For i = 0 To n - 1 SirOrdonat = SirOrdonat & a(i) & " Next MsgBox(SirOrdonat) End Sub
"
() O funcţie ValoareTva, pentru calculul valorii TVA, poate fi definită într-un modul extern: Function ValoareTva(val As Single) As Single ValoareTva = val * 0.19 End Function Apelul funcţiei şi transmiterea parametrului Valoare se poate realiza în acelaşi modul sau dintr-un modul extern: Sub test() Dim Valoare As Single Valoare = 12.75 ' v = ValoareTva(Valoare) 'apelul functiei MsgBox("Valoarea Tva:" & v) End Sub
() Pentru calculul sumei 1+1/2+ … +1/n se defineşte următoarea funcţie: Function Suma(n As Integer) Dim s As Single s = 0 For i = 1 To n s = s + 1 / i Next Suma = s End Function
Bazele informaticii
116
Module VBA
Apelul funcţiei şi transmiterea parametrului n: Sub test() Dim n As Integer n = 7 ' v = Suma(n) 'apelul functiei ' MsgBox(n & " elemente: " & v) End Sub __________________________________________________________________________________Exemple ↑ Transmiterea argumentelor prin valoare şi prin referinţă Există două variante de transmitere a argumentelor, stabilindu-se astfel dacă procedura, care le primeşte, le poate modifica şi transmite înapoi: Dacă se transmit prin valoare (cuvânt cheie ByVal care de obicei se omite) - modalitatea implicită, procedura apelată poate modifica valorile, dar aceste modificări nu se vor transmite procedurii apelante. Transmiterea prin valoare protejează variabilele transmise, valorile lor neputând fi modificate în procedura apelantă (procedura apelată primeşte copii ale variabilelor din procedura apelantă). Se recomandă transmiterea datelor prin valoare, atunci când modificarea lor nu e necesară sau e riscantă. Dacă se transmit prin referinţă (cuvânt cheie ByRef), procedura apelată poate modifica valorile variabilelor transmise, modificări care sunt apoi transmise procedurii apelante. Transmiterea prin referinţă (sau adresă) permite procedurii să actualizeze variabilele, modificările fiind percepute de variabile şi în procedura apelantă. După ce acesta redobândeşte controlul, variabilele transmise şi modificate vor rămâne cu noile valori. ↓ Exemplu____________________________________________________________________________________ Procedura Sub ValoareTva, pentru calculul valorii Tva, transmiterea parametrilor prin referinţă: Sub ValoareTva(ByRef valoare, ByRef Tva) Tva = Valoare * 0.19 End Sub
Bazele informaticii
117
Module VBA
Apelul procedurii şi transmiterea parametrilor Valoare şi Tva: Sub Test() Dim Valoare As Single, Tva As Single Valoare = 1300.60 ' Call ValoareTva(Valoare, Tva) 'apelul procedurii Sub ' MsgBox("Valoarea Tva:" & Tva) End Sub ____________________________________________________________________________________Exemplu ↑ Funcţii recursive O funcţie este recursivă dacă se apelează pe ea însăşi. ↓ Exemplu____________________________________________________________________________________ Pentru calculul funcţiei factorial, fact, este definită următoarea secvenţă de instrucţiuni: Function fact(n As Integer) As Integer If n = 0 Then fact = 1 Else fact = n * fact(n - 1) End If End Function Apelul funcţiei şi transmiterea parametrului n: Sub Test() Dim n As Integer, f As Integer n = 5 ' f = fact(n) 'apelul functiei ' MsgBox(n & " factorial este: " & f) End Sub
____________________________________________________________________________________Exemplu ↑
Bazele informaticii
118
Module VBA
1. Editaţi propria funcţie de calcul a depunerilor cu dobândă cu relaţia:
MyFV Pmt * Unde:
(1 Rate) Nper 1 Rate
Pmt – reprezintă plăţile, Rate – este rata dobânzii, Nper – numărul de perioade. Comparaţi rezultatul aplicării ei cu valorile obţinute prin funcţia Basic FV. _______________________________________________________________
Rata dobânzii: 0,1
Numărul de perioade: 2 210
Plata: 100
Calcul
-210
_______________________________________________________________ Controale TextBox TextBox TextBox TextBox TextBox CommandButton
Proprietăţi (Name): (Name): (Name): (Name): (Name): (Name): Caption :
Rate Nper Pmt F1 F2 Calcul Calcul
Bazele informaticii
119
Module VBA
Procedurile:
Function MyFV(Rate, Nper, Pmt) As Double MyFV = Pmt * ((1 + Rate) ^ Nper - 1) / Rate End Function
Private Sub Calcul_Click() F1 = MyFV(Rate, NPer, Pmt) F2 = FV(Rate, NPer, Pmt) End Sub
k
2. Să se calculeze combinările de n luate câte k ( Cn ) utilizând relaţia de recurenţă:
Cnk Cnk1 Cnk11 , cazuri particulare : Cn0 Cnn 1 şi Cn1 n _______________________________________________________________ Combinări de:
5
luate câte:
3
=
10
Calculează
_______________________________________________________________ Controale TextBox TextBox TextBox CommandButton
Proprietăţi (Name): (Name): (Name): (Name): Caption :
v1 v2 Combinari Calculeaza Calculează
Procedurile:
Function comb(n, k) As Integer If k = 0 Or n = k Then Comb = 1 Exit Function End If If k = 1 Then Comb = n Exit Function End If comb = comb(n - 1, k) + comb(n - 1, k - 1) End Function
Bazele informaticii
120
Module VBA
Private Sub Calculeaza_Click() n = val(v1) k = val(v2) Combinari = comb(n, k) End Sub
3. Să se calculeze al n-lea termen al şirului Fibonacci definind o funcţie recursivă. Relaţia de calcul este: 1, n 0 Fib ( n ) 1, n 1 Fib ( n 1) Fib ( n 2), n 1
_______________________________________________________________ al
5
-lea termen este
8
_______________________________________________________________ Controale TextBox TextBox
Proprietăţi (Name): (Name):
Numa Pozitia
Procedurile:
Function Fib(n) As Integer If n = 0 Or n = 1 Then Fib = 1 Else Fib = Fib(n - 1) + Fib(n - 2) End If End Function Private Sub Numar_Change() n = val(Numar) Pozitia = Fib(n) End Sub 4. Să se calculeze cel mai mare divizor comun a două numere, conform relaţiei recursive a lui Euclid:
x, dacă y 0 cmmdc( x, y ) cmmdc( y, x mod y ) dacă y 0 Bazele informaticii
121
Module VBA
unde mod este operatorul modulo. _______________________________________________________________ Cel mai mare divizor comun pentru: 9
şi
18
este
9
_______________________________________________________________ Controale TextBox TextBox TextBox
Proprietăţi (Name): (Name): (Name):
a b rezultat
Procedurile:
Function cmmdc(x, y) As Integer If y = 0 Then cmmdc = x Else cmmdc = cmmdc(y, x Mod y) End If End Function Private Sub a_Change() x = val(a) y = val(b) rezultat = cmmdc(x, y) End Sub Private Sub b_Change() a_Change End Sub
Bazele informaticii
122
Formulare VBA
Unitatea de învăţare Nr. 13 şi 14 Formulare VBA Cuprins Obiectivele Unităţii de învăţare Nr. 13 şi 14 13.1. Formulare (form-uri) 13.2. Proprietăţi şi proceduri eveniment 13.3. Proprietatea Caption 13.4. Proprietatea StartUpPosition 13.5. Proprietatea Height şi Width 13.6. Proprietăţile ForeColor şi BackColor 13.7. Utilizarea controalelor 13.7.1. CommandButton 13.7.2. Label 13.7.3. TextBox 13.7.4. CheckBox 13.7.5. Frame 13.7.6. OptionButton 13.7.7. ListBox 13.7.8. ComboBox 13.7.9. Image 13.7.10. SpinButton 13.8. Modificarea proprietăţilor din cod Lucrare de verificare Unitate de învăţare Nr. 13 şi 14
Pagina 122 124 125 126 128 128 129 130 131 131 134 137 139 140 142 145 148 149 150 155
Bazele informaticii
123
Formulare VBA
În mediul Windows, o aplicaţie oferă o multitudine de alternative grupate în ferestre de dialog dintre cele mai diferite. Activităţile şi ordinea în care se desfăşoară ele sunt stabilite de utilizator - programul se află într-o stare de aşteptare, iar utilizatorul poate alege una din opţiunile oferite. Programul trebuie conceput astfel încât să răspundă la toate acţiunile utilizatorului. Orice acţiune - apăsarea unei taste, clic cu mouse-ul şi mişcarea lui, etc. - reprezintă un eveniment. Aplicaţiile care rulează sub sistemul de operare Windows sunt dirijate de evenimente iar rezolvarea sarcinilor de execuţie ale acestora impune conceptul de „programarea dirijată de evenimente”. Interfaţa cu utilizatorul, a unui program, permite utilizatorului să interacţioneze cu programul şi conţine orice control (cum ar fi butoane, casete de text) pe care utilizatorul îl manipulează pentru a furniza comenzi sau informaţii programului.
Formulare (form-uri) Limbajul Basic facilitează crearea interfeţelor cu utilizatorul intermediul unui set de controale, din caseta cu instrumente (Toolbox).
prin
Un proiect VBA grupează unul sau mai multe formulare şi module. În formulare (UserForm) se poziţionează controale OLE (obiecte de interfaţă) care permit introducerea sau extragerea datelor utilizatorului în mod interactiv. Controalelor din formular le sunt asociate proprietăţi şi metode (proceduri eveniment). Procedurile eveniment sunt secvenţe de instrucţiuni care pot fi modificate, ca de altfel şi proprietăţile controalelor incluse în formular. Modificările efectuate se reflectă în aspectul formularului şi în comportamentul acestuia în diferite situaţii.. În varianta Visual Basic şi a produselor similare, proiectul (programul) este un ansamblu de proceduri eveniment, cele mai multe având dimensiuni reduse şi fiecare tratând un eveniment individual. O astfel de procedură este ataşată unui control şi se execută numai când controlul respectiv interceptează evenimentul pentru care a fost scrisă. Altfel spus, un program va răspunde unui eveniment care se produce la execuţie numai dacă a fost scrisă o procedură pentru evenimentul respectiv; în caz contrar, evenimentul va fi ignorat. Fiecare control al unui formular (ca şi formularul însuşi) suportă mai Bazele informaticii
124
Formulare VBA
multe evenimente. De exemplu, un buton poate răspunde la evenimentul clic dacă pentru acest eveniment este scrisă o procedură. Atunci când aplicaţia se va lansa în execuţie, iar utilizatorul va efectua clic pe buton (se produce în acest fel evenimentul), va fi lansată automat în derulare procedura definită. Proprietăţi şi proceduri eveniment Un formular poate conţine mai multe controale, el însuşi fiind considerat un control. Fereastra Properties permite alegerea controlului şi a proprietăţii a cărei valoare se schimbă, ca de exemplu: Proprietatea Caption este destinată stabilirii unui titlu (denumire) pentru formular sau control. Proprietatea (Name) permite atribuirea unor nume controalelor. VBA stabileşte valori implicite proprietăţii (Name) cum ar fi: UserForm1, UserForm2… pentru formulare (prin convenţie, numele formularelor utilizator vor fi prefixate de cuvântul frm, de exemplu: frmPrincipal, frmCalcul); Label1, Label2… pentru etichete (prefix convenţional: lbl); CommandButton1, CommandButton2… pentru butoane (prefix: btn); TextBox1, TextBox2… pentru casete de text (prefix: txt). Aceste nume ale controalelor pot fi folosite aşa cum au fost definite de VBA însă utilizatorul are posibilitatea stabilirii unor denumiri proprii. Proprietăţile formularului sunt afişate, alfabetic (Alphabetic) sau pe categorii (tab-ul Categorized): Aparenţă (Appearence) : culorile utilizate, efectele vizuale de umplere etc. Comportare (Behaviour) : modul de continuare a acţiunilor la părăsirea ultimului control de pe formular (Cycle) sau accesul utilizatorului la obiect (Enabled). Font (Font) : fontul implicit (poate fi modificat pentru fiecare control în parte). Diverse (Misc) : numele formei, imaginea mouse-ului etc. Imagine (Picture) : imagini utilizate. Poziţie (Position) : poziţie şi dimensiuni. Procedurile eveniment sunt secvenţe de instrucţiuni asociate diferitelor controale la activarea/dezactivarea acestora. Afişarea ferestrei de cod este realizată prin executarea unui dublu clic pe controlul pentru care se doreşte scrierea instrucţiunilor program. Numele procedurii (Click - pentru CommandButton sau OptionButton, Change – pentru TextBox) este legat de numele controlului prin simbolul _ (underline) : Bazele informaticii
125
Formulare VBA
Private Sub control_procedura() End Sub În instrucţiunile Basic, referirea la proprietatea unui control se face prin construcţia control.proprietate – numele proprietăţii este legat de numele controlului printr-un punct. Dacă sunt create mai multe formulare referirea la un control din cadrul unui formular se realizează printr-o construcţie asemănătoare, adică formular.control.proprietate. Există construcţii speciale, mai scurte, cum ar fi Me - care indică formularul curent. ↓ Exemplu____________________________________________________________________________________ ' Me.Caption = "Actualizare" 'modifică proprietatea Caption (titlu) a formularului ' UserForm2.Label1.Caption = "Numele persoanei" 'modifică proprietatea Caption a obiectului Label1 ' Me.Hide 'execută metoda Hide (ascundere)ataşată formularului ____________________________________________________________________________________Exemplu ↑ Proprietatea Caption În general, proprietatea Caption a unui control stabilește textul pe care respectivul control îl afişează. Proprietatea Caption a unui formular definește titlul form-ului. Dacă nu este afişată fereastra de controale (Toolbox), având formularul deschis în mediul de proiectare, din meniul View (afişare) se selectează din linia de butoane standard. opţiunea Toolbox sau se apasă butonul Pentru introducerea unui control în formular (de exemplu un buton) se utilizează mouse-ul (tragerea controlului în formular sau clic pe control şi apoi clic pe formular). Dacă nu este afişată fereastra de proprietăţi a unui formular, din meniul View (afişare) se selectează opţiunea Properties Window (fereastra de dintre butoanele standard. Pentru un formular care proprietăţi) sau butonul conţine controale sau componente, se poate folosi şi lista derulantă din
Bazele informaticii
126
Formulare VBA
fereastra Properties pentru a selecta obiecte din formular. Unui control selectat i se pot configura proprietăţile. Pentru a configura proprietatea Caption, a unui formular, în fereastra de proprietăţi:
Se selectează acesta din lista (derulantă) a obiectelor, inclusă în fereastra Properties. Din lista de proprietăţi se alege proprietatea Caption. Se introduce textul nou pentru proprietatea Caption (de exemplu, Form-ul meu).
Pentru a configura proprietatea Caption din cod: Se deschide editorul de cod (dublu-clic pe butonul Command Button1). Se foloseşte cuvântul cheie Me pentru a referi formularul în interiorul procedurii de tratare a unui eveniment Click pe un buton: Private Sub CommandButton1_Click() Me.Caption = "O noua denumire" End Sub
Se rulează proiectul şi, prin clic pe buton, titlul formularului se schimbă la noua valoare.
Bazele informaticii
127
Formulare VBA
Proprietatea StartUpPosition Proprietatea StartUpPosition determină poziţia unui formular atunci când este executat prima oară. De obicei, atunci când un formular rulează, utilizatorul îl poate muta. Pentru a amplasa un formular în ecranului folosind fereastra de proprietăţi:
mijlocul
Având formularul deschis, în fereastra Properties se selectează opţiunea StartUpPosition. În coloana din dreapta, se selectează 2CenterScreen. Se rulează proiectul. Fereastra bazată pe form va apărea în centrul ecranului.
Proprietăţile Height şi Width Prin aceste proprietăţi se fixează înălţimea şi lăţimea (în pixeli) a ferestrei formularului (unitatea de măsură standard pentru monitoarele de calculator). Se poate configura dimensiunea formularului în trei moduri: Trăgând cu mouse-ul de latura de jos şi/sau din dreapta a formularului, în mediul de proiectare, până ce formularul atinge dimensiunile dorite. Schimbările făcute în acest fel sunt reflectate, în fereastra Properties, de Width (lăţime) şi Height (înălţime). Setând în fereastra de proprietăţi dimensiunile Width şi Height. Configurând în cod valorile pentru Width şi Height.
Bazele informaticii
128
Formulare VBA
Pentru a schimba dimensiunile unui formular din cod: Se deschide editorul de cod (dublu-clic pe butonul Command Button1). Se foloseşte cuvântul cheie Me pentru a referi formularul în interiorul procedurii de tratare a unui eveniment Click pe un buton: Private Sub CommandButton1_Click() Me.Width = 500 Me.Height = 300 End Sub
Se rulează proiectul şi, prin clic pe buton, dimensiunile formularului se schimbă la noile valori. Proprietăţile ForeColor şi BackColor
Proprietatea ForeColor stabileşte culoarea elementelor grafice şi, mai important, a textului. Proprietatea BackColor stabileşte culoarea de fundal. Ele se configurează în acelaşi mod. Atunci când se configurează proprietăţile ForeColor şi BackColor ale unui formular, se configurează, de asemenea, şi valorile implicite ale acestora pentru orice control aşezat în interiorul formularului (în afara cazului în care se configurează culorile individual pentru un control, acesta va folosi valorile oferite de form). Pentru a configura proprietatea ForeColor folosind fereastra de proprietăţi: Se deschide un formular în mediul de proiectare. În fereastra Properties se alege
ForeColor.
În coloana din dreapta, clic pe săgeata în jos. Din tabul Palette se alege culoarea, în mod vizual.
Bazele informaticii
129
Formulare VBA
Utilizarea controalelor Includerea controalelor în cadrul unui formular se realizează prin introducerea (drag&drop) unor obiecte (CommandButton, Label, TextBox, etc.) în acest formular. Pentru aceasta, se acţionează butonul corespunzător din Toolbox şi se stabileşte porţiunea dreptunghiulară (zona) din formular unde va fi afişat controlul. Practic, controlul va fi desenat (se poziţionează cursorul mouse-ului în colţul stânga-sus al zonei de afişare, se ţine apăsat butonul stâng şi se trage cursorul spre colţul dreapta-jos). O dată plasat pe formular, proprietăţile (starea) unui control pot fi vizualizate şi modificate în fereastra „Properties", iar comportamentul său poate fi modelat prin scrierea procedurilor eveniment. Toate controalele sunt obiecte şi, ca urmare, răspund la evenimentele declanşate de entităţile exterioare (utilizator, alte controale) prin intermediul procedurilor eveniment.
Multe proprietăţi enumerate anterior pentru formulare se pot aplica
nu numai acestora ci şi controalelor din formular. Cele mai importante controale:
Buton
Etichetă
Casetă de text
Casetă de validare Cadru de grupare
Buton radio (opţiune)
Casetă cu listă
Listă derulantă
Casetă de imagine
Generator de valori
Bazele informaticii
130
Formulare VBA
Controlul CommandButton este tipic pentru startul evenimentelor, pentru căutarea şi închiderea formularelor, etc. Codul program de executat este plasat pe buton este conţinut în proprietatea în metoda Click. Textul afişat Caption, iar numele lui în proprietatea (Name). Mediul de proiectare VBA atribuie nume butoanelor (CommandButton1, CommandButton2, …) dar este indicat ca utilizatorul să folosească denumiri semnificative. Prin convenţie aceste denumiri ar putea fi prefixate prin literele btn (btnCalculeaza, btnStart, …).
Controlul Label este utilizat pentru afişarea unor texte care nu pot fi editate de utilizator. Este util pentru descrierea altor controale din formular cum ar fi TextBox, ListBox, etc. Proprietăţile cele mai importante ale controlului Label: Proprietate
Name Nume VBA: Label1, Label2, … Convenţie prefix: lbl.
AutoSize Proprietate de tip boolean care defineşte modalitatea de dimensionare a etichetei (automat - True, manual - False). Implicit este False (dimensiune fixă). Dacă se fixează la valoarea True înălţimea etichetei se autoreglează în funcţie de textul introdus.
BackColor Culoarea de fundal a textului de pe etichetă. Sunt disponibile 2 palete de culori: Palette şi System.
BorderStyle Stilul marginii (cadrului) etichetei: FmBackStyleOpaque, FmBackStyleTranparent.
Caption Este proprietatea cea mai des utilizată şi se referă la conţinutul efectiv al
Bazele informaticii
131
Formulare VBA
etichetei. Poate fi stabilit atât la proiectare, cât şi în momentul execuţiei.
ControlTipText Afişează un indicator textual, atunci când se plasează cursorul mouse-ului în zona etichetei.
Font Fontul (stilul caracterelor) cu care este afişat textul de pe etichetă. Este o proprietate care fixează atribute pentru tip, mărime, stil de afişare.
ForeColor Culoarea cu care este scris textul în cadrul etichetei. Are aceeaşi plajă de valori ca şi BackColor.
Heigth Înălţimea etichetei, în pixeli.
Picture Imaginea care apare pe fundalul etichetei. Această proprietate reprezintă de fapt o referinţă către un fişier de tip imagine (bmp, jpg, gif, ico, etc).
PicturePosition Alinierea imaginii în cadrul etichetei.
TextAlign Modalitatea de aliniere a textului în cadrul suprafeţei etichetei. Valori: FmTextAlignLeft, FmTextAlignCenter, FmTextAlignRight. Implicit alinierea textului este la stânga.
Visible Permite ascunderea etichetei sau (re)afişarea ei pe ecran, în funcţie de valorile care îi sunt atribuite: False, True.
Width Lăţimea etichetei, în pixeli.
Bazele informaticii
132
Formulare VBA
↓ Exemplu____________________________________________________________________________________ Pe un formular se introduce o etichetă cu numele lblPoza, proprietatea Visible având valoarea False. O imagine de fundal este fixată prin proprietatea Picture:
În procedura eveniment a butonului se scriu următoarele linii de cod care au rolul de a modifica titlul formularului (UserForm1), a etichetei şi a butonului (btnVizualizeaza): Private Sub btnVizualizeaza_Click() Me.Caption = "Poza mea" lblPoza.Visible = True btnVizualizeaza.Caption = "O fetiţă!" End Sub Rezultat al apăsării butonului, la rularea formularului:
____________________________________________________________________________________Exemplu ↑
Bazele informaticii
133
Formulare VBA
Acest control este unul dintre cele mai folosite în programarea interfeţelor grafice datorită avantajelor pe care le oferă la introducerea datelor şi la manipularea lor. Defineşte un câmp de editare în care utilizatorul poate introduce un text. Controlul TextBox afişează mai multe linii atunci când proprietatea Multiline este setată pe True. Aspectul textului afişat este determinat de proprietăţile Font şi ForeColor. La fel ca şi la alte controale, proprietăţile pot fi modificate prin cod program, în timpul rulării aplicaţiei. Caseta de text este foarte flexibilă în VBA, permiţând introducerea datelor pe una sau mai multe linii de text, folosirea barelor de derulare (Scrollbars), etc. De asemenea, o casetă de text poate fi folosită în modul activ (utilizatorul are acces la conţinutul său) sau în modul inactiv (utilizatorul poate doar să vizualizeze conţinutul, textul fiind protejat în cazul în care se încearcă modificarea sa). Principalele proprietăţi, ale unei casete de text, sunt rezumate în tabelul următor: Proprietate
Name Nume VBA: TextBox1, TextBox2, … Convenţie prefix: txt.
BackColor Culoarea de fundal a casetei de text. În momentul proiectării (la plasarea casetei pe formular) se pot alege valori din 2 categorii: Palette, System, fiecare cu propria sa paletă de culori.
BorderStyle Tipul marginii casetei de text. Sunt disponibile 2 variante:
0-FmBackStyleTransparent; 1-FmBackStyleOpaque. Enabled Proprietate de tip boolean care permite utilizatorului să modifice conţinutul casetei (True - implicit) sau protejează textul împotriva modificărilor (False).
Bazele informaticii
134
Formulare VBA
ForeColor Culoarea textului care este afişat în interiorul casetei. Maniera de selectare este asemănătoare cu cea asociată proprietăţii BackColor.
MaxLength Numărul maxim de caractere care pot fi introduse în caseta de text. Poate fi modificată la o valoare de tip Integer pozitivă.
MousePointer Stabileşte felul cursorului mouse-ului atunci când acesta se află pe caseta de text. Valorile pot fi alese dintr-o listă: AppStarting, Arrow, Cross, Ibeam, NoDrop, SizeAll …
Multiline Precizează dacă textul din casetă poate fi plasat pe mai multe rânduri. Este o proprietate de tip boolean (implict False).
PasswordChar Defineşte care este caracterul (de exemplu *) ce se va afişa în mod repetat, astfel încât textul din interior să nu poată fi descifrat. Utilă pentru proceduri de introducere a parolelor sau a cuvintelor-cheie.
ScrollBars Stilul barelor de derulare aferente casetei:
None (nu este prezentă nici o bară de derulare); Horizontal (bară de derulare orizontală, sub caseta de text); Vertical (bară de derulare verticală, în dreapta casetei de text); Both (bare de derulare verticală şi orizontală). În cazul în care se alege această variantă, se recomandă testarea ei în acelaşi timp cu proprietatea Multiline.
TextAlign Alinierea textului introdus în caseta de text. Alinierea poate fi :Left (implicit), Right, Center.
Bazele informaticii
135
Formulare VBA
↓ Exemplu____________________________________________________________________________________ Se editează un formular care să permită următoarele operaţiuni: introducerea numelui (mărcii) unui autoturism; introducerea preţului autoturismului, în Euro; cursul, la zi, a monedei europene; în funcţie de cursul monedei Euro se calculează preţul autoturismului în lei; confirmarea stocului existent; confirmarea includerii de taxe; opţiunea de culoare; afişarea informaţiile despre autoturism: marca, preţul în lei, culoare, dacă se află în stoc, dacă preţul are taxele incluse. Pentru informaţiile introduse de la tastatură, textbox-urilor li se atribuie nume semnificative (txtMarca, txtPretEuro, txtCursEuro). Butonul de comandă (btnInfo) determină afişarea - în eticheta lblInfo - informaţiilor necesare. Proprietatea Font a acestor controale poate fi modificată pentru o afişare mai vizibilă (de exemplu Bold): txtMarca
txtCursEuro
txtPretEuro
btnInfo
lblInfo
Procedura de preluare a informaţiilor şi de afişare a rezultatelor prelucrării lor (asociată butonului „Info”) conţine următoarele instrucţiuni: Private Sub btnInfo_Click() If IsNumeric(txtPretEuro.Text) And _ IsNumeric(txtCursEuro.Text) Then PretEuro = Val(txtPretEuro.Text) CursEuro = Val(txtCursEuro.Text) PretLei = PretEuro * CursEuro * 1.19 lblInfo.Caption = "Autoturismul " & txtMarca.Text _ & vbCrLf & "Are pretul " & PretLei & _ Bazele informaticii
136
Formulare VBA
"lei (cu TVA)" 'Observaţie: vbCrLf -> pentru rând nou
Else MsgBox("Eroare! Valoare numerică!") End If End Sub
____________________________________________________________________________________Exemplu ↑
Proprietatea Text a casetelor de text returnează întotdeauna o
valoare de tip String, iar în cazul în care sunt introduse valori numerice, se impune realizarea unei conversii la tipul de date al variabilei care preia valoarea respectivă. Cu funcţia IsNumeric, de tip boolean, se poate testa dacă argumentul este numeric (rezultat True pentru argument numeric).
Controlul CheckBox creează posibilitatea de se specifica anumiţi parametri prin intermediul unor casete de validare. Realizarea practică se face prin efectuarea unui clic cu mouse-ul (bifare – debifare). Principalele proprietăţi: Proprietate
Name Nume VBA: CheckBox1, CheckBox2, … Convenţie prefix: chk. Alignment Specifică locul de plasare a cadrului de bifare în cadrul controlului. Această proprietate poate lua valorile Left şi Right. Right este implicit.
Enabled Este proprietate de tip boolean care stabileşte dacă checkbox-ul este sau nu activ.
Font Stilul fontului cu care este scris textul însoţitor.
ForeColor Culoarea cu care este scris textul însoţitor.
Caption Bazele informaticii
137
Formulare VBA
Proprietate ce determină textul însoţitor (explicativ) al casetei de validare.
Value Proprietate importantă cu următoarele valori: True, dacă este bifată caseta; False, dacă este debifată caseta (implicit).
Visibile Dacă este True (implicit), caseta de validare este vizibilă pe formular. În caz contrar, este invizibilă. ↓ Exemplu____________________________________________________________________________________ Pe formularul anterior se introduc două CheckBox-uri (chkStoc, chkTaxe). În procedura eveniment btnInfo_Click se adaugă următoarele instrucţiuni: If chkStoc.Value Then Stoc = "Se afla in stoc" Else Stoc = "Nu se afla in stoc" End If If chkTaxe.Value Then Taxe = "Toate taxele incluse!" Else Taxe = "Nu include taxe" End If lblInfo.Caption = "Autoturismul " & txtMarca.Text & vbCrLf & _ "Are pretul " & PretLei & " lei (cu TVA)" & _ vbCrLf & Stoc & vbCrLf & Taxe Un rezultat al execuţiei formularului ar putea arăta astfel:
checkBox bifat
Rezultatul prelucrării
_____________________________________________________________________________Exemplu ↑ Bazele informaticii
138
Formulare VBA
Rolul controlului de tip Frame este de a grupa două sau mai multe controale (de regulă, CheckBox sau OptionButton) astfel încât să formeze un set de elemente între care se stabileşte o relaţie. De exemplu în cazul controlului CheckBox, utilizatorul poate bifa un control indiferent de starea celorlalte. Există însă situaţii în care este de dorit ca starea unei opţiuni să elimine în mod automat celelalte opţiuni şi astfel se ajunge la utilizarea butoanelor de opţiune structurate într-un grup.
Principalele proprietăţi ale unui Frame sunt: Proprietate
Name Nume VBA: Frame1, Frame2, … Convenţie prefix: frm.
Caption Textul care apare în antetul grupului.
Enabled Dacă este True, elementele din grup vor putea fi accesate. Dacă este False, elementele din grup nu pot fi manipulate de utilizator.
Font Tipul fontului cu care este scris titlul grupului.
Visible Dacă este True, grupul este vizibil pe formular; în caz contrar, grupul este invizibil.
Bazele informaticii
139
Formulare VBA
Este controlul care se foloseşte atunci când trebuie selectată doar o singură opţiune din mai multe posibile. De regulă, aceste butoane sunt comasate într-un cadru de grupare, asigurându-se, în acest fel, selectarea doar a unei singure opţiuni. Proprietăţile cele mai importante ale unui control de tip buton radio sunt: Proprietate
Name Nume VBA: OptionButton1, OptionButton2, … Convenţie prefix: rbn. Alignment Locul de plasare a cadrului de bifare în cadrul controlului. Această proprietate poate lua valorile Left şi Right. Right este implicit.
Caption Şirul de caractere care însoţeşte butonul radio.
TextAlign Modalitatea de aliniere a textului în cadrul controlului. Poate lua valorile Left, Center, Right. Implicit: Left.
Value Este proprietatea cea mai folosită, indicând dacă butonul este selectat - True sau nu – False (implicit).
Visible Proprietate de tip boolean care stabileşte dacă butonul radio este sau nu vizibil pentru utilizator. ↓ Exemplu____________________________________________________________________________________ Se plasează pe formular controlul de tip Frame, cu proprietatea Name, frmCuloare. Se aduc, în interiorul acestui control, din cutia cu instrumente, trei butoane radio: rbnAlb, rbnGri, rbnRosu (pentru selectarea unei culori). Controlul Frame are rolul de container pentru butoanele radio iar deplasarea lui determină şi deplasarea elementelor pe care le conţine.
Bazele informaticii
140
Formulare VBA
Codul care completează versiunea anterioară a formularului este următorul: Private Sub btnInfo_Click() If rbnAlb.Value Then Culoare = "Alb" End If If rbnGRi.Value Then Culoare = "Gri" End If If rbnRosu.Value Then Culoare = "Gri" End If '. '. '. lblInfo.Caption ="Autoturismul " & txtMarca.Text & vbCrLf & _ "Are pretul " & PretLei & " lei (cu TVA)" & _ vbCrLf & Stoc & vbCrLf & Taxe & _ vbCrLf & "Culoare: " & Culoare 'Observaţie: vbCrLf -> pentru rând nou '. '. Când se lansează în execuţie formularul, se va putea selecta doar un singur buton, cel selectat anterior fiind în mod automat debifat (astfel se poate alege doar o singură variantă din mai multe posibile):
Bazele informaticii
141
Formulare VBA
____________________________________________________________________________________Exemplu ↑
Controlul ListBox dintr-un formular afişează o listă de una sau mai multe elemente. Dacă numărul total al elementelor excede numărul celor care pot fi afişate, un scroll bar este automat adăugat la acel control. Prin proprietatea MultiSelect elementele listei pot fi afişate în coloane multiple (implicit MultiSelect este fmMultiSelectSingle). Funcţia ListIndex returnează o valoare întreagă care corespunde primului element selectat din listă. Dacă nu este selectat nici un element, valoare lui ListIndex este -1. Dacă este selectat primul element din listă, valoarea lui ListIndex este 0. Funcţia ListCount furnizează numărul elementelor listei. În esenţă, controlul ListBox poate conţine mai multe valori care să fie gestionate pe o suprafaţă fixă de pe formular, accesul la valorile ascunse realizându-se prin intermediul barelor de derulare. Funcţia Clear permite ştergere elementelor listei (golirea listei). Proprietăţile importante ale unei casete cu listă sunt enumerate în tabelul următor: Proprietate
Name Nume VBA: ListBox1, ListBox2, … Convenţie prefix: lst. BorderStyle Marginea casetei cu listă: None: nu apare nici o bordură;
Bazele informaticii
142
Formulare VBA
Single - bordură.
ColumnWidths Lăţimea (în număr de puncte) fiecărei coloane în cazul în care lista suportă coloane multiple.
Enabled Proprietate de tip boolean care, atunci când are valoarea True, permite utilizatorului să selecteze elemente din listă. În caz contrar, lista este vizibilă, dar inactivă.
Font Stilul fontului pentru elementele din cadrul listei.
ColumnCount Lista este afişată pe un număr de coloane stabilit prin această proprietate.
MultiSelect Poate lua una dintre valorile: Single: utilizatorul poate selecta doar un singur element din listă la un moment dat (implicit); Multi: pot fi selectate mai multe valori, prin simpla apăsare a butonului din stânga al mouse-ului; Extended: pot fi selectate mai multe valori, prin folosirea mouseului şi a tastei Ctrl, precum şi prin deplasarea mouse-ului în timp ce butonul din stânga este apăsat.
TextAlign Implicit, elementele unei liste sunt aliniate la stânga. Se pot face şi alinieri la dreapta (de regulă pentru elemente de tip numeric) sau la centrul listei.
Visible Dacă este True, lista este vizibilă; în caz contrar, ea există în memorie, dar nu este vizibilă pe ecran. ↓ Exemplu____________________________________________________________________________________ Cea mai utilizată operaţiune este cea de adăugare a elementelor în listă (aici lstAuto). În momentul proiectării interfeţei, cu ajutorul procedurii Sub UserForm_Initialize(), se introduc elementele listei (aici, mărci de autoturisme). Utilizându-se o singură coloană (lstAuto.ColumnCount = 1) lista (lstAuto.List()) se preia din tabloul Lista(5).
Bazele informaticii
143
Formulare VBA
Atunci când se va lansa formularul în execuţie lista conţine autoturismele specificate.
lstAuto
Se pot include, în formular, două butoane: btnAdauga btnSterge
Adăugarea unei mărci noi de autoturism: Private Sub btnAdauga_Click() 'Introducerea unei noi mărci Marca = InputBox("Se introduce o nouă marcă:") LstAuto.AddItem (Marca) End Sub
Bazele informaticii
144
Formulare VBA
Se adaugă marca Renault:
Pentru ştergerea unui element, aflat în listă, se apelează la funcţia
RemoveItem:
Private Sub btnSterge_Click() 'Daca lstAuto contine elemente If lstAuto.ListCount >= 1 Then 'Daca nu s-a selectat nici un element ' se alege ultimul din listă If lstAuto.ListIndex = -1 Then lstAuto.ListIndex = _ lstAuto.ListCount - 1 End If lstAuto.RemoveItem(lstAuto.ListIndex) End If End Sub Se şterge marca Opel:
____________________________________________________________________________________Exemplu ↑
Caseta cu listă derulantă permite memorarea unei liste de elemente în mod asemănător listelor clasice, însă suprafaţa ocupată pe formular este corespunzătoare unei singure linii. În momentul selecţiei, caseta se derulează, afişând elementele disponibile, iar după selectarea unuia dintre ele se reduce la forma iniţială. Selecţia poate fi realizată şi prin tastarea primelor caractere care
Bazele informaticii
145
Formulare VBA
identifică elementele listei. Câteva proprietăţi ale ComboBox-ului: Proprietate
Name Nume VBA: ComboBox1, ComboBox2, … Convenţie prefix: cbo.
DropButtonStyle Modul de vizualizare a butonului de derulare a listei: Plain: ; Arrow (implict): buton de selecţie marcat cu săgeată: Ellipses:
;
Reduce:
.
;
ColumnWidths Lăţimea fiecărei coloane în cazul în care lista suportă coloane multiple.
Enabled Dacă este True, lista este activă; dacă este False, caseta este vizibilă pe ecran, dar nu poate fi selectat nici un element.
Font Stilul caracterelor folosite pentru afişarea elementelor.
ListWidth Lăţimea, în pixeli, a listei care apare în momentul când se apasă butonul de selecţie. Valoarea stabilită nu poate fi mai mică decât lăţimea ComboBox-ului.
MaxLength Numărul maxim de caractere care pot fi introduse de utilizator. Implicit, această proprietate are valoarea zero (pot fi introduse oricâte caractere).
TextAlign
Bazele informaticii
146
Formulare VBA
Implicit, elementele unei liste sunt aliniate la stânga. Se pot face şi alinieri la dreapta (de regulă pentru elemente de tip numeric) sau la centrul listei.
Text Stabileşte sau returnează elementul curent care este selectat în casetă.
Visible Dacă este True, controlul este vizibil pe formular; în caz contrar, nu este vizibil pentru utilizator.
↓ Exemplu____________________________________________________________________________________ În exemplul următor se utilizează două ComboBox-uri (cboMarca şi cboPret). Cu ajutorul procedurii Sub UserForm_Initialize(), se introduc elementele listei (la fel ca în exemplul anterior - pentru ListBox): cboMarca
cboPret
btnInfo lblInfo
Pentru afişarea elementelor curente se foloseşte proprietatea Text, care returnează elementul curent selectat. În cazul în care nu este selectat nici un element din listă, valoarea returnată este şirul vid (va apare un mesaj de avertizare). Marca selectată se determină prin simplul apel al proprietăţii Text a controlului cboMarca.
Bazele informaticii
147
Formulare VBA
Private Sub btnInfo_Click() Marca = cboMarca.Text PretulMaxim = cboPret.Text If Marca = "" Then MsgBox("Marca?!") Else lblInfo.Caption = "Marca: " & Marca & vbCrLf _ & "Pret maxim: " & PretulMaxim End If End Sub ____________________________________________________________________________________Exemplu ↑
Acest control permite afişarea pe suprafaţa formularului a unor imagini preluate din fişiere grafice. Formatele suportate sunt multiple: bmp, gif, jpg, ico etc. Referitor la aspectul vizual, cele mai importante proprietăţi sunt următoarele: Proprietate
Name Nume VBA: Image1, Image2, … Convenţie prefix: img.
BackStyle Fundalul casetei: Opaque (implicit); Transparent.
BorderStyle
Bazele informaticii
148
Formulare VBA
Stilul marginii casetei: None: nici o bordură; Single: bordură (implicit);
Picture Imaginea care se va afişa în casetă. În momentul proiectării, această imagine poate fi preluată prin indicarea fişierului care o conţine.
Controlul SpinButton oferă o modalitate de a selecta o valoare numerică dintr-un anumit interval. Proprietăţile definitorii ale generatorului de valori sunt următoarele: Proprietate
Name Nume VBA: SpinButton1, SpinButton2, … Convenţie prefix: spb. Enabled Proprietate de tip boolean: True: controlul este disponibil pentru a fi modificat de utilizator; False: utilizatorul nu poate modifica starea controlului.
SmallChange Stabileşte pasul cu care se modifică valoarea curentă din generator atunci când utilizatorul acţionează butoanele de incrementare sau decrementare. Valoarea incrementului trebuie să fie un număr întreg mai mare sau egal cu zero (implicit 1).
Max Limita superioară a intervalului de valori. Această valoare trebuie să fie mai mare sau egală cu Min.
Min Limita inferioară a intervalului în care poate naviga utilizatorul.
Orientation Orientarea butoanelor de incrementare/decrementare: Auto; Vertical; Horizontal
Value
Bazele informaticii
149
Formulare VBA
Reprezintă valoarea curentă a generatorului.
Visibile Dacă este True, generatorul este vizibil pentru utilizator; dacă este False, este ascuns.
↓
Exemplu______________________________________________________________________________ Într-un formular se introduc următoarele controale: Controlul spbVarsta (cu proprietăţile Min = 1, Max = 120); Eticheta lblInfo. Incrementarea valorii curente
lblInfo
Decrementarea valorii curente
Proprietatea Value se modifică dinamic, în funcţie de acţiunile utilizatorului asupra butoanelor de navigare, deci valoarea numerică poate fi preluată şi utilizată: Private Sub spbVarsta_Change() lblInfo.Caption = "Vârsta: " & spbVarsta.Value & " ani" End Sub ___________________________________________________________________________________Exemplu ↑
Modificarea proprietăţilor din cod Pentru modificări ale proprietăţilor unui control este necesar ca valorile acestora să fie citite şi redefinite în timpul execuţiei (Run Mode). Pentru fiecare control se dau valori implicite (default), ele pot fi însă modificate prin acţiuni ale utilizatorului. Iniţializarea dialogului este realizată prin codul cuprins în procedura eveniment Initialize. Afişarea formularului declanşează evenimentul Initialize şi astfel au loc şi atribuirile de valori specificate.
Bazele informaticii
150
Formulare VBA
Când se gestionează mai multe formulare se impune, de cele mai multe ori, activarea altor formulare din formularul curent. ↓
Exemplu______________________________________________________________________________ Având formularul UserForm1, deschis, în mediul de proiectare (cu un buton, CommandButton1 inclus) se adaugă un nou formular. Se deschide editorul de cod (dublu-clic pe butonul Button1). Se aplică metoda Show pentru activarea celui de al doilea formular: Private Sub CommandButton1_Click() Me.Caption = "Eu sunt formularul 1" UserForm2.Caption = "Eu sunt formularul 2" UserForm2.Show End Sub
La rularea aplicaţiei rezultă:
____________________________________________________________________________________Exemplu ↑ Când se impune modificarea mai multor proprietăţi ale unui control se utilizează, de multe ori, structura:
With
End With
↓ Exemplu____________________________________________________________________________________ Se creează un formular; Se introduce, în formular, controlul ListBox cu numele lstCardinale; Codul următor realizează iniţializarea valorilor din listă:
Bazele informaticii
151
Formulare VBA
Private Sub UserForm_Initialize() With lstCardinale .AddItem "Nord" .AddItem "Sud" .AddItem "Est" .AddItem "Vest" .ListIndex = 3 End With End Sub Rularea formularului:
____________________________________________________________________________________Exemplu ↑
Este de remarcat că, deşi în modelele de obiecte Word, Excel şi
PowerPoint colecţiile sunt indexate de la 1, în tablourile şi colecţiile asociate formularelor se foloseşte indexarea de la 0. De aici selectarea
ultimei intrări (cu numărul de ordine 4) din listă prin instrucţiunea
ListIndex = 3. Prin setarea proprietăţilor unui control şi aplicarea metodelor în timpul execuţiei, se pot efectua modificări într-un dialog utilizator care se execută, modificări apărute ca răspuns la acţiunile şi alegerile utilizatorului. De exemplu, accesibilitatea unor controale poate fi controlată prin modificarea proprietăţii Enabled. Dacă proprietatea este setată pe False, atunci utilizatorul nu poate accesa controlul. ↓
Exemplu _____________________________________________________________________________
Se creează un formular conţinând două butoane radio şi o casetă de validare. Codul următor restricţionează accesul la radio butoane: Private Sub CheckBox1_Click() With Me 'Me se referă la formularul curent If .CheckBox1.Value = True Then .OptionButton1.Enabled = False .OptionButton2.Enabled = False Else
Bazele informaticii
152
Formulare VBA
.OptionButton1.Enabled = True .OptionButton2.Enabled = True End If End With End Sub Efectul bifării/debifării casetei de validare:
____________________________________________________________________________________Exemplu ↑ Prin intermediul metodei SetFocus se controlează focalizarea. Un control care are focusul este cel care răspunde la intrările din tastatură. ↓
Exemplu______________________________________________________________________________
Pe un formular se introduc două etichete (Textul 1 şi Textul 2) şi două CheckBox-uri. Procedurile care tratează evenimentele Click ale etichetelor impun focusul: Private Sub Label1_Click() CheckBox1.SetFocus End Sub Private Sub Label2_Click() CheckBox2.SetFocus End Sub Efectul click-ului pe cele două etichete:
____________________________________________________________________________________Exemplu ↑ Valorile introdu-se, utilizând controalele TextBox, sunt de tip String. Pentru colectarea unor valori numerice este necesară o conversie (de obicei cu funcţia Val). Deoarece conversia string numeric ia în considerarea caracterele, până la primul ce nu reprezintă informaţie numerică, se impune validarea şirului introdus prin funcţia IsNumeric.
Bazele informaticii
153
Formulare VBA
↓
Exemplu______________________________________________________________________________ Pe un formular se introduc două casete de text şi un buton (btnValidare). Procedura care tratează evenimentul Click al butonului afişează un mesaj de eroare realizând focusul pe TextBox-ul care a generat eroarea: Private Sub btnValidare_Click() If Not IsNumeric(TextBox1.Text) Then MsgBox ("Eroare 1") TextBox1.SetFocus End If If Not IsNumeric(TextBox2.Text) Then MsgBox ("Eroare 2") TextBox2.SetFocus End If End Sub Efect când se introduce, de exemplu, o valoare eronată în al doilea TextBox:
____________________________________________________________________________________Exemplu ↑ La închiderea unui dialog, toate datele introduse de utilizator se pierd. Din acest motiv, informaţia necesară a fi reutilizată trebuie să fie salvată în variabile de la nivelul modul, înaintea descărcării formularului. Închiderea (descărcarea) formularului se realizează prin instrucţiunea Unload. ↓ Exemplu____________________________________________________________________________________ Pe un formular se introduc un TextBox (txtMem) şi un buton (btnStop) iar String-ul introdus în TextBox e necesar a fi salvat:
Bazele informaticii
154
Formulare VBA
Pentru ca, la descărcarea formularului, să fie memorată valoarea introdusă în caseta de text se utilizează o variabilă de lucru (Nume) de tip Public: Public Nume As String Private Sub btnStop_Click() Nume = txtMem.Text Unload Me End Sub ____________________________________________________________________________________Exemplu ↑
Pentru reutilizarea formularelor proiectate, acestea
se exportă ca
un fişier .frm care poate fi importat în alte aplicaţii: În VBE, unde s-a proiectat formularul, se selectează opţiunea din meniu File, Export File. Se alege un nume, pentru fişierul formular, şi Save. Se obţine un fişier nume.frm. Reutilizarea formularului necesită deschiderea fişierului stocat: prin meniu, File, Import File, selectarea numelui formularului şi Open.
1. Să se editeze şi să se ruleze secvenţele de instrucţiuni Basic din exemplele marcate cu simbolul
.
2. Să se editeze un formular pentru calcule aritmetice.
Bazele informaticii
155
Formulare VBA
Controale Control - Name
Tip
Proprietate
Calculator
Formular Caption
txtA
TextBox
Valoare proprietate
Calculator
TextAlign
3 - fmTextAlignRight
ForeColor
Palette, Blue
Font, Size
10
Font,FontStyle Bold txtB
TextBox
TextAlign
3 - fmTextAlignRight
ForeColor
Palette, Green
Font, Size
10
Font,FontStyle Bold txtRezultat
TextBox
TextAlign
3 - fmTextAlignRight
Font, Size
10
Font,FontStyle Bold
Bazele informaticii
156
Formulare VBA
btnAdun
Buton
Enabled
False
Caption
+
ForeColor
Palette, Blue
Font, Size
16
Font,FontStyle Bold btnScad
Buton
Caption
-
ForeColor
Palette, Red
Font, Size
16
Font,FontStyle Bold btnInm
Buton
Caption
x
ForeColor
Palette, Green
Font, Size
16
Font,FontStyle Bold btnImp
Buton
Caption
:
ForeColor
Palette, Purple
Font, Size
16
Font,FontStyle Bold btnPt
Buton
Caption
^
ForeColor
Palette, Black
Font, Size
16
Font,FontStyle Bold
Bazele informaticii
157
Formulare VBA
Procedurile eveniment Private Sub btnAdun_Click() If IsNumeric(txtA.Text) And IsNumeric(txtB.Text)Then txtRezultat = Val(txtA) + Val(txtB) Else MsgBox ("Eroare! Valoare numerică!") End If End Sub Observaţii: Deoarece valorile introduse în TextBox-urile txtA şi txtB sunt de tip text este necesară funcţia de convertire Val Cu funcţia IsNumeric se testează dacă valoarea introdusă este o valoare numerică
Secvenţele de cod sunt la fel, doar că se schimbă operatorii de calcul.
3. Să se editeze un formular pentru calcule financiare:
Bazele informaticii
158
Formulare VBA
Controale Control - Name
Tip
Proprietate
Valoare proprietate
Calcule
Formular
Caption
Calcule financiare
Label1
Etichetă
Caption
Rata dobanzii
Label2
Etichetă
Caption
Numarul de perioade
Label3
Etichetă
Caption
Valoare
Label4
Etichetă
Caption
Rezultat
TextBox
TextAlign
3 fmTextAlignRight
Font, Size
10
Font,FontStyle
Bold
txtD
txtN
TextBox
La fel cu txtD
txtV
TextBox
La fel cu txtD
TextBox
TextAlign
3 fmTextAlignRight
Font, Size
10
Font,FontStyle
Bold
Enabled
False
Caption
Functia
txtRezultat
frmFunctia
Bazele informaticii
Frame
159
Formulare VBA
rbnFV O p ţ
rbnPV
i u n
rbnPmt
i
Caption
FV
ForeColor
Palette, Red
Font,FontStyle
Bold
Caption
PV
ForeColor
Palette, Green
Font,FontStyle
Bold
Caption
Pmt
ForeColor
Palette, Blue
Font,FontStyle
Bold
Procedurile eveniment
rbnFV
rbnPV
rbnPmt
Bazele informaticii
Private Sub rbnFv_Click() If IsNumeric(txtD.Text) And IsNumeric(txtN.Text) _ And IsNumeric(txtV.Text) Then D = Val(txtD) N = Val(txtN) V = Val(txtV) txtRezultat = FV(D, N, V) Else MsgBox ("Eroare! Valoare numerică!") End If End Sub Secvenţele de cod sunt la fel ca pentru rbnFV, doar că se schimbă funcţia de calcul: FV PV Secvenţele de cod sunt la fel ca pentru rbnFV, doar că se schimbă funcţia de calcul: FV Pmt
160
Bibliografie
Bibliografie
Emil Cosma
Aplicaţii Excel, Project, Visual FoxPro, Ed. EXPONTO, 2004
John Nossiter
Utilizare Microsoft Excel 97, Ed. TEORA, 1999
Emil Cosma
Office 2007 – VBA, Excel, Access, Ed. EXPONTO, 2008
Clayton Walnum
Visual Basic .NET, Ed. ALL, 2003
Luminiţa Fînaru, Ioan Brava
VISUAL BASIC, Primii paşi … şi următorii, Ed. POLIROM, 2001
Emil Cosma
Visual BASIC … VBA 2007 … Studio 2005, Ed. MATRIXROM, 2007
Paul McFedries
VBA, Ghid pentru începători, Ed. TEORA, 2006
Octavian Dospinescu
Dezvoltarea aplicaţiilor în Visual Basic.NET, Ed. POLIROM, 2004
Bazele informaticii
161