1. Podsetnik - Programiranje Dogadjaja

23
Programiranje dogañaja Marton Sakal 1 Programiranje dogañaja pomoću Excel VBA 1. Pokretanje integrisanog razvojnog okruženja Visual Basic for Application (VBA) Ukoliko nije aktiviran tab Developer na Ribbon-u, aktivirajte ga na način prikazan na slici 1. Slika 1.

description

Programiranje dogadjaja

Transcript of 1. Podsetnik - Programiranje Dogadjaja

Page 1: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 1

Programiranje dogañaja pomoću Excel VBA 1. Pokretanje integrisanog razvojnog okruženja Visual Basic for Application (VBA) Ukoliko nije aktiviran tab Developer na Ribbon-u, aktivirajte ga na način prikazan na slici 1.

Slika 1.

Page 2: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 2

Na Developer tab-u kliknite na Visual Basic ikonicu (slika 2). VBA razvojno okruženje možemo da pokrenemo i kombinacijom taster Alt+F11.

Slika 2.

Prikazaće se razvojno okruženje VBA (slika 3). Detaljnija objašnjenja razvojnog okruženja ćemo dati sukcesivno, na narednim susretima. Pored linije menija i toolbar-a, razvojno okruženje prikazuje tzv. Project Explorer, čija je logika korišćenja vrlo slična onoj na kojoj je zasnovan Windows Explorer. Naš VBA projekat sadrži 4 stavke: Sheet1, Sheet2, Sheet3 i ThisWorkbook. Detaljnije o njima će biti reči kada budemo obrañivali temu dogañaja radnih listova i radne sveske.

Slika 3. Pokušajte sledeće: U Excel fajlu preimenujte radni list Sheet1 u „Prijemnice“, izbrišite radni list „Sheet2“ i snimite fajl pod nazivom „Programiranje dogadjaja“. Koje su sada stavke Project Explorer-a (slika 4)?

Page 3: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 3

Slika 4.

2. Dodavanje forme projektu Dodajmo sada projektu jednu formu, na način prikazan na slici 5.

A.

Slika 5.

Alternativni način “ubacivanja” forme je prikazan na slici 6.

Page 4: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 4

A.

B.

Slika 6.

Naš projekat sada sadrži i jednu praznu formu, tipičan Windows prozor. Ime prozora (forme) je UserForm1 (dok je ne promenimo). Zajedno sa formom, pojavio se i tzv. Toolbox (slika 7). To je „lebdeći“ prozor koji sadrži komponente, koje se mogu „nalepiti“ na prozor (što ćemo uskoro i uraditi).

Slika 7. Pokušajte sledeće: kliknite na naziv projekta u Project Explorer-u, ili na neku drugu stavku (Microsoft Excel Object, Sheet1, Sheet2, Sheet3). Toolbox je nestao. Kliknite na formu (UserForm1) i Toolbox će se pojaviti. Dakle, Toolbox je aktivan samo kada je fokus na formi.

Page 5: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 5

Treba primetiti i sledeće: U Project Explorer-u se sada nalazi i stavka Forms, a u okviru nje UserForm1. Dakle, naš projekat ima jednu kategoriju više (Forms), a u okviru te nove kategorije se nalazi jedna stavka (UserForm1). Vreme je da pokrenemo Vaš prvi program koji ste napisali tehnikom programiranja dogañaja. Kliknite na ikonu na Toolbar-u ili pritisnite F5 (pre toga za svaki slučaj kliknite na formu UserForm1 da bi poprimila fokus) (slika 8). Pojaviće se samostalan prozor. Pokušajte sledeće: pomerite prozor. Zatvorite ga.

Slika 8.

Pokušajte sledeće: Promenite veličinu forme UserForm1 u razvojnom okruženju - po širini, visini, oba istovremeno. Pokrenite ponovo projekat. Zatvorite prozor UserForm1. Promenimo neke OSOBINE forme UserForm1. Osobine se menjaju u tzv. Properties Window-u, koji se aktivira na način prikazan na slici 9. Obratite pažnju na osenčenu stavku menija - koji funkcijski taster je ekvivalent selektovanju stavke menija?

Page 6: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 6

Slika 9.

Page 7: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 7

Prozor Properties sadrži nazive osobina forme UserForm1 i vrednosti tih osobina. Na primer, naziv osobine je Caption, a vrednost te osobine je UserForm1. Ili, naziv osobine je StartUpPosition, a njena vrednost je 3 - Windows Default. Osobine su prikazane na dva načina: sortirane po abecedi i po kategorijama (slika 10).

Osobine poreñane prema početnom slovu naziva osobine

Osobine poreñane prema kategorijama

