Microsoft Office Excel
Visual Basic for Application
Sadržaj 1.
UVOD ...................................................................................................................................................... 4 VISUAL BASIC FOR APPLICATIONS ................................................................................................................................ 4 OGRANIČENJA VBA ............................................................... ................................................................. .................. 5
2.
VBA I MAKROI ......................................................................................................................................... 6 MACRO-ENABLED FORMAT ........................................................................................................................................ 6 DEVELOPER TAB ......................................................... ................................................................. ............................. 6 KORIŠDENJE MACRO RECORDERA ........................................................ .............................................................. .......... 6 Planiranje .......................................................... ................................................................. ............................. 6 Snimanje ......................................................................................................................................................... 7 Startovanje ..................................................................................................................................................... 8 Relative Reference Reference ....................................................................................... ................................................... 8
3.
VISUAL BASIC EDITOR (VBE) .................................................................................................................... 9 OKRUŽENJE ............................................................... ................................................................. ............................. 9 Project Explorer okno .............................................................. ................................................................. ....... 9 Okno za kod .................................................................................................................................................. 10 Properties okno ............................................................ ................................................................. ................ 10 Immediate okno ........................................................... ................................................................. ................ 10
RAD U VBE ............................................................... ................................................................. ........................... 11 Procedure.......................................................... ................................................................. ........................... 11 Funkcije ............................................................. ................................................................. ........................... 12 Event Code .................................................................................................................................................... 13 Dodavanje modula ....................................................... ................................................................. ................ 13 Promena imena modula modula ................................... .............................................................. .............................. 13 Uklanjanje modula ....................................................... ................................................................. ................ 14
4.
PROGRAMIRANJE ................................................................................................................................... 15 OBJEKTI, OSOBINE, METODI...................................................................................................................................... 15 Kolekcije i kontejneri objekata ................................................................................................... ................... 15
OSNOVNI PRINCIPI ...................................................... ................................................................. ........................... 16 Aritmetički operatori operatori ............................................................... ............................................................... ................................................................. ..... 18 Operat ori ori poređenja ..................................................................................................................................... poređenja ..................................................................................................................................... 18
5.
VARIJABLE, TIPOVI I KONSTANTE............................................................................................................ 19 VARIJABLE ............................................................................................................................................................ 19 OPSEG VBA PROMENLJIVIH ..................................................................................................................................... 19 Proceduralni opseg ....................................................................................................................................... 19 Privatni opseg ............................................................................................................................................... 19 Javni opseg........................................................ ................................................................. ........................... 20
TIPOVI PODATAKA .................................................................................................................................................. 20 DEKLARACIJA PROMENLJIVIH .................................................................................................................................... 23 KONSTANTE .......................................................................................................................................................... 24
6.
DONOŠENJE ODLUKA ............................................................................................................................. 25 LOGIČKI OPERATORI ................................................................................................................................................ 25 PRAVLJENJE IZBORA ................................................................................................................................................ 25 If...Then...Else............................................................... ................................................................. ................ 25
2
Sadržaj 1.
UVOD ...................................................................................................................................................... 4 VISUAL BASIC FOR APPLICATIONS ................................................................................................................................ 4 OGRANIČENJA VBA ............................................................... ................................................................. .................. 5
2.
VBA I MAKROI ......................................................................................................................................... 6 MACRO-ENABLED FORMAT ........................................................................................................................................ 6 DEVELOPER TAB ......................................................... ................................................................. ............................. 6 KORIŠDENJE MACRO RECORDERA ........................................................ .............................................................. .......... 6 Planiranje .......................................................... ................................................................. ............................. 6 Snimanje ......................................................................................................................................................... 7 Startovanje ..................................................................................................................................................... 8 Relative Reference Reference ....................................................................................... ................................................... 8
3.
VISUAL BASIC EDITOR (VBE) .................................................................................................................... 9 OKRUŽENJE ............................................................... ................................................................. ............................. 9 Project Explorer okno .............................................................. ................................................................. ....... 9 Okno za kod .................................................................................................................................................. 10 Properties okno ............................................................ ................................................................. ................ 10 Immediate okno ........................................................... ................................................................. ................ 10
RAD U VBE ............................................................... ................................................................. ........................... 11 Procedure.......................................................... ................................................................. ........................... 11 Funkcije ............................................................. ................................................................. ........................... 12 Event Code .................................................................................................................................................... 13 Dodavanje modula ....................................................... ................................................................. ................ 13 Promena imena modula modula ................................... .............................................................. .............................. 13 Uklanjanje modula ....................................................... ................................................................. ................ 14
4.
PROGRAMIRANJE ................................................................................................................................... 15 OBJEKTI, OSOBINE, METODI...................................................................................................................................... 15 Kolekcije i kontejneri objekata ................................................................................................... ................... 15
OSNOVNI PRINCIPI ...................................................... ................................................................. ........................... 16 Aritmetički operatori operatori ............................................................... ............................................................... ................................................................. ..... 18 Operat ori ori poređenja ..................................................................................................................................... poređenja ..................................................................................................................................... 18
5.
VARIJABLE, TIPOVI I KONSTANTE............................................................................................................ 19 VARIJABLE ............................................................................................................................................................ 19 OPSEG VBA PROMENLJIVIH ..................................................................................................................................... 19 Proceduralni opseg ....................................................................................................................................... 19 Privatni opseg ............................................................................................................................................... 19 Javni opseg........................................................ ................................................................. ........................... 20
TIPOVI PODATAKA .................................................................................................................................................. 20 DEKLARACIJA PROMENLJIVIH .................................................................................................................................... 23 KONSTANTE .......................................................................................................................................................... 24
6.
DONOŠENJE ODLUKA ............................................................................................................................. 25 LOGIČKI OPERATORI ................................................................................................................................................ 25 PRAVLJENJE IZBORA ................................................................................................................................................ 25 If...Then...Else............................................................... ................................................................. ................ 25
2
Select Case ........................................................ ................................................................. ........................... 26
7.
IZBOR KORISNIKA ................................................................................................................................... 28 Dijalog prozor za unos .................................................................................................................................. 28 Dijalog prozor sa porukom................................................................ ............................................................ 28
8.
PONAVLJANJE AKCIJA ............................................................................................................................. 29 FOR...NEXT .......................................................................................................................................................... 29 FOR...EACH...NEXT ................................................................................................................................................ 29 Do While...Loop ............................................................ ................................................................. ................ 30 Do Until...Loop .............................................................................................................................................. 31
9.
NIZOVI .................................................................................................................................................... 32 DEKLARISANJE ....................................................................................................................................................... 32 VIŠEIMENZIONALN I NIZOVI ..................................................................................................................................... 32 Deklarisanje dinamičkih nizova.......................................................... nizova.......................................................... ........................................................... 33
10.
EVENTS – DOGAĐAJI .......................................................................................................................... 40
WORKSHEET OGAĐAJI ........................................................................................................................................... 40 WORKBOOK OGAĐAJI ........................................................... ................................................................. ................ 42
11.
UDF FUNKCIJE .................................................................................................................................... 34
VOLATILE....................................................... ................................................................. ...................................... 34 OPIS FUNKCIJE ....................................................................................................................................................... 35
12.
FORME ............................................................................................................................................... 36 36
FORMIRANJE USERFORMS EKRANA ................................................................ ............................................................ 36 KOIRANJE PONAŠANJA .......................................................... ................................................................. ................ 38 OČITAVANJE OSOBINA EL EMENATA U KODU ................................................................ ................................................. 39
13.
GREŠKE U KODU ................................................................................................................................. 40
PRONALAŽENJE GREŠAKA - DEBUGGING ........................................................... ........................................................... 44
14.
ZAŠTITA KODA ....................................................................................................................................46
3
1. UVOD Visual Basic for Applications VBA je programski jezik kreiran od strane Microsofta radi automatizacije obrade podataka u
aplikacijama koje ga poržavaju, kao što su na primer Excel ili Wor. VBA je veoma modan alat koji nam aje poseban oblik kontrole i funkcionalnosti koji ne možemo u potpunosti obiti korišdenjem rugih opcija kao što su makroi. Npr. želimo a prikažemo ijalog prozor u kojem korisnik treba da unese neki poseban pod atak za rani list. Moža želite a izvršite zaatak koji zavisi o oluke korisnika ili a prikažete prozor sa porukom korisniku pošto otvori ranu svesku. Ove ali i mnoge ruge stvari možete a ostvarite programiranjem u Visual Basic for Applications (VBA). VBA je programski jezik koji je je deo Microsoft Office paketa . Možete a koristite VBA a
kreirate programe koji rae unutar MS Office aplikacija, kao što su Wor ili Excel. VBA je baziran na objektno orijentisanom programiranju (OOP), u kojem se podrazumeva da su svi elementi programa objekti.
VBA omogudava lako kreiranje interakcije sa korisnikom aplikacije i onošenje oluka na osnovu akcije korisnika. Na primer, da osigurate celovitost poataka, možete napisati VBA kod koji prihvata unos podataka i obaveštava korisnika koja polja mora obavezno a popuni. Različiti načini primene VBA: 1. Automatizacija akcije koja se perioično ponavlja
Ukoliko imate potrebu a kreirate neeljne ili mesečne izveštaje o proaji, makro ih može napraviti za vrlo kratko vre me i to u formatu kakav sami odaberete. I ako se u toku ana promene izvorni poaci, a bi obili ažuran izveštaj, samo treba ponovo pokrenuti makro 2. Automatizacija ponavljajude akcije Kada ste u situaciji da jednu te istu akciju treba da ponovite na svakom radnom listu
ili na svakom ranom sveskom u nekom foleru, možete kreirati makro koji de u “petlji” prodi kroz svaki objekat i uraiti neophono. 3. Izvršavanje proceure automatski ako se esi oređena akcija
U nekim situacija dete želeti a se proceura s tartuje automatski kako ne biste razmišljali a li ste je izvršili ili ne. Na primer, ako se promene izvorni poaci a se automatski osveži i Pivot tabela. Ovo se zove programiranje ogađaja. 4. Kreiranje sosptvene funkcije radnog lista
Možemo sami kreirati s voju UDF funkciju da bismo obavili posebne kalkulacije koje Excelove ugrađene funkcije ne rae, ili je komplikovano izvesti pomodu postojedih funkcija. Na primer, kako sabrati sve brojeve oređene boje 5. Pojednostavljenje izgleda radne sveske
4
Kada kreirate ranu svesku za ruge korisnike, ako među njima ima korisnika koji
malo znaju o Excelu mogli biste razviti posebno korisničko okruženje za unos i izmenu poataka sa iskačudim informativnim prozorima 6. Kontrolisanje drugih aplikacija iz Excela
VBA može a po mogne da uvezemo tabelu iz Accessa ili da umetnemo Excel tabelu u Word dokument
Ograničenja VBA
Sa svakom novom verzijom VBA Microsoft je dodavano nove funkcionalnosti i nove
komane ili je prestao a poržava neke stare, poneka i bez upozorenja. ešava s e a se pojave greške u izvršavanju proceura koje su u stalnoj upotrebi ved uže vreme, kaa korisnik pređe na novu verziju Excela VBA se ne izvršava potpuno isto na svakom kompjuteru. Najčešde je problem samo sa pojeinačnim kompjuterima tj. onosom VBA i opertivnog sistema, Office verzije ili mrežnih poešavanja U mnogim kompanijama, IT sektor nije uopšte ouševljen sa primenom VBA proceura zbog izvršavanja potencijalno neželjenog koa tj. makro virusa. Ovo je potpuno razumljiva zabrinutost, ali ne i razlog da se VBA potpuno odbaci. Pravilno
poešeni antivirus programi mogu potpuno zaštititi korisnika a omoguditi regularnim VBA procedurama nesmetan rad.
VBA je ogroman program. Ima hiljae ključnih reči i u svakoj sleedoj verziji postaje sve vedi.
5
2. VBA i makroi Makroi koje kreirate snimanjem u Excel okruženju su napisani o strane samog Excela, koristedi VBA ko. Ali, postoji razlika između makroa i VBA proceura koje dete napisati o nule. Makro samo izvršava niz instrukcija i ona se zaustavlja, zato s u makroi vrlo korisni za automatizovanje akcija koje se često ponavljaju. Ali, makro uvek slei jean put izvršavanja, a VBA proceura može a izračuna uslove, onese oluku i preusmeri alje izvršavanje.
Macro-enabled format Excel 2007 i kasniji dokumenti mogu biti sačuvani u jenom o va formata: prvi koji
sprečava snimanje makroa i VBA proceura u fajl rane sveske i rugi koji to omogudava. Porazumevani format Excel atoteke je .xlsx. Kaa se rana sveska sačuva u ovom formatu, makroi i VBA procedure de biti isključeni iz atoteke. a bi VBA ko ostao u atoteci kaa se sačuva, ona mora biti sačuvana u macro -enabled formatu koji ima ekstenziju .xlsm. Kako ovaj format proširuje funkcionalnost rane sveske, on takođe može stvoriti i zabrinutost po pitanju bezbenosti jer rana sveska može saržati i zlonamerni VBA ko koji se izvršava neočekivano i sa neželjenim rezultatima.
Developer tab Da bi radili sa VBA kodom neophodno je prikazati Developer tan na Ribbon traci sa alatima. Inicijalno, Developer tab nije prikazan u Excelu. Da biste ga prikazali, odaberite File pa Options da otvorite Excel Options dijalog prozor. Odaberite Customize Ribbon kategoriju. Na
listi Main Tabs, uključite eveloper i pritisnite OK.
Developer Tab na Ribbon traci sa alatima
Korišćenje Macro Recordera Planiranje
Pre započinjanja snimanja makro komane neophono je isplanirati i uvežbati sve ranje koje želimo a izvršimo. Pri tome treba razmišljati i o poziciji aktivne delije onosno selekcije pre započinjanja makroa onosno po njegovom završetku raa. U zavisnosti o selekcije pre ili posle snimanja makroa zavisi a li de makro komana modi a se primenjuje uzstopno na istim ili delijama u nizu.
6
Snimanje Najjednostavnija upotreba makroa je snimanje akcija korisnika. Ne morate da poznajete VBA da bi mogli da ga koristite. Da bismo snimili makro neophodno je kliknuti na alat Macros na
View tabu Ribon trake. Jena o ponuđenih opcija alata je Recor Macro, ko ja nam omogudava snimanje makroa bez nekog velikog poznavanja programskog jezika. Nakon klika na opciju Recor Macro pokrede se konfiguracioni prozor u kom možemo efinisati naziv makroa (ne sme a sarži razmake između reči), prečicu na tastaturi za pokre tanje makroa, kao i lokaciju ge de makro biti sačuvan.
Snimanje makro komande
Klikom na ugme OK počinje proces snimanja makroa, ili, preciznije, počinje proces snimanja komani koje korisnik izvou u okviru rane sveske. Svaka snimljena komana bide pretvorena u izvršni ko i kao takva sačuvana u makrou. Pošto se ne rai o vieo - snimku, vreme trajanja procesa snimanja makroa ne igra nikakvu ulogu, tako a sve korake koji de se ponavljati možemo snimiti bez ikakve potrebe za žurbom. Recimo a želimo a efinišemo a prve tri delije svakog rugog rea buu obojene bojom. Taj postupak demo realno i uraiti na ranoj svesci. Nakon završetka sa oavanjem boje delijama ponovo kliknemo na alat Macros i opciju Stop Recording. Sada imamo radnu svesku sa nekolik o delija u boji. a bismo proverili funkcionalnost kreiranog makroa jenostavno demo ukloniti sve boje iz delija rane sveske, a zatim pritisnuti kombinaciju tastera Ctrl+r na tasturi da bismo pokrenuli kreirani makro. Ako je sve u redu, nakon pritiska na kombinaciju tastera kreirani makro de izvršiti
zaate komane i ponovo istim delijama oeliti efinisanu boju. Macro Name: Naziv makroa. U našem primeru nazvademo ga “Zeleno” Shortcut key: Prečica za pokretanje makroa. Kliknite na ovo polje, ržite Shift i pritisnite “L”
(ili neko rugo slovo). Sleedi put ka buemo hteli a pokrenemo makro, ovoljno je a pritisnemo ctrl+shift+L (ne moramo a biramo naš makro iz menija). Store macro in. Ove efinišemo ge želimo a snimimo naš makro. Postoje tri opcije :
This workbook – makro de se snimiti u workbook -u u kome raimo, i bide ostupan samo dok je on otvoren
New Workbook – napravide se novi workbook, i makro de se snimiti u njega
Personal Macro Workbook – makro de se sačuvati u posebnom fajlu personal.xls.
Ovaj fajl je poseban po tome što se nalazi u /XLStart foleru (najčešde to je putanja: C:\Documents and Settings\myUsername\Application Data\Microsoft\Excel\XLSTART ), što
7
znači a se otvara automatski pri pokretanju Excel -a. Excel ovaj dokument otvara i automatski primenjuje Hie za workbook (posetnik: a sakrijete/prikažete otvorene workbook-ove koristite meni: Window- >Hie/Unhie…). Osim toga, ovo je sasvim obična Excel tabela, baš kao i bilo koja ruga. U Personal.xls čuvamo sve makroe koji nisu specifične priroe, tj. koje možemo a primenjujemo na više okumenata. Startovanje
a bismo oabrali i ponovo izvršili makro komanu, pritisnimo ugme Macros na eveloper tabu ili iskoristimo prečicu Alt+F8. Zatim oaberemo komanu sa spiska i pritisnemo ugme Run.
Startovanje makro-a
Relative Reference Podrazumevano, Excel snima makroe u apsolutnom modu i oni se taa izvršavaju na istim
delijama na kojim su i snimljeni. Međutim nekaa de b iti neophodno da se makro snimi u relativnim referencama kako bi se m ogao izvršavati u onosu na aktivnu deliju. Po započinjanju snimanja makroa, na eveloper tabu treba utisnuti -uključiti ugme Use Relative Reference.
Uključivanje Relative Reference moa za snimanje makroa
8
3. Visual Basic Editor (VBE) Okruženje Kod prvih verzija Excel-a koje su imale VBA na raspolaganju, tj. Excel 5 i Excel 95, VBA modul
se pojavljivao u formi zasebnog ranog lista. Počev sa Excel -om 97, VBA modulima se pristupa korišdenjem Visual Basic Eitora (VBE). Mouli su, naravno, sačuvani zajeno s a radnim sveskama, samo nisu vidljivi dok se ne startuje VBE.
VBE se ne može startovati nezavisno o Excel -a, tj. Excel mora biti otvoren da bi VBE mogao a se startuje. Najjenostavniji način a se startuje VBE je koristedi prečicu Alt+F11. rugi način bi bio pomodu opcije Tools, Macro, Visual Basic Editor.
Project Explorer okno Sa leve strane prozora VBE postoji prostor obele žen kao Project - VBA Project . U belom delu
je prikazan spisak svih objekata u vašem trenutnom projektu. Porazumevano, tu su tr i Sheet objekta: Sheet1, Sheet2 i Sheet3 (u Excel-u 2013, podrazumevano postoji samo jedan
list pa se vii samo Sheet1). Ovi objekti očigleno prestavljaju rane listove. Četvrti objekat je This Workbook i odnosi se na dokument tj. radnu svesku gde se nalaze svi makroi.
Postoji još jean objekat (koji se ne vii na gornjoj slici) a zove se Personal Macro Workbook gde se nalaze makroi koji su dostupni svaki put kada startujete Excel. U njemu treba da se
nalaze makroi koje nameravate često a koristite .
9
Okno za kod
Nejvede okno, sa esne strane prikazuje ko. Ukoliko je sivo, znači a nije otvoren nijean prozor za uređivanje koa. a otvorite prozor za ko, pritisnite uplim klikom na objekat sa leve strane. Npr. Module1.
Properties okno
Ovo okno služi za poešavanje parametara oabranog objekata. Svako polje se sastoji iz va dela: naziv osobine (property) i njegova trenutna vrednost. Pojedina polja su prazna tj. neke
osobine nemaju svoje porazumevane vrenosti, a biste ih postavili upišite vrenost u desnoj koloni.
Vrenosti osobine mogu biti tekstualna ili numerička. Vedina polja je tekstualna. a biste promenili vrenost najpre sa leve stran oaberite osobinu koju želite a menjate i zatim ukucajte tekst koji de se automatski unositi sa esne strane, završite unos sa Enter.
Postavljanje default vrednosti osobine Caption
Numeričke vrenosti moraju a se unesi pravilno kako bi bile prihvadene. Ne može se unisiti tekstualna vrenost, obratite pažnju na ecimalni znak.
Greška pri unosu numeričke vrednosti Immediate okno
Ovo okno služi a omah (immeiate) prikažemo rezultate ili a brzo izvršimo ko. Ukoliko Immeiate nije prikazan pritisnite prečicu sa tastature Ctrl+G a prikažete Immeiate okno.
10
Načini korišdenja Immeiate okna, : 1. Postavite pitanje ? Worksheets.Count
ispisade se ukupan broj ranih listova u ranoj svesci, ili ? Range(“B2“).Value
ispisade se trenutnu vrenost iz delije B2 sa aktivnog ranog lista 2. Izvršite komandu VBA Worksheets(“Sheet1″).Visible =False
de sakriti rani list Sheet1 3. Startujete makro
U Immeiate oknu napišite naziv proceure koju želite a izvršite, npr. ako imamo proceuru ate_Stamp_Cell koja u deliju upisuje atum i boji slova u plavo možemo je pozvati na sleedi način
Rad u VBE Treba razlikovati tri vrste koa koje demo pisati: 1. Procedure 2. Funkcije 3. Event code – onosno, ko koji se izvršava kaa nastupi oređeni ogađaj (upli klik,
otvaranje okumenta, promena selekcije, it…) Svaka vrsta ima svoje specifičnosti zbog kojih se rastično razlikuje o rugih. Procedure
Proceure možete shvatiti kao komane koje se izvršavaju bilo na zahtev korisnika ili iz neke ruge proceure. Primer proceure bi bio: “osenči deliju a bue siva, upiši neki tekst”, i sl. U opštem slučaju proceure se koriste kaa treba nešto napraviti, promeniti, kreirati… Za razliku od funkcija, procedure nemaju povratnu vrednost.
11
Primer: Sub Macro1() ' Promena pozadine celije na zelenu i boju teksta na belu. With Selection.Interior .ColorIndex = 10 .Pattern = xlSolid End With Selection.Font.ColorIndex = 2 End Sub
Primer: Sub PocetnaPoruka() ' Ovo je prvi makro napisan u okviru ovog kursa Dim Datum As String, Vreme As String Datum = Date Vreme = Time MsgBox "Pozdrav! Ovo je prvi cas VBA." + vbCrLf + _ "Danas je " + Datum + ", i sad je " + Vreme End Sub
Funkcije
Funkcije se pišu veoma slično kao proceure, međutim, funkcije uvek vradaju jenu vrenost (baš kao i funkcije u Excel -u – npr. SUM, COUNT, it…). Možemo ih koristiti unutar rugih funkcija/procedura, ili u radnim listovima. Funkcije koje koristimo u worksheet-u ne mogu da
ga menjaju! Ako pokušamo a izmenimo worksheet bilo ge unutar funkcije ona de vratiti grešku (iako funkcije koje pozivamo iz proceura mogu a menjaju izgle worksheeta, ta praksa se ne preporuču je). Funkcije se efinišu u okviru moula. Sintaksa funkcija je vrlo slična subproceurama. Pravila za imenovanje funkcija su ista kao i za subprocedure. Osobenost ovih funkcija je da ime funkcije predstavlja izlaznu promenljivu. Ovo je ilustrovano linijom
ImeFunkcije = VracenaVrednost.
Tip izlazne promenljive se opciono
može navesti u zaglavlju funkcije, nakon zagrae sa listom argumenata. O tipovima VBA promenljivih de biti reči kasnije. Ispre ključne reči Function u zaglavlju funkcije se mogu nadi reči Private ili Public. Private označava a je funkcija ostupna samo proceurama iz istog moula, ok Public označava a je funkcija dostupna svim procedurama iz svih modula svih aktivnih Excel-ovih projekata.
Ispre Function se može nadi i ključna reč u funkciji čuvaju između poziva funkcija.
Static
koja označava a se promenljive eklarisane
Slično kao ko subproceura, izvršavanje funkcije se može prekinuti korišdenjem instrukcije Exit Function. U tom slučaju je potrebno voiti računa a je imenu funkcije, kao izlaznoj promenljivoj, dodeljena vrednost pre instrukcije Exit Function.
Primer jene korisničke funkcije, koja računa kvarat razlike va uneta broja, je at ispo. Function KvadratRazlikeDveCelije(X As Double, Y As Double) as Double Dim Z As Double Z = (X - Y) ^ 2 KvadratRazlikeDveCelije = Z End Function
12
Ova funkcija se u radnom listu poziva kao i svaka druga Excel-ova funkcija. Argumenti
funkcije X i Y mogu biti proizvoljni brojevi, a mogu biti i delije ranog lista, kao što je to prikazano na slici
Primer: Function Saberi(a1, a2) 'Sabiranje brojeva a1 i a2 Saberi = a1 + a2 'vraćanje vrednosti funkcije vršimo tako što imenu funkcije 'dodelimo vrednost End Function
Event Code
To je ko koji de se izvršavati svaki put kaa nastupi neki ogađaj (event=ogađaj). Po suštini, event coe su proceure. Npr. možemo napisati ko koji se izvršava svaki put ka korisnik promeni selekciju delije (tj. selektuje neku rugu deliju), u trenutku pre štampe, ka se aktivira list, it... Event ko se ne može pisa ti u modulima, nego samo u kodu koji je previđen za worksheet/workbook (ali naravno – možemo oatle pozivati ruge proceure/funkcije koje možemo smestiti bilo ge, pa i u moul). Primer: Private Sub Workbook_Open() MsgBox "Dobrodosli u workbook sa makroima" End Sub
Dodavanje modula Dodavanje modula se obavlja u VB Editoru, biranjem menija Insert>Module Promena imena modula Promena imena moula se obavlja u Properties prozoru u dnonjem levom uglu VB Editora.
13
Uklanjanje modula Uklanjanje modula izvodimo esnim klikom miša na moul u Project explorer oknu (sa leve
strane VB Eitora) i biranjem komane Remove. Mogude je sačuvati moul kao zasebni fajl na disku u trenutku izbacivanja iz projekta.
14
4. Programiranje Objekti, osobine, metodi Objekti čine najbitniju stavku u VBA i o suštinskog je značaja pravilno ih shvatiti. Svaki objekat efiniše svoja ponašanja (tj. metoe) i osobine (tj. poešavanja). Objekti su npr. Application, Worksheet, Workbook, selektovani opseg delija, jena delija, it… Osobine npr. delije bi bili okviri (borers), kom reu pripaa, kojoj koloni, saržaj delije, koja je pozainska boja, boja fonta, veličina it…; ponašanje: aktiviraj deliju (tj. a delija obije fokus), oaj komentar, urai merge, obriši saržaj, it… Koristedi VBA možemo irektno pristupiti objektima a kontrolišemo i upravljamo ponašanjem aplikacije. Ali, pre nego što započnemo pisanje programa u VBA treba se upoznati sa nekim osnovnim terminima:
Termin
Opis
Objekat (Object)
Element aplikacije sa posebnim osobinama i ponašanjem. Objekat je komponenta koja kombinuje kod i podatke. Na primer, radna
sveska, rani list, delija, grafikon... Osobina (Property)
Karakteristika ili imenovani atribut nekog objekta. Na primer, Name i StandardWidth su osobine objekta WorkSheet.
Metod (Method)
Ponašanje ili akcija koji izvoi neki objekat. Na primer, Calculate je meto koji ponovno izračunava sve formule WorkSheet objekta. Imenovani niz instrukcija koje izvoe oređeni zaatak. Na primer, možemo napraviti proceduru koja automatski snima
Procedura (Procedure)
promene pre zatvaranja radne sveske. Komentar (Comment)
Modul (Module)
Re teksta unutar proceure, koji koristimo a opišemo pojeine linije koa ili celu proceuru. Komentari uvek započinju sa apostrofom Fajl u kojem se može nalaziti i više VBA proceura ili makro komandi
Kolekcije i kontejneri objekata Objekti mogu biti iz kolekcije ili kontejnera objekata. Kolekcija objekata je skup povezanih objekata koji imaju iste osobine. Na primer, WorkSheet je kolekcija objekata koji predstavljaju sve radne listove u radnoj svesci.
Kontejner objekata sarži jean ili više objekata, koji mogu ali ne moraju biti povezani. Na primer, Workbook je kontejner objekata koji sarži WorkSheet objekte. Krajnji kontejner objekata je Applicati on objekat, koji sarži sve ostale Excel objekte, kao što su rani listovi i radne sveske.
Objekti iste vrste se neka smeštaju u kolekcije: npr. više Worksheet -ova smeštamo zajeno u Worksheets kolekciju, više delija u Cells… a bi obili oređeni objekat iz kolekcije objekata navoimo njegovo ime u zagraama, npr za oređeni worksheet: Worksheets(“MojSheet”).
15
Saa na alje možemo raiti sa ovim izrazom potpuno iste akcije koje bi inače raili na jednom sheet-u.
Svaki objekat pore svojih osobina i ponašanja može saržati ruge objekte – npr. Workbook sarži Worksheet objekte, Worksheet alje ima Range objekte (opseg delija), koji opet ima delije it… a bi pristupili nekom objektu u VBA kou, specificiramo njeno mesto u hijerarhiji koristedi znak “.” (tačka). Na primer: Application.Workbooks(“Book1”).Worksheets(“Sheet1”).Range(“A1”)
Ako izostavimo početak hijerarhije porazumevade se trenutno aktivni objekat. U
prethonom primeru, ako izostavimo prva va objekta i napišemo: Worksheets(“Sheet1”).Range(“A1”)
to znači a referišemo Workbook koji je trenutno aktivan. Ako izostavimo i Worksheets(“Sheet1”), znači a raimo na trenutno aktivnom sheet -u i možemo samo pisati Range(“A1”). Ovo je korisno zato što isti makro možemo koristiti na više worksheet -ova, u zavisnosti od toga koji je trenutno aktivan.
Osnovni principi Linija koa može biti proizvoljno ugačka. Ako želimo možemo je nastaviti u sleedem reu ako re prekinemo sa znakom „_“ . VB de ona taj znak ignorisati i predi de a obrađuje sleedi re kao a je u istom reu sa prethonim. Na primer: varA = Cells(1,2).Value * Cells(3,3).Value – Cells(3,4).Value * _ Cells(5,5).Value / _ Cells(2,2).Value – 3
Obratiti pažnju na uvlačenje u svim sleedim primerima – nije obavezno ali veoma pomaže a lakše sagleamo koji re pripaa ge (a li je „ugnježen“ ili ne, a li se nastavlja o prethodnog reda itd...).
Komentari koje oajemo se ne izvršavaju. Svaki komentar počinje znakom apostrofa (’) i važi o kraja linije. rugim rečima, VB de ignorisati sve što piše posle apostrofa. Zbog toga, možemo pisati nešto ovako: Sub Macro1() ' Komentar koji stoji samostalno u redu With Selection.Interior ' komentar iza linije koda .ColorIndex = 6 ' Boja 6 je žuta boja – opisujemo kod koji nije najjasniji .Pattern = xlSolid End With Selection.Font.ColorIndex = 3 'Boja teksta – crvena (tj. 3) End Sub
Dodela vrenosti se vrši prostim operatorom “=”. U oreište koje je sa leve strane
jenakosti se upisuje izračunata vrenost sa esne strane. Uvek se prvo izračuna esna strana jenakosti, a zatim se to upisuje u oreište. Na taj način, možemo zapisati: varA = 0 'u varA upisujemo vrednost nula (0) varA = varA + 1 'u varA upisujemo vrednost: varA+1, tj. 0+1, tj. 1
U ovom primeru, matematički gleano poslenji re je netačan / neispravan, ali kao što smo rekli ranije – prvo se izračuna vrenost sa esne strane jenakosti, i zatim se to upiše u varA.
16
Leva strana jenakosti nas ne interesuje o samog kraja kaa treba u nju a upišemo vrednost.
Kaa želimo a oelimo promenljivoj vrenost nekog objekta, moramo prvo napisati ključnu reč “Set”: Dim varA As Range Set varA = ActiveCell
Sa na alje možemo koristiti varA isto kao što bi koristili ActiveCell zato što pokazuju na isti objekat. Još jena “vrsta” oele je kaa oređenim paramentrima neke proceure/funkcije oeljujemo vrenosti. U tom slučaju, parametrima oeljujemo vrenosti sa “:=”. Na primer: Workbook.Open fileName:="Book1.xls", password:="pswd"
Promena osobine – osobine možete shvatiti i kao „poešavanja objekta“. Npr. jeno o
poešavanja za deliju je njena vrenost, tj. ono što u njoj piše. Sleedi ko de promeniti vrenost delije A3 tako a u njoj piše reč „Test“: Range(“A3”).Value = “Test” 'sledeći red ima potpuno isti efekat, ali ćeliji pristupa na drugi način: Cells(3,1).Value = “Test” ' treći red, prva kolona – u vrednost upiši Test
U prethodnom primeru na va različita načina smo ošli o istog objekta – delije A3. Koji
dete način a koristite je potpuno nebitno, ali a vam treba referenca na neki opseg (npr. A2:A40, ili imenovani opseg – “poaci”, “vrenosti” it…) morali bi a koristite Range . Čitanje osobine je veoma slično upisivanju vrenosti, samo što saa umesto upisivanja vrenosti u osobinu, čitamo osobinu (tj. smeštamo je na esnu stranu) a na levu stranu demo staviti neku promenljivu: varA = Cells(1,3).Value ' upisujemo u varA vrednost ćelije C1 Cells(1,4).Value = varA ' u D1 upisujemo vrednost koju smo malopre pročitali iz C1 Cells(2,2).Value = Cells(5,1) 'u B2 upisujemo vrednost iz A5
Matematičke operacije su veoma slične rugim programskim jezicima. Na primer: varA = varB + varC * varD / varB – varD^2 ' imamo redom: sabiranje, množenje, deljenje, oduzimanje, ' stepenovanje stepenom 2
Logičke operacije su opet, veoma slične onome što ste verovatno sretali. Primer: varA varA varA varA
= = = =
(varB > varC) ' u varA će varC=varD 'prva jednakost varD<=varE 'da li je varD varE<>varA 'da li je varE
stajati TRUE ili FALSE je za dodelu (uvek), a druga deo logičke operacije manje ili jednako od varE različito od varA
17
Aritmetički operatori Operator
Operacija
Primer
+
Sabiranje
10+4
14
-
Negacija
-10
-10
-
Oduzimanje
10-5
5
*
Množenje
10*7
70
/
Djeljenje
10/5
2
\
Celobrojno dijeljenje
11\5
2
^
Stepenovanje
10^3
1000
Ostatak pri deljenju
10 od 5
Mod
Rezultat
0
Operatori poređenja Operator
Naziv
Primer
Rezultat
=
jednako
7=3
FALSE
<>
7<>3
TRUE
7>3
TRUE
>=
različito vede o vede ili jenako
"a">="b"
FALSE
<
manje od
"a"<"b"
TRUE
<=
manje od ili jednako
"a"<="b"
TRUE
"Borba" Like "Bor?a"
TRUE
>
Like
Like
18
5. Varijable, tipovi i konstante Varijable Promenljive u VB mogu a se efinišu eksplicitno: Dim varA as Integer
ali imate slobou a jenostavno koristite promenljive i koje niste efinisali, i VB de automatski a ih efiniše za vas. Nazivi promenljivih moraju početi slovom, mogu saržati brojeve, ali ne i znak razmaka (ako želite a razmak bue eo naziva promenljive koristite znak „_“). Velika i mala slova ne prave razliku za VB – ako i stavimo negde malo slovo gde treba veliko,
VB de prepoznati na koju promenljivu/objekat se onosi (case insensitive). Primer: Dim varA as Integer 'eksplicitno deklarišemo da je varA celobrojnog tipa varA = 12 'dodeljujemo joj vrednost 12 varB = varA * 2 'iako nismo deklarisali varB, upisujemo vrednost u nju varA = varB / 4 'varB kasnije možemo koristiti potp uno ravnopravno
Opseg VBA promenljivih Svaka promenljiva ima svoj opseg , tj. moule i proceure ge se promenljiva može koristiti, i trajanje (ili životni vek), koje efiniše vreme zaržavanja te promenljive u memoriji. Trajanje promenljive je usko vezano sa njenim opsegom. U VBA, promenljiva može imati tri tipa opsega:
proceduralni ili lokalni,
privatni ili opseg modula, i
javni.
Proceduralni opseg Promenljiva sa proceduralnim opsegom je dostupna sarno u proceduri gde je definisana. Kao rezultat toga, tr ajanje lokalne promenljive je ograničeno na trajanje same proceure. Implicitno deklarisane promenljive imaju proceduralni opseg. Eksplicitno deklarisanje lokalne
promenljive se vrši pomodu ključnih reči im ili Static unutar procedure. Privatni opseg Promenljiva sa privatnim opsegom je dostupna svim procedurama modula gde se ona nalazi,
ali ne i proceurama iz rugih moula. Pomodu ovih promenljivih, proceure iz moula mogu međusobno komunicirati. Privatne promenljive zaržavaju svoju vrenost sve ok je premetni projekat otvoren. Privatne promenljive se eklarišu pomodu ključnih reči im ili Private na početku moula, ispre prve proceure u moulu. Reč Private se ne može se koristiti unutar procedure i jasnije je koristiti nju, a ne Dim, za deklarisanje privatnih promenljivih.
19
Javni opseg Promenljiva sa javnim dosegom je dostupna svim procedurama u svim modulima u projektu
koji je sarži. Javne promenljive se eklarišu korišdenjem ključne reči Public ispred prve procedure u modulu.
Tipovi podataka Tip poatka prestavlja vrstu poatka sa kojim raimo. Postoje više stanarnih tipova:
Integer (celobrojni), Double (decimalni), String (tekstualni), Boolean (logički), it... Takođe, svaki objekat u Excel- u je poseban tip podatka – Workbook, Worksheet, itd... Tip podatka
oređuje šta možemo sa tim poatkom a raimo. VisualBasic ne kontroliše u trenutku pisanja koa a li ono što raimo ogovara tipu poatka: npr, možemo napisati: 3 * Workbooks(„Sheet1“), ali de zato prijaviti grešku kaa bue pokušao a izvrši ko. Neki smatraju a je ovo glavni neostatak VB jezika zato što ozvoljava veliki broj grešaka u vremenu izvršavanja (nije strong type). VBA sarži veliki broj tipova promenljivih. ajemo u nastavku spisak tipova promenljivih uz kratak opis svake od njih.
Boolean
Boolean je promenljiva koja može imati ve vrenosti, True (logički tačno) ili False (logički netačno). Za postavljanje vrenosti Boolean promenljive se mogu koristiti ključne reči True i False, kao u primeru ispod. Dim X As Boolean X = True
Prilikom konvertovanja Boolean promenljive u neki drugi tip podataka (na primer, u
numeričku vrenost), True vrada -1, a False vrada 0. Sa ruge strane, kaa se numerička vrenost konvertuje u Boolean vrenost, jeino 0 vrada False, a svi ostali brojevi vradaju True. Boolean promenljiva zauzimaju dva bajta.
Byte
Ovaj tip poatka se koristi za smeštanje manjih pozitivnih brojeva, o 0 o 255. Byte promenljiva zauzima 1 bajt memorije, najmanje memorije u odnosu na bilo koji drugi tip.
Currency Currency tip služi za ra sa novcem, onosno tamo ge je vrlo važna tačnost kalkulacija.
Poržava pozitivne i negativne brojeve veličine o 15 cifara sa leve strane ecimalne tačke i 4 cifre sa desne strane. Opseg ovog tipa je od –922 337 203 685 477.5808 do 922 337 203 685 477.5807. Za razliku o Single i ouble tipova poataka, Currency tip je tačan, tj. nije zaokružen. Ovaj tip zauzima 8 bajtova. Date
Ovaj tip poataka se koristi za smeštanje atuma i vremena. Koristi osam bajtova. VBA može da radi sa datumima iz opsega 1.1.100. –31.12.9999. i vremenom od 0:00:00 do 23:59:59. oeljivanje vrenosti ate promenljivoj se vrši pomodu karaktera taraba (#) sa kojim
20
počinje i završava se vrenost. Na primer, atum 14.9.2015. bi se u ate promenljivu anas uneo na bilo koji od sleedih načina: Danas = #September 14, 2015# Danas = #14/9/2015#
Vreme se unosi na sličan način, tj. pomodu karaktera #. Na primer, ate promenljivoj Sa se oela vrši na sleedi način: Sad = #17:15 PM#
U Coe prozoru, VBA konvertuje unešeni poatak u format datuma koji je sistemski poešen. Na primer, ako unesete September 14, 2009, VBA de, verovatno, prikazati 9/14/2015. Slično, vreme 17:15 PM bi se verovatno konvertovalo u 5:15:00 PM. Decimal
ecimal promenljive se smeštaju kao 12 -bajtni označeni ce li brojevi skalirani promenljivim stepenom broja 10. Stepen broja 10 oređuje broj ecimalnih mesta broja i varira o 0 o 28. Bez decimalnih mesta (stepen broja 10 je 0), granice opsega vrednosti su +/-79 228 162 514 264 337 593 543 950 335. Sa 28 decimalnih mesta, granice opsega vrednosti su +/7.9228162514264337593543950335, a najmanja nenulta vrednost je +/-10-28. Decimal tip
poataka je potip tipa Variant i nije tip poataka za sebe. To znači a ne možete eklarisati promenljivu tipa Decimal.
Single Single tip podataka je 4-bajtni tip koji radi sa brojevima u pokretnom zarezu (IEEE format).
Single može a rai sa negativnim brojevima u opsegu o -3.402823μ1038 o -1.401298μ1045 i pozitivnih u opsegu o 1.401298μ10 -45 o 3.402823μ1038. Double Double je 8-bajtni tip podataka, i kao i Single, namenjen za brojeve u pokretnom zarezu (IEEE
format). U njega se mogu smestiti negativni brojevi o 1.79769313486231μ10308 o 4.94065645841247μ10-324, i pozitivni brojevi o 4.94065645841247μ10-324 do 1.79769313486232μ10308. Integer Integer tip podataka je 2- bajtni tip poataka koji može a rai sa cijelim brojevima iz opsega od -32 768 o 32 767. Ovo je moža najčešče korišdeni tip VBA promenljivih jer je ati opseg
ovoljan za najvedi broj zaataka. Long Long tip je 4-bajtni tip podataka namenjen za rad sa celobrojnim vrednostima iz opsega od -2 147 483 648 do 2 147 483 647.
Object
U promenljivima tipa Object se smeštaju arese objekata. oeljivanje vrenosti promenljivoj tipa Object se vrši narebom Set. Object pr omenljive zauzimaju 4 bajta. String 21
String tip poataka služi za smeštanje teksta. Stringovi mogu a sarže slova, brojeve, blanko, interpunkcijske znake i specijalne karaktere. Postoje stringovi promenljive i fiksne
užine. Stringovi promenljive užine mogu saržati i o ve milijare (tačnije, 231) karaktera; zauzimaju 10 bajtova plus memoriju koja je potrebna za smeštanje stringa. Stringovi fiksne užine mogu saržati o jenog o 64 000 karaktera i oni zauzimaju samo memorijski prostor potreban za sme štanje stringa. Ako je poatak koji je oeljen stringu kradi o fiksne užine, VBA oaje stringu blanko znake a bi ga opunio o fiksne užine. Ako je poatak koji je oeljen stringu uži o fiksne užine, VBA oseca eo koji je suvišan. VBA broji karaktere sa leve strane stringa. Na primer, ako oelite string “Programiranje” string promenljivoj fiksne užine o seam karaktera, VBA de smestiti samo postring “Program”. Variant
Ovaj tip poataka VBA oeljuje svim promenljivim čiji tip nije eksplicitno deklarisan, tako da de eklaracija tipa Dim Indeks
kreirati Variant promenljivu Ineks. Variant promenljiva se može eklarisati i eksplicitno, na primer Dim Indeks as Variant
Promenljive tipa Variant mogu a smeštaju vedinu ostalih tipova poataka, pri čemu treba voiti računa o sleedim pojeinostima:
Promenljive tipa Variant ne mogu saržati stringove fiksne užine. Promenljive tipa Variant sarže i četiri specijalne vrenosti: Empty (znači a promenljiva nije inicijalizovana), Error (specijalna vrednost koja se koristi za
pronalaženje grešaka u proceuri), Nothing (specijalna vrenost koja služi za ovajanje promenljive o objekta za koji je bila vezana) i Null (koristi se a označi a promenljiva namerno ne sarži poatke). Zbog svojih oatnih mogudnosti, Variant promenljive zauzimaju više memorije o ostalih tipova promenljivih. Variant promenljive koje sarže brojeve zauzimaju o 16 bajtova, a Variant promenljive koje sarže karaktere zauzimaju i o 22 bajta, plus memorijski prostor potreban za smeštanje karaktera.
22
Tip
Zazeće u
Opis
Opseg vrednosti
bajtovima Byte
1b
Ceo broj
Boolean
2b
True ili False vrednost
Integer
2b
Ceo broj
-32,768 do +32,767
Long
4b
Ceo broj
-2,147,483,648 do +2,147,483,647
Single
4b
Decimalni broj
-3.4e38 do +3.4e38
Double
8b
Currency
8b
Date
8b
Object
4b
String
Varira
Variant
Varira
0 do 255
Decimalni broj duple preciznosti Decimalni broj sa fiksnim brojem decimala Decimalni broj. Ceo deo je datum, decimale su vreme
True ili False
-1.8e308 do +1.8e308 -922,337,203,685,477.5808 do +922,337,203,685,477.5807 1st January 100 do 31st December 9999
Referenca na objekat Niz karaktera fiksne ili
varijabilne užine Decimalni brojevi ili tekst
Bilo koji objekat Fiksno do 65,50 znakova Varijabilno-do2 milijarde znakova Number – kao Double String – kao String
Deklaracija promenljivih eklaracija prestavlja navođenje imena i tipa promenljive koju demo koristiti u programu. eklaracija se vrši korišdenjem reči im, što je skradeno o imension, i može se vršiti unutar proceure, ka obijamo promenljivu proceuralnog opsega, ili se može vršiti na vrhu modula, kada dobijamo promenljivu opsega modula. Tako se, na primer, celobrojna promenljiva X eklariše na sleedi način: Dim X as Integer
Ukoliko se ne na vee tip promenljive, porazumeva se tip Variant. Promenljive se, u suštini,
mogu eklarisati bilo ge unutar proceure. Jeino ograničenje je a eklaracija promenljive mora prethoditi prvoj upotrebi te promenljive u proceduri. Ipak, dobra je praksa deklaraciju
vršiti omah na početku proceure, tj. pre ostalih narebi, jer na taj način vrlo brzo možemo proveriti pravilnost deklaracije svih promenljivih bez lutanja po kodu.
eklarisanje više promenljivih u jenoj liniji se vrši tako što se eklaracije poje dinih promenljivih odvajaju zarezima, na primer Dim X As Integer, Y As Double, S as String
Ukoliko imate više promenljivih istog tipa, tip se mora navesti za svaku promenljivu posebno. Tako de linija Dim X As Integer, Y As Integer
deklarisati X i Y kao c elobrojne promenljive, ok de skradeni oblik Dim X, Y As Integer
23
deklarisati Y kao celobrojnu promenljivu i X kao Variant promenljivu.
Ovakva eklaracija promenljivih, tj. korišdenjem reči im, se još naziva i eksplicitnom eklaracijom. rugi način je tzv. implicitna eklaracija, koja se vrši kaa promenljivu koristimo u izrazu bez njenog prethodnog deklarisanja. Ako, na primer, promenljiva S nije deklarisana, ona de izraz S = "Beogradske ulice"
deklarisati promenljivu S tipa Variant.
Prenost implicitne eklaracije je a ne morate a voite računa o eklaracijama, ved a promenljive koristite kako vam zatrebaju (npr. kao u Matlab- u). Međutim, ovakva eklaracija ima i svojih mana.
Prva mana je a se lako može napraviti greška kaa se rai sa užim imenima promenljivih. Pretpostavimo, na primer, a u proceuri implicitno eklarišemo promenljivu ProsekPlata, i a se kasnije greškom pozovemo na tu promenljivu kao ProsekPiata. VBA ovo nede tumačiti kao grešku, ved de implicitno deklarisati novu promenljivu koja nema veze sa promenljivom ProsekPlata. Pri rau sa velikim programima, ovo može biti veliki problem, jer se, zbog sličnosti imena promenljivih, greške teško pronalaze u šumi izraza. Ovo se ne može desiti ako sve promenljive koje koristite u programu eksplicitno eklarišete. Druga mana je ta da Variant promenljive zauzimaju više memorijskog prostora od ostalih tipova. Ova mana je zanemarljiva ko malih programa, ali ko vedih može odi o izražaja, pogotovo kod slabijih računara, jer ra sa Variant promenljivim zahteva više vreme na od rada sa ostalim tipovima. Razlog ovome je stalna provera vrste poataka smeštene u Variant promenljivoj.
Na primer, Double promenljivu Broj možemo implicitno deklarisati na sledeći način: Broj# = 23.7
Eksplicitno deklarisanje se može forsirati čekiranjem opcijom Require Variable Declaration koja se nalazi na tabu Editor prozora Tools>Options u VBE. VBE dodaje iskaz Option Explicit u sve nove module, koji zahteva eksplicitnu deklaraciju promenljivih u tim modulima.
Konstante Konstane se eklarišu slično kao varijable, ali im se omah pri eklaraciji oeljuje i vrednost. Npr. Const iMaxCount = 9999 Const iMaxScore = 100
24
6. Donošenje odluka Logički operatori Logičke operacije su opet, veoma slične onome što ste verovatno sretali. Primer: varA varA varA varA VarA VarA VarA
= = = = = = =
(varB > varC) ' u varA će stajati TRUE ili FALSE varC=varD 'prva jednakost je za dodelu (uvek), a druga deo logičke operacije varD<=varE 'da li je varD manje ili jednako od varE varE<>varA 'da li je varE različito od varA varB And varC ' u varA će stajati TRUE ako su varB i varC TRUE varB Or varC ' u varA će stajati TRUE ako su varB ili varC TRUE Not varB ' u varA će stajati TRUE ako je varB FALSE
Pravljenje izbora Ko se stanarno izvršava jean re za rugim. Međutim, ima slučajeva kaa nam je potrebno a neki ko izvršimo po nekim uslovima, a neki eo koa ponavljamo oređen broj puta it… Zbog ovoga postoje različite oatne komane kojima možemo a kontrolišemo kako de a teče izvršavanje koa. Svaka o ole naveenih konstrukcija može a se ugnježava u samu sebe ili u ruge komane, tj. može se posmatrati kao jena zaokružena jeinica koa. If...Then...Else Ova konstrukcija omogudava a izvršavamo neki ko samo po oređenim uslovom. Sintaksa: If uslov Then Naredba1 Naredba2 … Else Naredba3 … End If
Ako je uslov tačan (tj. izračunava se na TRUE) ona de se izvršiti Nareba1, Nareba2 i o stale ako postoje. Ako je uslov netačan, izvršava se eo koa u E lse grani – tj. Naredba3 (i ostale ako postoje). Ako pišemo If -Then-Else u više reova kao u gornjem primeru, obavezno je a narebu završimo sa En If. Ako nam Else eo nije potreban možemo izostaviti celu tu granu.. Konkretan primer: If Cells(1, 1).Value = True Then Cells(2, 2).Value = "Tacno" Else Cells(2, 2).Value = "Netacno" End If
Ili: If Cells(1, 1).Value = True Then Cells(2, 2).Value = "Tacno" End If
25
Ili: If Cells(1, 1).Value = True Then Cells(2, 2).Value = "Tacno"
U narednom primeru se ispituje vrenost promenljive koja sarži broj poena koje je stuent
obio na ispitu i ispisuje ocenu koju je stuent obio znajudi a važi sleeda veza:
Poruka = "Student je dobio ocenu " If BrojPoena >= 90 Then Poruka = Poruka + "A" ElseIf BrojPoena >= 80 Then Poruka = Poruka + "B" ElseIf BrojPoena >= 70 Then Poruka = Poruka + "C" ElseIf BrojPoena >= 60 Then Poruka = Poruka + "D" ElseIf BrojPoena >= 50 Then Poruka = Poruka + "E" Else Poruka = Poruka + "F" End If MsgBox Poruka
Uočimo iz ovog primera a se operator sabiranja može koristiti i za naovezivanje stringova. Select Case Nareba koja je po funkciji slična If -Then-Else narebi sa tom razlikom što se upoređuje više
vrenosti, bez potrebe za ugnježavanjem If elova. Sintaksa: Select Case var Case uslov1 Naredba1 … Case uslov2 Naredba2 … … End Select
Promenljiva čiju vrenost ispitujemo je označena sa var. U svakom Case elu ta vrenost se ispituje a li je jenaka uslovu uslov1, uslov2 it… Ako je tačan neki uslov, taa se izvršava ogovarajudi set narebi. Npr, ako je tačan uslov1, ona de se izvršavati Nareba1 (i ostale ako postoje, sve o sleedeg Case ela), ako je tačan uslov2, izvršava se Nareba2, it… Ako u uslovima treba a iskoristimo vrenost var (npr. var>2), ona pišemo i ključnu reč Is: Case Is > 2. Za operator jenakosti to nije potrebno (Case 4 de ispitivati a li je var = 4). Primer: Select Case ActiveCell.Value Case Is < 0 ActiveCell.Font.ColorIndex = 3
26
Case 0 ActiveCell.Font.ColorIndex = 5 Case Is >0 ActiveCell.Font.ColorIndex = 1 End select
Rešimo prethoni primer sa ispisom ocene stuenta pomodu Select Case narebe. Poruka = "Student je dobio ocenu " Select Case BrojPoena Case Is >= 90 Poruka = Poruka + "A" Case Is >= 80 Poruka = Poruka + "B" Case Is >= 70 Poruka = Poruka + "C" Case Is >= 60 Poruka = Poruka + "D" Case Is >= 50 Poruka = Poruka + "E" Case Else Poruka = Poruka + "F" End Select MsgBox Poruka
Primetimo upotrebu ključne reči Is a se specificira opseg vrenosti. Ako pretpostavimo a broj poena može biti samo celi broj, prethona nareba bi se mogla napisati i na sleedi način: Select Case BrojPoena Case Is >= 90 Poruka Case 80 To 89 Poruka Case 70 To 79 Poruka Case 60 To 69 Poruka Case 50 To 59 Poruka Case Else Poruka End Select
= Poruka + "A" = Poruka + "B" = Poruka + "C" = Poruka + "D" = Poruka + "E" = Poruka + "F"
U ovom obliku smo koristili ključnu reč To za specificiranje opsega. Ako je broj poena celi broj, onda se Case 80 To 89
može zapisati i kao Case 80, 81, 82, 83, 84, 85, 86, 87, 88, 89
ge navoimo sve mogude vrenosti koje može uzeti promenljiva BrojPoena i razvajamo iz zarezima. Ovaj primer baš i ne opravava upotrebu ovakvog načina zaavanja vrenosti, ali je pogoan za ilustraciju. Ključna reč Is može i a kombinuje izraze, tako a se obuhvataju različiti opsezi koji nisu suseni. Izrazi se ovajaju zarezima. Na primer, slučajem Case Is > 90, 33, 50 To 60
bi se obuhvatili brojevi vedi o 90, broj 33 i brojevi između 50 i 60.
27
7. Izbor korisnika Dijalog prozor za unos
Koristidemo ve osnovne funkcije za interakciju – InputBox i MsgBox, kojima demo uzimati podatke od korisnika odnosno prikazivati poruke korisniku (respektivno). Detaljniju i mnogo
opširniju grafičku komunikaciju raidemo u elu sa UserFo rms. InputBox je zapravo funkcija koja prikazuje korisniku poruku i pruža mu prostor za unošenje proizvoljnog teksta. Kaa korisnik klikne OK vrenost koju je ukucao je saržana u povratnoj vrednosti funkcije. Primer: inp = InputBox("Tekst poruke", "Naslov", "Default vrednost")
U ovom primeru, kaa se pokrene makro, korisniku se prikazuje sleedi prozor:
Kaa klikne OK, InputBox de vratiti vrenost koju je on uneo kao rezultat funkcije, i u našem primeru to demo sačuvati u promenljivu inp. Ako korisnik klikne na „Cancel“ InputBox de vratiti vrenost praznog stringa:„“. Naslov i efault vrenost u pozivu ove funkcije možemo izostaviti, dok je tekst poruke obavezan.
Dijalog prozor sa porukom
MsgBox je takođe funkcija ali za razliku o InputBox ova fu nkcija samo ispisuje poruku korisniku. Kao povratnu vrenost vrada informaciju a li je korisnik kliknuo na OK, Cancel, ili sl. Ove povratne vrednosti su konstante definisane objektom VbMsgBoxResult. Npr, ako je
kliknuo OK, MsgBox de vratiti VbMsgBoxResult.vbOK, ako je kliknuo Cancel, vratide vrenost VbMsgBoxResult.vbCancel, it... vrenost ovih konstanti možete uvek obiti tako što dete napisati VbMsgBoxResult i zatim ka pritisnete tačku prikazade vam se sve konstante koje su definisane. Primer: inp = MsgBox("Tekst poruke", definicijaTastera, "Naslov")
Tekst poruke je tekst koji se ispisuje korisniku. Definicija tastera podrazumeva jednu od konstanti u
vbMsgBoxStyle objektu
(npr.
vbOKOnly, vbYesNo, vbOKCancel,
itd...). Naslov je naslov
poruke. Jedan od p rimera bi mogao a bue sleedi: inp = MsgBox("Nedovoljno podataka. Nastaviti obradu?", vbYesNo, "Naslov")
Ove pitamo korisnika a li želi a nastavi obrau i prikazujemo mu Yes i No ugmide. Njegov izbor pamtimo u promenljivoj inp. Nakon toga, možemo a ispitujemo šta je kliknuo tako što demo poreiti inp sa vbMsgBoxResult.vbNo i vbMsgBoxResult.vbYes.
28
8. Ponavljanje akcija For...Next For-Next petlja omogudava a neki eo koa ponavljamo oređeni broj puta. Sintaksa: For var = x To y Naredbe … Next var
Promenljiva var koristi kao brojač prolaza kroz petlju – pri svakom prolazu uvedava se za 1 (ime promenljive je proizvoljno). U prvom prolazu ova promenljiva dobija vrednost x, a petlja
de idi ok go ne ostigne vrenost y. U svakom prolazu izvršava se se t komandi koji je unutar For petlje (obeležen sa Narebe…). For petlju obavezno završavamo sa Next var (ime promenljive nije neophono, ali je poželjno jer olakšava razumevanje koa). Konkretan primer: Suma = 0 For iBr = 0 To 100 Suma = Suma + iBr Next iBr
Ovaj primer de sabrati brojeve o 0 o 100. Rezultat sabiranja imamo u promenljivoj Suma. Sleedi primer upisuje rene brojeve u prvih 100 delija kolone A: For iBr = 1 To 100 Cells(iBr, 1).Value = iBr Next iBr
For...Each...Next Postoji još jena konstrukcija koja se koristi za For narebu kaa je potrebno a “prođemo“ kroz sve objekte neke kolekcije objekata. Taa de For nareba počinjati sa: For Each obj In Coll (ostalo je sve isto), onosno u prevou: “ponavljaj za svaki objekat obj u kolekciji Coll”. U tom slučaju, objekat se ne uvedava za jean kao u prethoom slučaju ved de za svaku sleedu iteraciju obiti sleedu vrenost u kolekciji (zbog toga je bitno a tu kolekciju ne menjamo unutar petlje).
Na primer, ako želimo a svaku deliju selekcije promenimo tako a sarži svoj reni broj: varI = 0 For Each Item In Selection varI = varI + 1 Item.Value = varI Next Item
Ovo je vrlo korisno kaa raimo sa nekom kolekcijom u kojoj ne znamo tačan broj objekata a želimo a ih prođemo sve. With je ključna reč koju demo koristiti u prilikama kaa često pristupamo istom objektu.
Nema neki funkcionalni značaj za program osim što nam skraduje vreme pisanja. Sintaksa:
29
With objekat Naredbe ... End With
Objekat je neki objekat čije osobine ili čijim objektima želimo a pristupamo u elu Narebe. Na primer, umesto a pišemo ugački ko: Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.WrapText = False
možemo a pišemo skradeno: With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False End With
Do While...Loop Do While prestavlja
rugi tip petlji u VBA. Za razliku o brojačke For-Next petlje, ova se petlja izvršava sve ok je ispunjen oređeni uslov. Do While petlja može uzeti jean o sleeda va oblika: Do While Uslov Naredbe Loop
ili Do Naredbe Loop While Uslov
While uslov se može staviti na početak ili na kraj petlje. Razlika između ova va oblika While
Do
petlje je u trenutku kad se proverava ta čnost uslova. U prvom obliku se uslov
proverava omah na početku petlje i može se esiti a se u petlju uopšte ne uđe. U rugom obliku se uslov proverava na kraju petlje i petlja se izvršava minimum jeanput. Forsirani izlazak iz Do While petlje se vrši narebom Exit Do. Uočite primer sa sabiranjem brojeva manjih o 100 koristedi oba oblika Do
While petlje.
S = 0 I = 1 Do While I < 100 S = S + I I = I + 1 Loop
S = 0 I = 0 Do I = I + 1 S = S + I Loop While I < 99
Moramo voiti računa a se varijabla o koje zavisi uslov izvršenja petlje menja tako a jednog trenutka taj uslov ne bue zaovoljen. Ukoliko to nije ispunjeno, obidemo beskonačnu petlju. U našem slučaju, varijabla I raste ok ne postane 100 u slučaju prve
30
petlje i 99 u slučaju ruge petlje. akle, pri izlasku iz petlje, varijabla od koje zavisi uslov petlje ima prvu vrijednost za koju taj uslov nije zadovoljen. Deo
While Uslov u
mora nadi Exit
sintaksi petlje je opcionalan, tj. ne mora se navoditi uslov. Tada se u petlji
Do radi
izlaska iz petlje. Prethodni prim er urađen koristedi ovaj oblik petlje je
dat ispod. S = 0: I = 1 Do S = S + I I = I + 1 If I = 100 Then Exit Do Loop
Do Until...Loop
Ovaj tip petlje je vrlo sličan o While petlji, sa tom razlikom a se o Until petlja izvršava sve ok se ne ispuni oređeni uslov. Sintaksa ove petlje takođe ozvoljava provjeru uslova petlje na njenom početku i na kraju. Do Until Uslov Naredbe Loop
ili Do Naredbe Loop Until Uvjet
Petlja se u oba oblika izvršava sve ok Uslov nije ispunjen. Kada se Uslov ispuni, izlazi se iz petlje i nastavlja sa prvom sleedom instrukcijom. Ko oblika sa proverom Uslovana kraju, petlja se izvršava bar jeanput. Primer sa sabiranjem brojeva manjih o 100 koristedi oba oblika Do Until petlje. S = 0: I = 1 Do Until I = 100 S = S + I I = I + 1 Loop
S = 0: I = 0 Do I = I + 1 S = S + I Loop Until I = 99
Forsirani izlazak iz o Until petlje se također vrši narebom Exit o. Pogleajte još jean prim er Do
Until petlje koja pronalazi prvu praznu deliju u
Sub Doo_Until() Dim ws As Worksheet Set ws = Sheets(1) i = 1 Do Until ws.Cells(i, 2) = "" i = i + 1 Loop ws.Cells(i, 2).Select End Sub
31
koloni A
9. Nizovi Niz predstavlja grupu elemenata koji imaju isti tip i ime, pri čemu se određenom elementu niza pristupa koristeći ime niza i indeks elementa. Indeks elementa predstavlja redni broj elementa u nizu i navodi se u malim zagradama. Kao kod C programskog jezika, indeks prvog elementa niza je 0. Tako bi elementima niza X, dužine 10, pristupali na slijedeći način: X(0), X(1), ..., X(9)
Deklarisanje Nizovi se eklariraju koristedi ključne riječi Dim ili Public, kao i ostale VBA varijable. Pri eklariranju niza se može promijeniti ineks prvog elementa i to na slijeedi način: Dim X(1 To 10) As Integer
Prethonom eklaracijom smo eklarirali niz o 10 cijelih brojeva, pri čemu je ineks prvog elementa 1, a posljednjeg 10. U zagradi se, dakle, navode indeksi prvog i posljednjeg elementa, povezanih riječju To. Ako bi u deklaraciji naveli samo gornji indeks 10, tj. Dim X(10) As Integer
deklarirali bismo niz od 11 elemenata, jer je p odrazumijevano indeks prvog elementa 0.
Navođenjem Option Base 1
na početku moula, ineks prvog elementa niza de biti 1 u svim proceurama tog moula. Ineks prvog i posljenjeg elementa niza možemo saznati pomodu funkcija LBound(ImeNiza), koja vrada ineks prvog elementa , i UBound(ImeNiza), koja vrada ineks posljenj eg elementa niza.
Višedimenzionalni nizovi Pore prethono opisanih jenoimenzionalnih nizova, u VBA možemo raiti i sa višeimenzionalnim nizovima. VBA podržava do 60 dimenzija nizova, ali se rijetko kad koristi više o troimenzionalnih nizova. Najčešdi primjer višeimenzionalnih nizova su dvodimenzionalni nizovi ili matrice.
eklariranje višeimenzionalnih nizova je isto kao i eklariranje jenoimenzionalnih nizova, pri čemu se, za svaku imenziju, ineks prvog i posljenjeg elementa navoe u zagraam a. Na primjer, sa Dim M(1 To 10, 1 To 10) as Integer
eklariramo voimenzionalni niz M o 100 elemenata, raspoređenih u 10 vrsta i 10 kolona. Prilikom pristupanja elementima niza M, moramo navesti redni broj vrste i kolone u kojoj se nalazi element. Na primjer, izrazom M(3,4) = 106
se vrši promjena vrijenosti elementa niza M u presjeku trede vrste i četvrte kolone.
32
Deklarisanje dinamičkih nizova
Mana prethono opisanih nizova je ta a se svaki put mora izvršiti preimenzioniranje nizova prilikom deklarisanja, kako bi se smestili poaci za slučaj najzahtjevnije mogude obrae. Često se eklariše nekoliko puta više memorijskog prostora o stvarno potrebnog. Neiskorištena zauzeta memorija je neostupna za smeštaj rugih varijabli. Ovaj se problem može rešiti korišdenjem inamičkih nizova. inamički nizovi nemaju unapred definisan broj elemenata. Dakle, pri deklarisanju inamičkog niza, ne navoi se ineks posljenjeg elementa u zagrai, tj. Dim M() As Integer
Međutim, pre prve upotrebe niza u programu, mora se definisati broj elemenata niza, što se radi naredbom ReDim na sleedi način: ReDim M(10)
Pomodu narebe ReDim može se vršiti i promjena broja elemenata niza (reimenzioni sanje). Redimenzionisanje niza se u proceuri može vršiti proizvoljan broj puta. Treba voiti račun da se prilikom redimenzionis anja niza gubi vrenost elemenata. Za očuvanje vrenosti elemenata niza potrebno je koristiti naredbu Preserve, kao na primer ReDim Preserve M(10)
33
10. UDF funkcije Excel dozvoljava kreiranje funkcija (User Defined Functions – UF) koje je mogude koristiti na
isti način kao i sve ruge funkcije npr. SUM, VLOOKUP, COUNT ili bilo koju rugu ugrađenu funkciju… Vrlo često su korisnici razočarani brojem Excel matematičkih funkcija ili funkcija za rad sa tekstom, a li takve funkcije je mogude samostalno kreirati kroz VBA ko. Na primer, funkcija za konverziju iz Celzijusa u Farenhajte Function CtoF(Centigrade) CtoF = Centigrade * 9 / 5 + 32 End Function
Stanimo na bilo koju deliju u ranom listu i napišimo formulu
=CtoF(100)
i obidemo rezultat
kao na slici.
rugi primer, funkcija koja računa prosečnu potrošnju goriva na 100km. Ova funkcija ima 3 ulazne vrenosti, početnu i krajnju kilometražu kao i ukupno potrošeno gorivo. Function Potrosnja100(PocetnaKm As Long, KrjanjaKm As Long, Litara As Single) As Single Potrosnja100 = Litara / (KrjanjaKm - PocetnaKm) * 100 End Function
Volatile korisničku funkciju markira kao promenljivu (engl. volatile) tj. a mora a se izračuna ponovo svaki put kada se inicira rekalkulacija na radnom listu. Ostale funkcije se izračunaju ponovo samo kaa se promeni neka o zavisnih delija. Ova komana nema Application.Volatile
nikakvog uticaja ako se nalazi van UDF funkcije.
Na primer, funkcija koja sabira vrenost iz aktivne delije i delije A1 Function Depends(theCell as range) Depends=ActiveSheet.range("A1").Value+theCell.Value End Function
Ovko napisana funkcija nede osvežavati svoj rezultat kaa se promeni vrenost u A1, to može ovesti o grešaka u kalkulaciji. Pravilno bi bilo na početku funkcije oati Application.Volatile ali i imati u viu a de ovo usporiti rekalkulaciju u Excelu. 34
Opis funkcije a bise opis funkcije pojavio pri korišdenju Insert Function alata potrebno je efinisati opis funkcije korišdenjem proceure kao što je sleeda: Sub DescribeFunction() Dim FuncName As String Dim FuncDesc As String Dim Category As String Dim ArgDesc(1 To 1) As String FuncName = FuncDesc = Category = ArgDesc(1)
"SaberiPrethodni" "Saberi celiju i celiju iznad" 14 'UDF = "Referenca celije"
Application.MacroOptions _ Macro:=FuncName, _ Description:=FuncDesc, _ Category:=Category, _ ArgumentDescriptions:=ArgDesc End Sub
35
11. Forme UserForms su zapravo Winows prozori čiji izgle i ponašanje mi efinišemo. Koristimo ih a bi obili informacije o korisnika, i za lakše kontrolisanje korisnikovog unosa, i bilo šta rugo što inače ne bi mogli a obijemo upotrebom stanarnih Excel funkcija, ili upotrebom naših makroa.
Pravljenje UserForms prozora se vrši u ve faze: prvo raspoređujemo sve elemente po prozoru: tekst, ugmide, checkBox -ove, opcije, itd..., a zatim pišemo makroe kojima efinišemo kako de se koji element ponašati (npr, šta treba uraiti ako klikne ugme OK, šta ako klikne „Unesi“ it...).
Formiranje UserForms ekrana Otvorite Visual Basic Editor, zatim Insert ->UserForm. Prikazuje se ekran za izmene u dizajn modu. Postoje dva moda rada: design – u kome dodajemo i menjamo elemente; i runtime –
kaa se prozor prikazuje korisniku, tj. izvršava se.
obijamo ekran koji prestavlja ranu površinu za naš nov ekran – na slici je predstavljeno spoljašnjim prozorom „UserForms.xls – UserForm1 (UserForm)“. Unutar tog prozora mi efinišemo izgle našeg prozora koji demo u aljem tekstu zvati ranom površinom (na slici predsta- vljeno prozorom „Izmena selektovane kolo- ne“). Ka se prvi put kreira UserForms ovaj prozor de biti prazan. Popunjavamo ga koristedi elemente prikazane u Toolbox-u: element koji želimo a koristimo prostim prevlačenjem smestimo na radnu površinu. Ako zaustavimo kursor miša izna kontrole, pojavide se naziv kontrole. 1Svaka kontrola ima svoj set osobina (properties) koje menjamo u Properties prozoru (View>Properties, ili F4).
36
Najbitnije osobine su date uz svaku kontrolu u tabeli. Kontrola
Opis
Bitan property
Komentar
Predstavlja običan tekst koji ispisujemo na ekranu
Caption
Najčešde se koristi da opi še korisniku šta se tr aži od njega, funkciju prozora, dodatna pojašnjenja i sl.
TextBox
Mesto gde korisnik unosi tekst
MultiLine – mogu dnost unosa više redova Text – tekst koji je upisan u kontrolu
Tekst koji korisnik unese mož e biti bilo koji niz karaktera, o čemu treba voditi računa pri upotrebi
CheckBox
„Kutija“ za štikliranje
Value – True/False – tj. da li je štiklirano ili nije
Najčešde koristimo kad treba da dobijemo „da/ne“ odgovor od
Value – True/False, tj. da li je opcija izabrana ili ne
Za svaku opciju dodajemo poseban option button, a korisnik na jednom prozoru može da izabere samo jednu. Ukoliko nam treba vi še
Label
OptionButton
Biranje jedne od opcija
ToggleButton
Value – True/False, tj. da li Dugme za uključ ivanje/isključivanje je
Frame
Kontrola čija jedina uloga je da u sebi čuva druge kontrole
Caption
Glavni „hvatač“ događaja
Default, Cancel – ako korisnik pritisne ili da li se automatski poziva Click ovog dugmeta
CommandButton
Slična upotreba kao CheckBox, samo sa druga čijim izgledom
Sve glavne događaje demo vezivati za Click dugmeta.
Sve kontrole koje oajemo na UserForm imaju više osobina koje su im zajeničke, o kojih su ovde izlistane neke najbitnije/najkorisnije:
Caption – koji oređuje šta na kontroli piše. (Name) – ientifikator kontrole koji demo često koristiti u našem kou prilikom obrae
unosa. Postoje neki stanari za oeljivanje imena kontrolama koji nam olakšavaju a prepoznamo tip kontrole iz njenog imena. Npr. TextBox- ovi uvek počinu sa txt a zatim se nastavlja sa logičkim imenom – txtBroj, txtIme, txtLozinka, itd... Labele sa lbl, OptionButton – opt, CheckBox – chk, CommandButton – cmd, ToggleButton – tgl, itd... Nije bitno koristiti baš tri slova, niti a to buu baš ova slova, ali koju go sintaksu a uveemo trebalo bi toga a se priržavamo u svom aljem korišdenju zato što se time izbegavaju razni problemi koji mogu nastati ko složenijeg razvoja aplikacija u VB -u (ali i bilo kom drugom softverskom projektu).
Visible – da li je kontrola vidljiva ili ne (u zavisnosti o nekih izbora možemo je sakriti ili pokazati)
37
Enabled – da li se korisniku dozvoljava da radi sa kontrolom ili ne TabIndex – kaa korisnik pritiska Tab on de idi reom o kontrole o kontrole i to
pratedi ovaj ineks o manjeg ka vedem broju. ControlTipText – kaa se kursor miša pozicionira izna kontrole neko vreme, prikazade
se ovaj tekst (možemo koristiti a bliže objasnimo neku opciju korisniku) Locked – ova opcija nema uticaja na korisnika – koristimo je dok dizajniramo prozor da bi osigurali kontrolu o slučajnog pomeranja.
Sve elemente smo ređali na UserForm koji sam po sebi sarži neke osobine o kojih demo samo izdvojiti Caption (naslov prozora), i StartUpPosition – mesto gde se forma pojavljuje na ekranu prilikom prikazivanja. I entifikator prozora naveen sa “(Name)” za saa stoji poešen na UserForm1, maa bi mogli a ga promenimo npr. na frmUnos, ili slično.
Kodiranje ponašanja Prvo demo napisati ko koji de prikazivati formu koju smo prethono napravili. Taj ko pišemo u modulu gde smo i ranije pisali makroe. Za prikaz ekrana koristi se njegova Show metoa, na sleedi način: Sub prikazi() UserForm1.Show End Sub
Ovaj makro možemo a pokrenemo na stanarni način, kao i bilo koji makro koji smo pokretali ranije (npr, pozicioniranjem bilo gde na kod i pritiskom na F5 (odnosno klikom na
“play”)). Ka se pokrene, prikazade se forma koju smo malopre napravili. Obzirom a nismo iskoirali nikakve akcije za ugmide, oni nede reagovati na klik. Naš sleedi zaatak je a napišemo ko kojim demo obraiti ponašanja ugmida. U VBE-u otvoriti UserForms, i uplim klikom na ugme koje je tu postavljeno otvoridemo ko
koji de se izvršavati kaa korisnik klikne na ugme.
Automatski de se ispisati format koa koji ogovara kliku na ugme. Sve što napišemo ove de se izvršiti kaa korisnik klikne na ugme. Ako želimo ručno a oamo neko ponašanje za bilo koju kontrolu – prvo izaberemo ientifikator kontrole (efinisan u Property prozoru sa “(Name)”), a zatim ogađaj u kome želimo a izvršimo akciju. Ako u UserForms prozoru u dizajnu duplim klikom kliknemo na bilo koju kontrolu VBA de automatski otvoriti ko za efault ogađaj (npr, za ugme de biti Click, za TextBox de biti Change, it…). oademo saa ko za “Oustani” ugme koji samo treba da zatvori prozor bez ikakve obrade:
38
Private Sub cmdOdustani_Click() Unload UserForm1 End Sub
Unloa je metoa kojom se uništava objekat koji je specificiran – u ovom slučaju navoimo ientifikator našeg prozora – UserForm1.
Očitavanje osobina elemenata u kodu Sve osobine kontrola koje smo koristili prilikom izajna mogu a se pročitaju (i promene) i u kodu. Pristup do osobina je potpuno isti kao i za bilo koje druge Excel objekte – npr. da bi dobili tekst koji je napisan u TextBox- u kome je “(Name)” poešen na txtBroj, koristidemo njegov property – Text koji, kako smo ranije naveli, efiniše šta je ispisano (bilo o ranije, bilo a je
korisnik uneo u toku izvršavanja koa): msgBox “Uneli ste “ & txtBroj.Text
Ove smo tekstu “Uneli ste” oali tekst koj i je napisan u txtBroj.Text osobini, i sve to ispisali kao poruku korisniku. Na sličan način možemo očitati bilo koju osobinu bilo koje kontrole. Takođe, ok pišemo ko za UserForm mi imamo i kompletan pristup stanarnim objektima – Worksheet, ActiveCell, Selection it… Ako bi hteli a menjamo trenutno selektovane delije, o korisnika možemo zahtevati a prvo selektuje neki opseg pre nego što nastavimo alje, i slično.
39
12. Events – događaji Ranije smo vieli a neke kontrole imaju efault ogađaje – npr. za CommandButton ogađaj Click, za TextBox – Change, it… Pore ovih efault mogli smo a efinišemo ko i za bilo koji rugi ogađaj (upli klik miša it…). Slično tome, i workbook i worksheet imaju svoje ogađaje.
Worksheet događaji ogađaji na nivou ranog lista su ogađaji koji se ogađaju u okviru oređenog ranog lista. Proceure za upravljanje ovim ogađajima smještaju se u Winow Coe ogovarajudeg ranog lista (Sheet). U tabeli je at spisak nekih ogađaja na nivou ranog lista, uz akcije koja okidaju ove ogađaje. Događaj
Akcija koja aktivira događaj
Activate BeforeDoubleClick BeforeRightClick Calculate Change Deactivate SelectionChange
Radni list je aktiviran. Dvoklik na radnom listu. Desni klik na radnom listu.
Rani list je izračunat ili nanovo kalkuliran. Delija ranog lista je promijenjena. Radni list je deaktiviran. Selekcija na radnom listu je promijenjena.
Otvorite Visual Basic Editor (VBE) i u Project prozoru duplim klikom na ime sheet-a otvorite njegov kod (npr. Sheet1). Prikazuje se stanarni prozor za ko, ge možemo a selektujemo
objekat i oređeni ogađaj u njemu. Po efault -u, u vrhu Code prozora prikazuje se (General) u Object box-u (levo), i (Declarations) u Procedures/Events box-u (desno). Dok je izabran General mi pišemo naše proceure i funkcije. Međutim, u Object box -u pored
General možemo izabrati Worksheet kao objekat i tom prilikom automatski se bira efault ogađaj za njega – SelectionChange (tj. promena trenutne selekcije, odnosno trenutak kad korisnik klikne na rugu deliju npr. Promena selekcije porazumeva a se rai sa delijama – kaa se selektuju grafički elementi – linija, kvarat i sl. ogađaj se ne “pali”). U ovom kou imamo sleedu efiniciju proceure, koju principijelno nika ne bi treba li da menjamo: Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Ključna reč “Private” ograničava viljivost ove proceure na Sheet u kome trenutno raimo, tj. za koji pišemo ko – ovo je tipično za bilo koji Event ko koji pišemo. Posle ključne reči Sub ie ime objekta za koji je ogađaj efinisan, koji je onjom crtom ovojen o naziva ogađaja. Ono zbog čega je ovaj ogađaj različit o nečeg što smo o saa raili je u tome što poseuje svoj parametar proceure naveen u zagraama. Kaa proceura za ogađaj ima parametar ona de taj parametar uvek obiti vrenost koja je relevantna za ogađaj – u slučaju SelectionChange ogađaja, relevantna informacija je novi opseg koji je selektovan.
40
Koristedi taj parametar, možemo na primer napisati sleedi ko koji de ispisivati aresu trenutno selektovanog opsega u deliju A1: Private Sub Worksheet_SelectionChange(ByVal Target As Range) Range("A1").Value = Target.Address End Sub
Primer promena u deliji A1: $A$1, $S$32, $F$8:$J$20 i sl… Još jean primer za Sheet ogađaje je Change event. Ovaj ogađaj se aktivira kaa nastane promena na nekom opsegu (bilo jenoj deliji ili više njih). Ako na našem Sheet -u imamo računanje nekih vrenosti u makrou, a taj makro koristi vrenosti oređenog opsega (npr. nazvademo opseg “Poaci”), mogli bi a pratimo izmene koje su izvršene na tom opsegu i svaki put ka nastane promena a ponovo pokrenemo makro za izračunavanje. a nismo koristili makro ved funkcije, Excel bi automatski ponovo izračunao sve vrenosti, ali u našem slučaju mi moramo sami a voimo računa. Proceura je ata sleedim koom: Change Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 5 And Target.Column = 1 Then Target.Value = "Ne moze!" End If If Not Intersect(Target, Range("B1:B10")) Is Nothing Then MsgBox "Hello" End If End Sub
Drugi primer: Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Not (Intersect(Target, Range("Podaci")) Is Nothing) Then Call Proracunaj 'poziv procedure End If Application.EnableEvents = True End Sub
Prvi i poslenji re proceure uključuju i isključuju osobinu Excel -a a reaguje na ogađaje pomodu osobine Application.EnableEvents. Ovo je potrebno ukoliko u proceuri “Proracunaj” menjamo neku deliju iz opsega “Poaci” – ako ne bi isključivali ogađaje, u tom trenutku bi se ponovo aktivirao Change ogađaj, koji opet poziva proceuru koja opet menja saržaj, i tako u krug – obijamo beskonačnu petlju (ukoliko vam se ovo ogoi, izvršavanje možete prekinuti sa Esc tasterom). Funkcija Intersect vrada presek va opsega. Ako se opsezi ne presecaju, vrada poseban Excel tip Nothing koji je zapravo specijalna vrenost koja se koristi za poređenje sa objektima (slično kao što se nula koristi u poređenju sa brojevima, tako i Nothing može a se koristi pri poređenju sa objektima ali se umesto znaka jenakosti koristi ključna reč Is). Ukoliko presek nije prazan, pozivamo proceduru za obradu – Proracunaj. Obzirom a smo ved isključili reagovanja na ogađaje, ne moramo a voimo računa koje delije menjamo u toj proceuri, i a li de nastupiti beskonačna petlja. Treba voiti računa o tome a ako obrišemo neki worksheet, ujeno brišemo i sve ogađaje koje smo za njega pisali.
41
Workbook događaji Workbook je opštiji o worksheet -a zato što on sarži sve worksheet -ove. U njemu možemo
uhvatiti ogađaje kao što su na primer otvaranje okumenta (Open), oavanje novog Sheet-a (NewSheet), it… Jean primer za ogađaj BeforePrint bi bio sleedi: Private Sub Workbook_BeforePrint(Cancel As Boolean) vr = MsgBox("Da li ste promenili footer da sadrži brojeve stranica?", _ vbYesNo, "Podsetnik") If vr = VbMsgBoxResult.vbNo Then Cancel = True End If End Sub
Ovaj ko se izvršava svaki put pre štampe (bilo PrintPreview, bilo “pravi” Print). Ovaj primer je uzet zbog parametra koji sarži – Cancel As Boolean. Ovaj parametar je u vezi sa ogađajem i ima efault vrenost True koja oređuje a štampanje treba a se izvrši. Ako ga promenimo na False unutar našeg koa, prekinudemo izvršavanje štampe. Slično korišdenje dete verovatno sretati i ko rugih ogađaja. Proceure za upravljanje ovim ogađajima smještaju se u koni moul ThisWorkbook objekta. U tablici ispo pogleajte spisak jenog broja ovih ogađaja, uz akcije koja okiaju ove ogađaje. Događaj
Akcija koja okida događaj
Activate BeforeClose BeforePrint BeforeSave Deactivate NewSheet Open SheetActivate SheetCalculate SheetChange SheetDeactivate SheetSelectionChange WindowActivate WindowDeactivate WindowResize
Radna knjiga je aktivirana. Radna knjiga treba da se zatvori.
Radna knjiga treba da se štampa ili pregleda sa Print Preview. Radna knjiga treba da se snimi. Radna knjiga je deaktivirana. Novi list je dodat u radnu knjigu. Radna knjiga je otvorena. Bilo koji radni list je aktiviran.
Bilo koja radna knjiga je proračunata ili ponovo proračunata. Bilo koja radna knjiga je promijenjena. Bilo koja radna knjiga je deaktivirana. Selekcija na bilo kojoj radnoj knjizi je promijenjena. Bilo koji prozor radne knjige je aktiviran. Bilo koji prozor radne knjige je deaktiviran.
Veličina bilo kojeg prozora radne knjige je promijenjena.
Open
Ovo je jean o ogađaja koji se najčešde prati. ogađaj se aktivira otvaranjem rane knjige, a ogovarajuda proceura je Workbook_Open proceure. Ova se proceura najčešde koristi za prikaz poruka, otvaranje rugih ranih knjiga, postavljanje korisničkih izbornika i alatnih traka, aktiviranje oređenog ranog lista ili delije it. Private Sub Workbook_Open() Dim i As Integer Worksheets("Evidencija").Select i = 1 Do While ActiveSheet.Cells(i, 1).Value <> ""
42
i = i + 1 Loop ActiveSheet.Cells(i, 1).Value = "Otvorena " & Date & " u " & Time Worksheets(1).Select Save End Sub
NewSheet U ovom primjeru prikazana je procedura Workbook_NewSheet
koja de prije kreiranja
novog lista u radnu knjigu korisniku prikazati InputBox u koji korisnik treba unijeti ime radnog lista.
Ukoliko rani list sa tim imenom ved postoji, potrebno je prikazati novi InputBox, sa porukom o greški prilikom unosa, u koji de korisnik unijeti novo ime. Kreirani rani list se smješta nakon svih postojedih ranih listova. Private Sub Workbook_NewSheet(ByVal Sh As Object) Dim Ime As String Dim ind As Boolean Dim List As Worksheet ind = False Ime = InputBox("Unesi ime: ", "Ime radnog lista")
For Each List In ThisWorkbook.Worksheets If UCase(List.Name) = UCase(Ime) Then ind = True Next Do While ind = True Ime = InputBox("Pogresno ime! Unesi opet: ", "Ime radnog lista") ind = False For Each List In ThisWorkbook.Worksheets If UCase(List.Name) = UCase(Ime) Then ind = True Next Loop Sh.Name = Ime Sh.Move After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
End Sub
BeforePint Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim Poruka As String Dim Odgovor As Integer Poruka = "Ponestalo je tonera!" & vbCrLf & "Zelite li da nastavite sa ispisom?" Odgovor = MsgBox(Poruka, vbYesNo, "Podsecanje na toner") If Odgovor = vbNo Then Cancel = True End Sub
43
13. Greške u kodu Kaa nastupi greška u VBA kou automatski se zaustavlja izvršavanje i prikazuje se eo koji je problematičan. Postoje situacije kaa znamo a neka komana može izazvati grešku, i umesto a prekiamo izvršavanje želimo a obraimo grešku na neki način i a nastavimo alje. a bi ovo ostvarili postoji više načina. Upotrebu demo objasniti na sleedem primeru. U ovom primeru greška može nastupiti u više slučajeva: npr. prilikom pokretanja makroa nije selektovana delija nego neki grafički element, ili u deliji A1 piše tekst umesto broja. Private Sub CommandButton1_Click() On Error GoTo greska Selection.Value = 5 Range(“A1”).Value = Range(“A1”).Value + 1 Exit Sub 'da nismo stavili ovo nastavili bi izvršavanje i sledećih redova greska: MsgBox "Doslo je do greske: " & Error() On Error GoTo 0 End Sub On Error GoTo linija –
ako ođe o greške prebaci se na liniju koja je označena labelom linija. Labele se pišu tako što stoje same u liniji, a iza njih je znak votačke (kao u gornjem primeru “greska:”). U ovom primeru, čim nastupi greška prekiamo izvršavanje koa ge god da je nastupila greška i prebacujemo se na liniju označenu sa “greska:”. Npr, ako je greška nastupila u prvoj narebi “ Selection.Value = 5” sleeda nareba koja se izvršava de biti ona iza “greska:”, ok se Range(“A1”)… nede izvršiti. On Error GoTo 0 –
resetuje prethono ponašanje, tako a kaa nastupi greška nege ruge u kou, ne iemo stalno na liniju “greska:”, ved se primenjuje stanarni način raa sa greškama. Bitno je primetiti a pre labele za obrau greške stoji Exit Sub – to znači a ako smo ošli o te linije prekiamo alje izvršavanje proceure. a kojim slučajem nismo stavili Exit Sub, proceura bi nastavila sa izvršavanjem, i izvršio bi se ko koji ispisuje “ošlo je o greške”, bez obzira što greške nema. Još jean način obrae grešaka je: On Error Resume Next – ako nastupi greška ignorišemo re u kome je nastala i nastavljamo izvršavanje sa sleedom linijom. Npr, u gornjem primeru, ako je nastupila greška pri rau sa Selection objektom, nastavidemo ko i pokušati a izmenimo deliju A1.
Pronalaženje grešaka - Debugging Kao i u vedini programskih alata, i VBA pruža usluge ebugger -a. Debugger je poseban deo programa koji vam veoma olakšava a otklonite neke logičke greške tako što dete zaustaviti izvršavanje koa u trenutku koji vama ogovara i izvršavati liniju po liniju, pratedi način izvršavanja (u koje grane koa ulazimo, koliko puta, it…) i koje vrenosti se pri tome menjaju.
Breakpoint – tačka zaustavljanja programa. Postavlja se klikom u sivi eo koa, u nivou rea
u kome želimo a se zaustavimo (vidi sliku – treba kliknuti u sivi eo ge je velika tačka).
44
Kaa oamo breakpoint, re se boji u crveno i oaje se velika tačka sa leve strane. Kaa pokrenemo ko, on de se zaustaviti na ovom mestu. Re koji de se sleedi izvršiti je obe ležen žutom bojom.
Step Over – komanda koja se nalazi u meniju – Debug->Step Over, de izvršiti prvu sleedu
narebu u nizu izvršavanja (onosno, re koji je obeležen žutom bojom). Najčešde postavimo breakpoint, i zatim se kredemo re po re sa Step Over. Ako želimo a nastavimo alje o kraja, onosno o sleedeg breakpoint-a, kliknemo Run->Continue (ili pritisnemo F5). Watches – prozor u kome pratimo vrednosti promenljivih. Aktiviramo ga preko View->Watch Window, a promenljive dodajemo u Debug->Add watch . U Watch možemo oavati bilo kakve vrednosti – npr. vrednosti opsega iz worksheet-a, osobine raznih kontrola u UserForm-
i, vrenosti promenljivih it… Vrenosti promenljivih koje koristimo u kou možemo vieti i prostim pozicioniranjem kursora miša izna te promenljive – njena vrenost bide ispisana kao Tooltip.
Pomeranje sleedeg rea za izvršavanje – ok je izvršavanje pauzirano, žutu liniju koja prestavlja sleedi re koji se izvršava možete jenostavno pomeriti na neki rugi re tako što dete levim ugmetom miša “uhvatiti” žutu strelicu sa strane i prevudi je na željeni re. Na ovaj način možete preskakati reove, ili neke reove ponovo izvršavati.
45