Slika 10. Promenimo sada vrednosti spomenutih osobina, na način prikazan na slikama 11a i 11b. Najpre se treba kliknuti levim klikom na naziv osobine (na primer, Caption), koji će poprimiti tamnu pozadinu, čime nam razvojno okruženje saopštava da je spremno za unos izmene vrednosti izabrane osobine. Sada kliknite levim klikom na vrednost osobine, obrišite tekst UserForm1 (slika 11a) i ukucajte, na primer, Moj prvi projekat (slika 11b). Pokrenite projekat. Obratite pažnju na sadržaj linije naslova (slika 12).

Page 8: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 8

Slika 11-a.

Slika 11-b.

Page 9: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 9

PRE promene osobine Caption

POSLE promene osobine Caption

Slika 12.

Za razliku od osobine Caption čije se vrednosti unose pomoću tastature (dakle, moramo da ukucamo tekst), vrednosti osobine StartUpPosition menjamo izborom sa padajućeg menija (slika 13).

Slika 13. Eksperimentišite sa vrednostima osobine StartUpPosition.

Page 10: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 10

3. Snimanje Excel fajla koji sadrži VBA objekte Pokušate li snimiti prethodni fajl na uobičajen način, pojaviće se sledeća poruka:

Slika 14.

Excel nas upozorava da ne može uobičajen Excel fajl (čija je ekstenzija .xlsx) da se snimi sa bilo kakvim VBA sadržajem. Kliknite na komandno dugme No. Pojaviće se dijalog prozor prikazan na slici 15.

A.

B.

Slika 15. Izaberite tip fajla Excel Macro-Enabled Workbook (*.xlsm) i kliknite na komandno dugme Save.

Page 11: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 11

4. Upis teksta u TextBox i brisanje sadržaja TextBox-eva Pokrenite Excel i otvorite VBA razvojno okruženje. Dodajte formu projektu. Snimite fajl u .xlsm formatu pod imenom TextBox.xlsm. Postavite osobinu Caption forme na vrednost Rad sa text box-evima. Da bismo postavili komponentu TextBox na formu, moramo najpre da aktiviramo Toolbox lebdeći

prozor. Kao što je već navedeno, dovoljno je da kliknete na formu. Levim klikom kliknite na ikonu na Toolbox-u, držeći levi klik prevucite komponentu na formu i otpustite levi klik (slika 16). Na ovaj način ste postavili komponentu TextBox na formu. Pokrenite VBA projekat. Pojaviće se prozor prikazan na slici 17. Pokušajte sledeće: kucajte tekst u TextBox. Brišite tekst. Osenčite tekst koji ste uneli u Textbox (ili samo jedan deo unetog teksta) i smestite ga na ClipBoard. Pokrenite, na primer, Word, i aktivirajte kombinaciju tastera Ctrl+V. Tekst koji ste osenčili u TextBox-u i potom ga smestili na ClipBoard se pojavio u Word dokumentu. Ukucajte sada nekoliko reči u Word dokument i smestite ih na ClipBoard. Aktivirajte prozor Vašeg projekta, kliknite negde na TextBox i aktivirajte Ctrl+V. Šta se desilo? Tekst iz Word dokumenta se pojavio u TextBox-u. Dakle, Vaš projekat je bez i jednog reda programskog kôda u stanju da primi tekst u TextBox, možete da prepravljati, kopirati iz njega i kopirati u njega.

Page 12: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 12

A

+

B

C

Slika 16.

Page 13: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 13

Slika 17.

Postavite još jedan TextBox na formu. Na isti način, postavite i jedno komandno dugme (slika 18).

Slika 18.

Pomeranjem komponenti i promenom njihovih veličina, odnosno, veličine same forme, napravite da forma Vašeg projekta ima sledeći izgled:

Slika 19. Obratite pažnju na osobinu Name pojedinih komponenti. Kliknite na komandno dugme koje ste naneli na formu. Koje je ime komandnog dugmeta u Properties prozoru?

Page 14: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 14

Slika 20. Aktivirajte sada Categorized način prikaza osobina komandnog dugmeta. Treba primetiti da je osobina Name ponovo na vrhu liste. Kliknite sada na TextBox koji je prvi nanet na formu. Njegovo ime je TextBox1. Ime drugonanetog TextBox-a je TextBox2. Ovo su imena koje je razvojno okruženje automatski dodelilo komponentama koje ste naneli na formu, ali i samoj formi. Ova imena nisu dovoljno sugestivna prilikom pisanja programskog kôda, zato, slično pravilima imenovanja promenljivih (ponovite gradivo predmeta Programiranje sa prve godine studija) i komponentama ćemo dodeljivati sugestivnija imena. Neka je zadatak sledeći: Kada kliknemo na komandno dugme, neka se sadržaj prvog TextBox-a pojavi u drugom TextBox-u. Kada dva puta kliknemo da komandno dugme, neka se obrišu sadržaji TextBox-eva. Prilikom pokretanja projekta, neka sadržaj prvog Text Box-a bude „Dobar dan“. Dodelimo najpre komponentama sledeća imena (vrednost osobine Name): umesto TextBox1 neka naziv bude txtIzvorniText umesto TextBox2 neka naziv bude txtPrekopiraniText umesto CommandButton1 neka naziv bude cmdPrekopiraj Kako menjamo/dodeljujemo imena? Kliknemo na komponentu, a potom u polju vrednosti osobine Name u prozoru Properties upišemo odgovarajući naziv. Da bismo došli do liste osobina željenog objekta, objekat ne moramo da selektujemo na formi, već možemo da ga izaberemo sa liste komponenti koja se nalazi na samom vrhu prozora Properties (slika 21).

Slika 21.

Pravila imenovanja promenljivih koja smo učili na predmetu Programiranje važe i ovde, računajući i kamilju notaciju i prefikse. Prefiks txt će nam u programskom kôdu jasno sugerisati da je reč o TextBox-u, a prefiks cmd će asocirati na komandno dugme. Dalje, neka na komandnom dugmetu umesto teksta „CommandButton1“ stoji tekst „Prekopiraj sadržaj“. Tekst na komandnom dugmetu je vrednost osobine Caption.

Page 15: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 15

Kada ste podesili vrednosti odgovarajućih osobina navedenih komponenti, prozor bi trebalo da poprimi sledeći izgled (slika 22):

Slika 22. Da se podsetimo: kada smo prethodni put pokrenuli projekat, TextBox je bio prazan (slika 17). Da bi TextBox sadržao tekst kada se projekat pokrene, potrebno je njegovoj osobini Text dodeliti odgovarajući sadržaj. Ako želimo da prilikom pokretanja projekta u TextBox-u čije je ime txtIzvorniText stoji pozdrav „Dobar dan“ (kako se u zadatku traži), potrebno je ovaj pozdrav upisati u polje pored osobine Text (slika 23) - naravno, pre toga je trebamo da selektujemo komponentu txtIzvorniText.

Slika 23.

Page 16: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 16

Pokrenite projekat. Pojaviće se sledeći prozor (slika 24):

Slika 24. Da bi se klikom na komandno dugme tekst iz prvog TextBox-a prekopirao u drugi TextBox, potrebno je programirati. Zaustavite izvršavanje Vašeg projekta. U razvojnom okruženju, aktivirajte stavku menija View->Code, ili pritisnite funkcijski taste F7 (slika 25a). Razvojno okruženje će preći u mod za unos programskog kôda (do sada se nalazio u tzv. Design mode-u, u modu u kojem se vrši dizajniranje, “crtanje”), što je prikazano na slici 25b.

Slika 25-a.

Page 17: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 17

Slika 25-b. Aktivirajte padajući meni sa listom objekta i kliknite na naziv komandnog dugmeta.

Slika 26.

Automatski će se pojaviti zaglavlje i oznaka za kraj procedure Sub, kojoj je razvojno okruženje dodelilo ime cmdPrekopiraj_Click (slika 27). Obratite pažnju, na drugom padajućem meniju se pojavio tekst Click (crvena strelica na slici 27), zato što je dogañaj klika PODRAZUMEVANI dogañaj za komponentu CommandButton (o čemu će biti više reči kasnije). Izmeñu oznaka Sub i End Sub treba da upišemo Visual Basic kôd, koji će biti odgovor na dogañaj klika na komandno dugme, odnosno, taj kôd će se izvršiti (svaki put) kada kliknemo na komandnom dugme cmdPrekopiraj.

Page 18: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 18

Slika 27. Pisanje kôda koji će prvom TextBox-u dodeliti sadržaj drugog TextBox-a je prilično jednostavan zadatak, koji umnogome podseća na rad sa promenljivama, koje gradivo ste usvojili na predmetu Programiranje. Kôd će biti sledeći: Private Sub cmdPrekopiraj_Click() txtPrekopiraniText.Text = txtIzvorniText.Text End Sub Kako čitamo ovaj kôd? Neka vrednost osobine Text komponente txtPrekopiraniText primi vrednost osobine Text komponente txtIzvorniText. Kako napisati odgovor na dogañaj duplog klika na komandno dugme cmdPrekopiraj? Najpre, u modu za unos kôda ćemo izabrati komponentu cmdPrekopiraj na isti način kao na slici 26, a potom sa liste mogućih dogañaja izabrane komponente (dakle, komandnog dugmeta cmdPrekopiraj) izabrati dogañaj duplog klika (slika 28).

Slika 28.

Page 19: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 19

Automatski će se generisati zaglavlje i oznaka za kraj sledećeg Sub-a:

Slika 29.

Sub-u automatski dodeljeno ime cmdPrekopiraj_DblClick, ali i parametri koji za sada nisu predmet našeg interesovanja (ponovite gradivo predmeta Programiranje o podprogramima, argumentima, parametrima i povratnim vrednostima). Preostaje da napišemo kôd koji će se izvršiti prilikom duplog klika na komandno dugme cmdPrekopiraj. Brisanje sadržaja TextBox-a postižemo upisivanjem praznog sadržaja, koji se u Visual Basic-u označava sa dve zagrade (bez praznog mesta izmeñu njih). Dakle: Private Sub cmdPrekopiraj_DblClick(ByVal Cancel As MSForms.ReturnBoolean) txtIzvorniText.Text = "" txtPrekopiraniText.Text = "" End Sub Pokrenite projekat. Testirajte program.

Page 20: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 20

5. Upisivanje sadržaja TextBox-eva u ćeliju radnog lista i upis sadržaja ćelije u Text Box Na formu iz prethodnog zadatka dodajmo još dva komandna dugmeta, sa sledećim bitnim osobinama: Name Caption cmdUCeliju Upiši u ćeliju cmdIzCelije Iščitaj iz ćelije Preuredite formu u Design Modu da poprimi izgled prikazan na slici 30.

Slika 30. Zadatak glasi: Radni list Sheet1 preimenujte u Podaci. Kada kliknemo na komandno dugme na kojem stoji tekst „Upisi u celiju“, tekst upisan u TextBox txtIzvorniText treba da se upiše u ćeliju A1 na radnom listu „Podaci“. Kada kliknemo na komandno dugme na kojem stoji tekst „Iscitaj iz celije“, sadržaj ćelije C4 radnog lista „Podaci“ treba da se pojavi u TextBox-u txtPrekopiraniText. Aktivirajte mod za unos kôda i izaberite sa liste komponenti cmdUCeliju (slika 31).

Slika 31.

Pojaviće se Sub prikazan na slici 32.

Page 21: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 21

Slika 32. Kôd je sledeći: Private Sub cmdUCeliju_Click() Worksheets("Podaci").Cells(1, 1) = txtIzvorniText.Text End Sub Kako tumačimo ovaj kôd? Obratite pažnju na levu stranu od znaka jednakosti. Kôd koji se nalazi tamo se čita: na radnom listu koji se zove „Podaci“, u ćeliju koja se nalazi u prvom redu i prvoj koloni (dakle, prvi broj 1 se odnosi na red, a drugi broj 1 se odnosi na kolonu) treba upisati ono što se nalazi sa desne strane znaka jednakosti. Sa desne strane znaka jednakosti kôd upućuje na vrednost osobine Text komponente txtIzvorniText. Pre nego što pokrenete projekat, proverite sadržaj radnog lista „Podaci“. Radni list je prazan (slika 33).

Slika 33. Pokrenite projekat. Kliknite na komandno dugme „Upisi u celiju“. Zaustavite izvršavanje projekta. Proverite sadržaj radnog lista „Podaci“ (slika 34).

Page 22: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 22

Slika 34. Napišimo sada kôd za dogañaj klika na komandno dugme cmdIzCelije (tekst koji stoji na njemu je „Iscitaj iz celije“). Najpre, u modu za unos kôda izaberite komponentu cmdIzCelije, a u prostor izmeñu zaglavlja i oznake za kraj Sub-a koji se pojavio unesite sledeći kôd: Private Sub cmdIzCelije_Click() txtPrekopiraniText.Text = Worksheets("Podaci").Cells(4, 3) End Sub Kôd čitamo na sledeći način: neka vrednost osobine Text TextBox-a txtPrekopiraniText bude sadržaj ćelije koja se nalazi u četvrtom redu i trećoj koloni (a to je kolona C) na radnom listu „Podaci“. Pre nego što pokrenete projekat, upišite, na primer, reč „Dobro jutro“ u ćeliju C4 radnog lista „Podaci“ (slika 35). Pokrenite projekat i kliknite na komandno dugme „Iscitaj iz celije“. Prozor će poprimiti izgled prikazan na slici 36.

Page 23: 1. Podsetnik - Programiranje Dogadjaja

Programiranje dogañaja

Marton Sakal 23

Slika 35.

Slika 36.

Hvala na uloženom trudu!