Professional Documents
Culture Documents
Excel Expert Vba PDF
Excel Expert Vba PDF
Microsoft Excel
EXPERT & VBA
Validacija unosa
Validaciju koristimo kada hoemo da obezbedimo da budui unos na radnom listu zadovoljava neke
unapred zadate kriterijume.
Npr, ako elimo da ograniimo unos u elijama B2:B30 da budu pozitivni celi brojevi do 100. Selektujemo
elije B2:B30, u meniju biramo Data->Validation->Whole number, between, min/max vrednost, pri emu
min i max mogu da budu reference na neke elije ili imenovane opsege.
Drugi koristan primer bi bio da recimo ograniimo unos duplih vrednosti (npr, za unos liste zaposlenih).
Za datu selekciju izabraemo Custom validaciju, i u prostor za kucanje formule ukucamo:
=COUNTIF($B$2:$B$30; B2) = 1
AutoFilter
Da bi aktivirali AutoFilter moramo imati selektovanu eliju koja pripada nekom opsegu. Kada smo
selektovali, kliknemo Data->Filter->Auto Filter. Dobiemo za svaku kolonu jedan dropdown meni iz kog
moemo birati vie opcija koje su generalno gledano samoobjanjive.
Ogranienje autofilter liste je to moe da prikae samo 1000 redova, i to uopte gledano za velike liste
postaje nepregledno izabrati samo jednu vrednost u listi. Da bi ovo prevazili posluiemo se trikom
grupisanja vrednosti. Npr, ako imamo liste imena i prezimena (ili uopte nekog teksta) dodaemo novu
kolonu koja e da izdvaja samo prvo slovo od vrednosti iz prve kolone: =LEFT(A2; 1).
Jo jedna zanimljiva opcija je da dodamo jednu kolonu koja e nam sluiti za pretraivanje liste. Npr, ako
nam se vrednosti od interesa nalaze u koloni A, dodaemo kolonu B bez naziva kolone. Vrednosti u
koloni B emo izraunavati po sledeoj formuli (ovde je data formula za eliju B2):
=IF(ISNUMBER(SEARCH($B$1;A2)); "Nadjen"; "Nije nadjen")
(ako elite pretragu osetljivu na mala i velika slova, koristite funkciju FIND umesto SEARCH).
Sada, kada ukucamo neku vrednost u eliju B1, kolona B e se popuniti vrednostima Nadjen i Nije
nadjen u zavisnosti od toga da li je ta vrednost pronaena u odgovarajuem redu A kolone. Ako imamo
ukljuen Auto format sada moemo birati da li elimo da prikaemo one redove koji sadre ili ne sadre
ovu vrednost, ime smo efektivno napravili pretraivanje po koloni na naem radnom listu.
Sumiranje vrednosti u auto filter listi se razlikuje u zavisnosti od toga da li koristimo SUM ili SUBTOTAL
funkciju. SUM e ignorisati prikaz filtera i uraunae sve vrednosti koje su date u opsegu. SUBTOTAL e
raunati samo redove koji su proli filter.
Uslovno formatiranje
Sa uslovnim formatiranjem (conditional formatting) moemo istai neke odreene vrednosti npr. da li
su neke vrednosti ispod dozvoljene i sl.
Selektujemo oblast za koju elimo da primenimo uslovno formatiranje, zatim iz Format menija
izaberemo Conditional Formatting. Zadamo kriterijum za formatiranje, i izaberemo format teksta koji
treba primeniti ako je uslov zadovoljen. Npr. Cell Value Is - less than - 3000 e primeniti format koji
izaberemo na sve elije koje imaju brojnu vrednost manju od 3000. Slino moemo dodavati i vie
uslovnih formata.
Ako imamo nazive kolona ili redova koji su zapravo brojevi (npr. godina 2008), da bi spreili da uslovno
formatiranje utie i na njih trebalo bi da ih promenimo tako to emo ih uneti sa jednim apostrofom pre
broja (2008). Time smo oznaili da je elija tipa teksta i njena vrednost e se ignorisati pri poreenju sa
brojevima u uslovnom formatiranju.
5
Pored osnovnih uslova za formatiranje mogue je uneti i uslov u obliku formule. Iskoristiemo ovo na
primeru senenja parnih redova (npr. zbog lakeg itanja u tampanoj verziji). Kao kriterijum biramo
Formula Is, a ukucavamo sledeu formulu: =MOD(ROW(); 2) = 0. U ovoj formuli MOD daje ostatak pri
deljenju sa 2, a ROW() daje broj reda za koji Excel trenutno ispituje da li zadovoljava uslov formatiranja.
Ukoliko je ovaj red neparni (npr, 3, 5, 7 itd...) pri deljenju sa 2 ostatak e biti 1 i nee proi uslov. Ako je
paran uslov je zadovoljen (zato to je jednako nula) i primenjuje se uslovno formatiranje.
Dinamiki opseg
Da bi napravili dinamiki opseg za rad, umesto definisanja fiksnog opsega (elije od do princip),
moemo kreirati region koji e se automatski proirivati kako budu dodavani redovi odnosno kolone.
Definicija regiona je data tekstom formule:
=OFFSET(Trgovina!$A$1,0,0,COUNTA(Trgovina!$A:$A), COUNTA(Trgovina!$1:$1))
Prva vrednost OFFSET funkcije je referenca na prvu-levu eliju opsega, druga i trea treba da budu 0, a
pretposlednja i poslednja definiu koliko opseg ima redova i kolona (respektivno). Da bi se ovaj broj
stalno uveavao kako se redovi i kolone menjaju (dodaju ili briu) koriena je funkcija COUNTA (count
all), koja e brojati koliko ima popunjenih redova u koloni A, odnosno kolona u redu 1. Zbog ovoga ne
smemo dodavati neke podatke na ovaj list ako ne pripadaju naem opsegu (ili bar ih treba uvati tako da
se ne nalaze u prvoj koloni/redu).
6
Fields deo, i Ukupno u Data Items. Ovako smo dobili listu po regionima i ukupne ostvarene promete
po svakom gradu. Ako elimo da vidimo koji prodavac je prodavao gde, prevui emo kolonu Prodavac
u Column Fields. Na kraju, lista bi trebalo da izgleda ovako:
Da bi dobili prikaz tabele po gradovima i listu proizvoda koji su tamo prodati, prevui emo Region u
Page Fields, a u Row Fields emo sad staviti
Predmet. Rezultat bi trebalo da bude slian
kao na slici.
Promenom regiona biramo prikaz po
gradovima (ovde su prikazani podaci za
Beograd).
Duplim klikom na Sum of Ukupno moemo
promeniti prikaz u procentualni. Prvo proirimo prikaz vie opcija (klik na dugme Options...), i izaberemo
% of row.
Grupisanje podataka: Dodajte kolonu Datum deo sa kolonama a uklonite Prodavac. Da bi prikazali
prodaju po mesecima i godini, kliknuemo desnim dugmetom na kolonu Datum->Group and Show
Data->Group... U ponuenoj listi selektujemo i Months i Years. Dobili smo nov izgled tabele grupisan po
vrednostima za svaki mesec svake godine. Radi bolje preglednosti, prevui emo Years da bude u Page
Field delu. Izgled tabele bi trebalo da izgleda slino kao na slici (izabrana je 2006 godina u Page Field
delu).
Na slian nain moemo grupisati i druge tipove podatka (npr. po broju godina, po koraku od 10 godina
bi dobili grupe 10-20 god, 20-30, itd...).
Da bi od Pivot tabele dobili Pivot grafik, dovoljno je prvo kliknuti na
neku eliju tabele, zatim na Chart Wizard ikonicu kao na slici.
Funkcija SUM bi mogla da izrauna ovaj izraz kada bi to bio samo jedan opseg. Meutim, ovde ima dva
opsega i nije najjasnije koje vrednosti iz prvog opsega se mnoe sa kojim vrednostima iz drugog opsega.
Da bi ovo obradili, formulu je potrebno uneti umesto sa standardnim pritiskom tastera enter na kraju, sa
ctrl+shift+enter. Na ovaj nain, specificirali smo da je ovo Array formula, i ona se od ostalih razlikuje po
tome to Excel ispisuje vitiaste zagrade ({ i }) oko tela formule. Funkcionisanje array formule (na
prethodnom primeru): svaki opseg se obrauje red po red, odnosno, prvo e se raditi sa prvim redom
oba opsega (pomnoie se vrednosti A1 i B1), zatim sa drugim itd... Dobijeni rezultati se interno u Excelu smetaju u nov Array na kome se konano moe primeniti formula SUM. Oekivano, opsezi moraju
imati jednak broj redova u suprotnom dobiemo greku (#N/A).
esta greka je da se posle izmene Array formule ista ne potvrdi (ne unese) sa ctrl+shift+enter, ve samo
sa enter, to e uslediti grekom (#VALUE). Da ispravite ovu greku, kliknite na eliju, pritisnite F2 da bi
menjali njen sadraj i potvrdite je sa ctrl+shift+enter. Array formulu ne moete uneti tako to ete runo
upisivati zagrade oko vae formule - {=SUM(A1:A50*B1:B50)} - Array formule se mogu unositi samo na
prethodno opisani nain.
Greka u sabiranju
Ukoliko radite sa decimalnim vrednostima, a u tabeli ih prikazujete ih kao celobrojne, moete doi u
situaciju da se brojevi nekorektno sabiraju. Posmatraemo na primeru sledee tabele:
Prikazano je kao da je 1+1=3. Problem je nastao zbog toga
to e Excel zaokruiti decimalne vrednosti prilikom
njihovog prikazivanja i to na najbliu vrednost i tu
vrednost e prikazati. Meutim, prilikom raunanja koristi se prava vrednost (a ne prikazana), odnosno
u eliji B4 na prikazanom primeru, izraunata vrednost je 2.98 bez obzira to se sabiraju vrednosti iji je
prikaz u formatu celih brojeva. Naravno, kada se ta vrednost od 2.98 zaokrui na najblii celi broj,
dobiemo broj 3. Ovo za velike liste smanjuje greku pri sabiranju, ali postoje sluajevi (pogotovo za
male tabele) kada nam je potrebno da sabiramo samo vrednosti koje su zaokruene. Za reenje ovog
problema postoje dva naina.
1. Izaberite Tools->Options->Calculations i tiklirajte opciju Precision As Displayed. Ovime se sve
vrednosti u elijama odsecaju na onoliko decimala koliko je definisano formatom elije. Ovu
akciju nije mogue kasnije ponititi.
2. Koristite Array formule sa zaokruivanjem za gornji primer: {=SUM(ROUND(B2:B3;0))}.
VBA / Makroi
Makro je sekvenca instrukcija kojima se automatizuje neki proces. Na primer, jedan makro bi mogao da
bude: postavi pozadinsku boju elije na zeleno, postavi boju teksta na belo, podesi font da bude veliine
12. Ako primetimo da neki proces stalno ponavljamo najverovatnije je da bi nam se isplatilo da
napravimo makro koji jednom snimimo i kasnije moemo da ga koristimo svaki put kad nam to zatreba.
U Excelu makroi se piu koristei varijantu jezika Visual Basic (VBA = Visual Basic for Applications). VBA
je standardni jezik za vie Microsoft-ovih proizvoda, i principe koje nauite u Excelu moete primenjivati
npr. u Wordu, itd Takoe, makroi se esto koriste i u mnogim drugim aplikacijama (Photoshop npr
Window->Actions, itd) mada ne koriste VBA ve imaju svoju sintaksu.
Nakon default instalacije MS Office-a, makroi koje otvaramo sa dokumentima ne funkcioniu. Ovo je
uinjeno sa razlogom - ranije su se esto upisivali virusi u obliku makroa i ubacivali u dokumente. Samo
otvaranje takvog dokumenta bi zatim izazvalo aktiviranje virusa i zbog toga su proizvoai odluili da
onemogue pokretanje makroa osim ako korisnik to eksplicitno ne eli. Ako su vam podeavanja takva
da je pokretanje makroa onemogueno ispisae vam se sledea poruka prilikom pokretanja makroa:
Meutim, ovo vai samo za makroe koje dobijamo iz drugih dokumenata makroe koje sami piemo
(koje smo sami kreirali) su podrazumevano sigurni i Excel e vam dozvoliti da ih piete i pokreete.
Ako elite da smanjite nivo sigurnosti da bi omoguili pokretanje tuih (nepotpisanih) makroa, koristite
opciju: Tools->Options->Security->Macro Security. Po default-u izabran je nivo bezbednosti High
spustite na Medium ako elite da vas pita pre svakog pokretanja makroa (to je i preporuka ovde), ili na
Low ako elite da svi makroi mogu da se izvravaju bez vae prethodne saglasnosti. Da bi promene koje
ste ovde napravili postale aktuelne morate zatvoriti i ponovo otvoriti Excel.
Snimanje makroa
Najjednostavnija upotreba makroa je snimanje akcija korisnika.
Ne morate da poznajete VBA da bi mogli da ga koristite. Da ne bi
smo previe koristili Tools->Macro meni dodaemo novi Toolbar:
kliknite desnim dugmetom na Toolbar deo i izaberite Visual Basic (Toolbar su sve ikonice/dugmii koji se
najee nalaze odmah ispod padajueg menija Font, New, Open, Save, itd). Za sad emo koristiti
samo prva dva: pokretanje i snimanje makroa. Tree dugme pokree podeavanja za bezbednost (isto
kao Tools->Options->Security), a ostale dugmie emo koristiti neto kasnije.
10
Izaberite jednu eliju. Kliknite na dugme za snimanje i pojavie se prozor u kome definiete podatke o
makrou:
Kad ste zavrili sa definisanjem makroa, poinje snimanje makroa: promenite pozadinu elije u zelenu,
promenite boju teksta u belu, i pritisnite stop dugme. Upravo smo napravili makro koji e izabranu eliju
promeniti tako da ima zelenu pozadinu i beli tekst. Da bi pokrenuli makro, prvo selektujte neke elije
koje elite da promenite, kliknite na dugme koje podsea na Play, izaberite makro Zeleni i zatim Run.
Naa selekcija se promenila tako da odgovara onome to smo definisali kad smo snimali makro.
Da bi videli koje akcije smo snimili u makro, u meniju za pokretanje makroa (dugme Play, ili Alt+F8, ili
Tools->Macro) izaberite eljeni makro i zatim Edit (ako ste snimali u Personal Macro Workbook
moraete da ga prvo uinite vidljivim Window->Unhide). Otvorie se Visual Basic Editor (VBE) u kome
su prikazani makroi svih dokumenata koji su trenutno aktivni. U ovom prozoru moemo menjati kod koji
smo prethodno snimili, ali i pisati nov kod.
Treba primetiti da smo prvo selektovali eliju, a zatim poeli snimanje makroa. Da smo sluajno uradili
drugaije selekcija elije bi se upisala u makro, i svaki put kad pokrenemo makro prvo bi se selektovala ta
elija, a zatim bi se radile ostale akcije.
11
Project Explorer
VB kod
U ovom prozoru je prikazan kod svih trenutno otvorenih dokumenata. U Project Explorer-u se nalazi
prikaz svih otvorenih dokumenata, grupisanih u VBAProject (jedan workbook = jedan VBAProject). Svaki
projekat sadri Microsoft Excel Objects u kome su svi spreadsheet-ovi, kao i ceo Workbook. Drugu grupu
ine moduli (Modules). Moduli su kutije (eng. containers) u kojima se uva kod. Videete da se na
makro upisao u jedan modul (Module1). Kod moemo pisati ili u modulima ili vezano za odreeni Sheet.
Treba razlikovati tri vrste koda koje emo pisati:
1. Procedure
2. Funkcije
3. Event code odnosno, kod koji se izvrava kada nastupi odreeni dogaaj (dupli klik, otvaranje
dokumenta, promena selekcije, itd)
Svaka vrsta ima svoje specifinosti zbog kojih se drastino razlikuje od drugih.
Procedure
Procedure moete shvatiti kao komande koje se izvravaju bilo na zahtev korisnika ili iz neke druge
procedure. Primer procedure bi bio: oseni eliju da bude siva, upii neki tekst, i sl. U optem sluaju
12
procedure se koriste kada treba neto napraviti, promeniti, kreirati Za razliku od funkcija, procedure
nemaju povratnu vrednost.
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
Funkcije
Funkcije se piu veoma slino kao procedure, meutim, funkcije uvek vraaju jednu vrednost (ba kao i
funkcije u Excel-u npr. SUM, COUNT, itd). Moemo ih koristiti unutar drugih funkcija/procedura, ili u
radnim listovima. Funkcije koje koristimo u worksheet-u ne mogu da ga menjaju! Ako pokuamo da
izmenimo worksheet bilo gde unutar funkcije ona e vratiti greku (iako funkcije koje pozivamo iz
procedura mogu da menjaju izgled worksheeta, ta praksa se ne preporuuje).
Primer:
Function Saberi(a1, a2)
'Sabiranje brojeva a1 i a2
Saberi = a1 + a2 'vraanje vrednosti funkcije vrimo tako to imenu funkcije
'dodelimo vrednost
End Function
Event Code
To je kod koji e se izvravati svaki put kada nastupi neki dogaaj (event=dogaaj). Po sutini, event
code su procedure. Npr. moemo napisati kod koji se izvrava svaki put kad korisnik promeni selekciju
elije (tj. selektuje neku drugu eliju), u trenutku pre tampe, kad se aktivira list, itd... Event kod se ne
moe pisati u modulima, nego samo u kodu koji je predvien za worksheet/workbook (ali naravno
moemo odatle pozivati druge procedure/funkcije koje moemo smestiti bilo gde, pa i u modul).
Primer:
Private Sub Workbook_Open()
MsgBox "Dobrodosli u workbook sa makroima"
End Sub
Zakljuak:
Kada poinjete da piete kod, i kad odluujete ta vam treba, koristite funkcije ako vam treba neto da
se izrauna; ako treba neto uraditi/promeniti koristite procedure; ako treba reagovati na neke
dogaaje onda piite event code. Ali ak i ako pogreite i ponete npr. da piete funkciju a treba vam
procedura izmene je lako napraviti zato to je telo, tj. sadraj koda isti i dovoljno je promeniti
zaglavlje gde se definie procedura odnosno funkcija.
13
Objekti
Objekti
Objekti ine najbitniju stavku u VBA i od sutinskog je znaaja pravilno ih shvatiti. Svaki objekat definie
svoja ponaanja (tj. metode) i osobine (tj. podeavanja). Objekti su npr. Application, Worksheet,
Workbook, selektovani opseg elija, jedna elija, itd Osobine npr. elije bi bili okviri (borders), kom
redu pripada, kojoj koloni, sadraj elije, koja je pozadinska boja, boja fonta, veliina itd; ponaanje:
aktiviraj eliju (tj. da elija dobije fokus), dodaj komentar, uradi merge, obrii sadraj, itd
Kolekcije
Objekti iste vrste se nekad smetaju u kolekcije: npr. vie Worksheet-ova smetamo zajedno u
Worksheets kolekciju, vie elija u Cells Da bi dobili odreeni objekat iz kolekcije objekata navodimo
njegovo ime u zagradama, npr za odreeni worksheet: Worksheets(MojSheet). Sada na dalje moemo
raditi sa ovim izrazom potpuno iste akcije koje bi inae radili na jednom sheet-u.
Hijerarhija
Svaki objekat pored svojih osobina i ponaanja moe sadrati druge objekte npr. Workbook sadri
Worksheet objekte, Worksheet dalje ima Range objekte (opseg elija), koji opet ima elije itd Da bi
pristupili nekom objektu u VBA kodu, specificiramo njeno mesto u hijerarhiji koristei znak . (taka).
Na primer:
Application.Workbooks(Book1).Worksheets(Sheet1).Range(A1)
Ako izostavimo poetak hijerarhije podrazumevae se trenutno aktivni objekat. U prethodnom primeru,
ako izostavimo prva dva objekta i napiemo:
Worksheets(Sheet1).Range(A1)
to znai da referiemo Workbook koji je trenutno aktivan. Ako izostavimo i Worksheets(Sheet1), znai
da radimo na trenutno aktivnom sheet-u i moemo samo pisati Range(A1). Ovo je korisno zato to isti
makro moemo koristiti na vie worksheet-ova, u zavisnosti od toga koji je trenutno aktivan.
Programiranje
Osnovni principi
Linija koda moe biti proizvoljno dugaka. Ako elimo moemo je nastaviti u sledeem redu ako red
prekinemo sa znakom _ . VB e onda taj znak ignorisati i prei e da obrauje sledei red kao da je u
istom redu sa prethodnim. Na primer:
varA = Cells(1,2).Value * Cells(3,3).Value Cells(3,4).Value * _
Cells(5,5).Value / _
Cells(2,2).Value - 3
14
Obratiti panju na uvlaenje u svim sledeim primerima nije obavezno ali veoma pomae da lake
sagledamo koji red pripada gde (da li je ugnjeden ili ne, da li se nastavlja od prethodnog reda itd...).
Komentari koje dodajemo se ne izvravaju. Svaki komentar poinje znakom apostrofa () i vai do kraja
linije. Drugim reima, VB e ignorisati sve to pie posle apostrofa. Zbog toga, moemo pisati neto
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 vrednosti se vri prostim operatorom =. U odredite koje je sa leve strane jednakosti se
upisuje izraunata vrednost sa desne strane. Uvek se prvo izrauna desna strana jednakosti, a zatim se
to upisuje u odredite. Na taj nain, moemo 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, matematiki gledano poslednji red je netaan / neispravan, ali kao to smo rekli ranije
prvo se izrauna vrednost sa desne strane jednakosti, i zatim se to upie u varA. Leva strana jednakosti
nas ne interesuje do samog kraja kada treba u nju da upiemo vrednost.
Kada elimo da dodelimo promenljivoj vrednost nekog objekta, moramo prvo napisati kljunu re Set:
Dim varA As Range
Set varA = ActiveCell
Sad na dalje moemo koristiti varA isto kao to bi koristili ActiveCell zato to pokazuju na isti objekat.
Jo jedna vrsta dodele je kada odreenim paramentrima neke procedure/funkcije dodeljujemo
vrednosti. U tom sluaju, parametrima dodeljujemo vrednosti sa :=. Na primer:
Workbook.Open fileName:="Book1.xls", password:="pswd"
Promena osobine osobine moete shvatiti i kao podeavanja objekta. Npr. jedno od podeavanja za
eliju je njena vrednost, tj. ono to u njoj pie. Sledei kod e promeniti vrednost elije A3 tako da u njoj
pie re Test:
Range(A3).Value = Test
'sledei red ima potpuno isti efekat, ali eliji pristupa na drugi nain:
Cells(3,1).Value = Test ' trei red, prva kolona u vrednost upii Test
U prethodnom primeru na dva razliita naina smo doli do istog objekta elije A3. Koji ete nain da
koristite je potpuno nebitno, ali da vam treba referenca na neki opseg (npr. A2:A40, ili imenovani opseg
podaci, vrednosti itd) morali bi da koristite Range.
15
itanje osobine je veoma slino upisivanju vrednosti, samo to sada umesto upisivanja vrednosti u
osobinu, itamo osobinu (tj. smetamo je na desnu stranu) a na levu stranu emo 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 proitali iz C1
Cells(2,2).Value = Cells(5,1) 'u B2 upisujemo vrednost iz A5
Logike operacije su opet, veoma sline onome to ste verovatno sretali. Primer:
varA
varA
varA
varA
=
=
=
=
Promenljive u VB mogu da se definiu eksplicitno: Dim varA as Integer, ali imate slobodu da
jednostavno koristite promenljive i koje niste definisali, i VB e automatski da ih definie za vas. Nazivi
promenljivih moraju poeti slovom, mogu sadrati brojeve, ali ne i znak razmaka (ako elite da razmak
bude deo naziva promenljive koristite znak _). Primer:
Dim varA as Integer 'eksplicitno deklariemo 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 moemo koristiti potpuno ravnopravno
Tip podatka predstavlja vrstu podatka sa kojim radimo. Postoje vie standardnih tipova: Integer
(celobrojni), Double (decimalni), String (tekstualni), Boolean (logiki), itd... Takoe, svaki objekat u Excelu je poseban tip podatka Workbook, Worksheet, itd... Tip podatka odreuje ta moemo sa tim
podatkom da radimo. VisualBasic ne kontrolie u trenutku pisanja koda da li ono to radimo odgovara
tipu podatka: npr, moemo napisati: 3 * Workbooks(Sheet1), ali e zato prijaviti greku kada bude
pokuao da izvri kod. Neki smatraju da je ovo glavni nedostatak VB jezika zato to dozvoljava veliki broj
greaka u vremenu izvravanja (nije strong typed).
Velika i mala slova ne prave razliku za VB ako i stavimo negde malo slovo gde treba veliko, VB e
prepoznati na koju promenljivu/objekat se odnosi (case insensitive).
Kontrolisanje toka izvravanja
Kod se standardno izvrava jedan red za drugim. Meutim, ima sluajeva kada nam je potrebno da neki
kod izvrimo pod nekim uslovima, da neki deo koda ponavljamo odreen broj puta itd Zbog ovoga
postoje razliite dodatne komande kojima moemo da kontroliemo kako e da tee izvravanje koda.
Svaka od dole navedenih konstrukcija moe da se ugnjedava u samu sebe ili u druge komande, tj. moe
se posmatrati kao jedna zaokruena jedinica koda.
16
If-Then-Else konstrukcija omoguava da izvravamo neki kod samo pod odreenim uslovom. Sintaksa:
If uslov Then
Naredba1
Naredba2
Else
Naredba3
End If
Ako je uslov taan (tj. izraunava se na TRUE) onda e se izvriti Naredba1, Naredba2 i ostale ako
postoje. Ako je uslov netaan, izvrava se deo koda u Else grani tj. Naredba3 (i ostale ako postoje).
Ako piemo If-Then-Else u vie redova kao u gornjem primeru, obavezno je da naredbu zavrimo sa
End If. Ako nam Else deo nije potreban moemo 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
Ili:
If Cells(1, 1).Value = True Then Cells(2, 2).Value = "Tacno"
Select-Case je naredba koja je po funkciji slina If-Then-Else naredbi sa tom razlikom to se uporeuje
vie vrednosti, bez potrebe za ugnjedavanjem If delova. Sintaksa:
Select Case var
Case uslov1
Naredba1
Case uslov2
Naredba2
End Select
Promenljiva iju vrednost ispitujemo je oznaena sa var. U svakom Case delu ta vrednost se ispituje da li
je jednaka uslovu uslov1, uslov2 itd Ako je taan neki uslov, tada se izvrava odgovarajui set naredbi.
Npr, ako je taan uslov1, onda e se izvravati Naredba1 (i ostale ako postoje, sve do sledeeg Case
dela), ako je taan uslov2, izvrava se Naredba2, itd Ako u uslovima treba da iskoristimo vrednost var
(npr. var>2), onda piemo i kljunu re Is: Case Is > 2. Za operator jednakosti to nije potrebno (Case 4 e
ispitivati da li je var = 4).
17
Primer:
Select Case ActiveCell.Value
Case Is < 0
ActiveCell.Font.ColorIndex = 3
Case 0
ActiveCell.Font.ColorIndex = 5
Case Is >0
ActiveCell.Font.ColorIndex = 1
End select
For-Next petlja omoguava da neki deo koda ponavljamo odreeni broj puta. Sintaksa:
For var = x To y
Naredbe
Next var
Promenljiva var koristi kao broja prolaza kroz petlju pri svakom prolazu uveava se za 1 (ime
promenljive je proizvoljno). U prvom prolazu ova promenljiva dobija vrednost x, a petlja e ii dok god
ne dostigne vrednost y. U svakom prolazu izvrava se set komandi koji je unutar For petlje (obeleen sa
Naredbe). For petlju obavezno zavravamo sa Next var (ime promenljive nije neophodno, ali je
poeljno jer olakava razumevanje koda).
Konkretan primer:
Suma = 0
For iBr = 0 To 100
Suma = Suma + iBr
Next iBr
Ovaj primer e sabrati brojeve od 0 do 100. Rezultat sabiranja imamo u promenljivoj Suma. Sledei
primer upisuje redne brojeve u prvih 100 elija kolone A:
For iBr = 1 To 100
Cells(iBr, 1).Value = iBr
Next iBr
Postoji jo jedna konstrukcija koja se koristi za For naredbu kada je potrebno da proemo kroz sve
objekte neke kolekcije objekata. Tada e For naredba poinjati sa: For Each obj In Coll (ostalo je sve
isto), odnosno u prevodu: ponavljaj za svaki objekat obj u kolekciji Coll. U tom sluaju, objekat se ne
uveava za jedan kao u prethodom sluaju ve e za svaku sledeu iteraciju dobiti sledeu vrednost u
kolekciji (zbog toga je bitno da tu kolekciju ne menjamo unutar petlje).
Na primer, ako elimo da svaku eliju selekcije promenimo tako da sadri svoj redni broj:
varI = 0
For Each Item In Selection
varI = varI + 1
Item.Value = varI
Next Item
Ovo je vrlo korisno kada radimo sa nekom kolekcijom u kojoj ne znamo taan broj objekata a elimo da
ih proemo sve.
18
With je kljuna re koju emo koristiti u prilikama kada esto pristupamo istom objektu. Nema neki
funkcionalni znaaj za program osim to nam skrauje vreme pisanja. Sintaksa:
With objekat
Naredbe
...
End With
Objekat je neki objekat ije osobine ili ijim objektima elimo da pristupamo u delu Naredbe. Na primer,
umesto da piemo dugaki kod:
Selection.HorizontalAlignment = xlCenter
Selection.VerticalAlignment = xlCenter
Selection.WrapText = False
Interakcija sa korisnikom
Za sada koristiemo samo dve osnovne funkcije za interakciju InputBox i MsgBox, kojima emo uzimati
podatke od korisnika odnosno prikazivati poruke korisniku (respektivno). Detaljniju i mnogo opirniju
grafiku komunikaciju radiemo u delu sa UserForms.
InputBox je zapravo funkcija koja prikazuje korisniku poruku i prua mu prostor za unoenje proizvoljnog
teksta. Kada korisnik klikne OK vrednost koju je ukucao je sadrana u povratnoj vrednosti funkcije.
Primer:
inp = InputBox("Tekst poruke", "Naslov", "Default vrednost")
19
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 primera bi mogao da bude sledei:
inp = MsgBox("Nedovoljno podataka. Nastaviti obradu?", vbYesNo, "Naslov")
Ovde pitamo korisnika da li eli da nastavi obradu i prikazujemo mu Yes i No dugmie. Njegov izbor
pamtimo u promenljivoj inp. Nakon toga, moemo da ispitujemo ta je kliknuo tako to emo porediti
inp sa vbMsgBoxResult.vbNo i vbMsgBoxResult.vbYes.
Primeri Procedure
Procedura koja ispisuje nazive worksheet-ova aktivnog Workbook-a u kolonu A
Sub PopuniSheetove()
Dim jedanSheet As Worksheet
Cells(1, 1).Value = "Lista sheet-ova" 'zadajemo naziv kolone
i = 2
For Each jedanSheet In Worksheets 'kreemo se kroz listu sheet-ova
Cells(i, 1).Value = jedanSheet.Name 'upisujemo vrednosti u elije
i = i + 1 ' uveavamo u kom redu e se sledei put upisati vrednost
Next jedanSheet
End Sub
Verzija 2: Ispis ide poevi od trenutno aktivne elije. Na kraju reformatirati ispis (AutoFit).
Sub PopuniSheetove2()
Dim jedanSheet As Worksheet
Dim C As Range
Set C = ActiveCell
i = 1
C.Value = "Lista sheet-ova"
For Each jedanSheet In Worksheets
C.Offset(i, 0).Value = jedanSheet.Name
' u prethodnom redu offset vraa referencu koja je za i redova
' ispod aktivne elije, i za 0 kolona u desno (to znai da e biti
' u istoj koloni gde je i aktivna elija)
i = i + 1
Next jedanSheet
'Kad smo zavrili, uradimo AutoFit na koloni u kojoj se nalazi naa elija
Columns(C.Column).AutoFit
'C.Column e vratiti broj kolone u kojoj se nalazi aktivna elija, a Columns
'kolekcija e zatim vratiti objekat kolone (Column) na kome primenjujemo AutoFit
End Sub
20
Zadatak 1: Napisati makro koji e napraviti okvire (borders) za tabelu sa 5 kolona i 10 redova, a poev od
trenutno aktivne elije. Spoljanji okvir tabele treba da bude duplih ivica, a unutranje ivice izmeu elija
standardne debljine i stila.
-
Zadatak 2: Napisati makro u kome se od korisnika trai da unese neku vrednost (Vr). Zatim, pitati ga da li
eli da koristi tu vrednost za uveanje vrednosti. Ako odgovori pozitivno elije od B1 do B20 uveati, u
suprotnom umanjiti za vrednost koju je prethodno uneo (Vr).
-
Primeri Funkcije
Funkcija koja sabira brojeve od zadatog broja do krajnjeg broja:
Function Saberi(a1, a2)
s = 0
For i = a1 To a2
s = s + i
Next i
Saberi = s
End Function
21
Rad sa objektima
Object Model
esto nam zatreba da vidimo koji objekat je kog tipa, ili da pronaemo gde u hijerarhiji objekata
moemo nai traeni objekat/osobinu, itd... Ovo sve se moe pronai u tzv Object Model-u u Visual Basic
Editor-u. Object Model je prozor koji slui iskljuivo za pruanje informacija i pretragu po objektima.
Aktivira se u meniju pod View->Object Model ili pritiskom na taster F2.
Traeni termin
za pretragu
Gde selektovani
objekat/osobina pripada
(ko su roditelji)
Tip selektovanog objekta/osobine (na
slici je to trenutno Object)
Najei nain upotrebe: ukucavamo neki termin koji elimo da naemo gde pripada (npr, elimo da
vidimo odakle sve moemo da pristupimo objektu Line), i zatim odluujemo ta nam treba u zavisnosti
od roditelja koji su ponueni (tj. kojoj klasi pripada).
22
OK ako je zaista i selektovan niz elija, ali ono to je problem je to emo dobiti greku ako je
selektovana linija, kvadrat ili sl. iz Drawing toolbar-a).
Da bi predupredili ove greke koristiemo funkciju TypeName koja e vratiti trenutni tip podatka koji je
prosleen kao parametar. Npr. TypeName(Selection) e vratiti Line ako je selektovana linija, Range ako
je selektovana jedna ili vie elija itd Sledei kod e uveati vrednost u selektovanim elijama samo ako
je zaista i selektovan opseg elija (tj. Range):
Sub Uvecaj()
If TypeName(Selection) = "Range" Then
For Each C In Selection
C.Value = C.Value + 1
Next C
End If
End Sub
Kada smo utvrdili da se radi o objektu eljenog tipa, moemo tu informaciju koristiti da radimo sa
promenljivima koje su tano definisanog tipa:
Sub Uvecaj()
If TypeName(Selection) = "Range" Then
Dim c As Range
For Each c In Selection
c.Value = c.Value + 1
Next c
End If
End Sub
Sada kad god budemo koristili c u kodu imaemo sve prednosti toga to tano znamo koje osobine i
metode c podrava kad stavimo taku iza c dobiemo kompletan listing, zato to je c tano
odreenog tipa Range.
UserForms
UserForms su zapravo Windows prozori iji izgled i ponaanje mi definiemo. Koristimo ih da bi dobili
informacije od korisnika, i za lake kontrolisanje korisnikovog unosa, i bilo ta drugo to inae ne bi mogli
da dobijemo upotrebom standardnih Excel funkcija, ili upotrebom naih makroa.
Pravljenje UserForms prozora se vri u dve faze: prvo rasporeujemo sve elemente po prozoru: tekst,
dugmie, checkBox-ove, opcije, itd..., a zatim piemo makroe kojima definiemo kako e se koji element
ponaati (npr, ta treba uraditi ako klikne dugme OK, ta ako klikne Unesi itd...).
23
dva moda rada: design u kome dodajemo i menjamo elemente; i runtime kada se prozor prikazuje
korisniku, tj. izvrava se.
Dobijamo ekran koji predstavlja radnu
povrinu za na nov ekran na slici je
predstavljeno
spoljanjim
prozorom
UserForms.xls UserForm1 (UserForm).
Unutar tog prozora mi definiemo izgled
naeg prozora koji emo u daljem tekstu
zvati radnom povrinom (na slici predstavljeno prozorom Izmena selektovane kolone). Kad se prvi put kreira UserForms ovaj
prozor e biti prazan. Popunjavamo ga
koristei elemente prikazane u Toolbox-u:
element koji elimo da koristimo prostim
prevlaenjem smestimo na radnu povrinu. Ako zaustavimo kursor mia iznad kontrole, pojavie se naziv
kontrole. Mi emo u ovom kursu raditi samo sa vrstama kontrola koje su izlistane u tabeli. Svaka
kontrola ima svoj set osobina (properties) koje menjamo u Properties prozoru (View->Properties, ili F4).
Najbitnije osobine su date uz svaku kontrolu u tabeli.
Kontrola
Opis
Bitan property
Label
Caption
TextBox
CheckBox
Kutija za tikliranje
OptionButton
ToggleButton
Frame
CommandButton
Dugme za
ukljuivanje/iskljuivanje
Kontrola ija jedina
uloga je da u sebi uva
druge kontrole
Glavni hvata dogaaja
Komentar
Najee se koristi da opie
korisniku ta se trai od njega,
funkciju prozora, dodatna
pojanjenja i sl.
Tekst koji korisnik unese moe biti
bilo koji niz karaktera, o emu treba
voditi rauna pri upotrebi ove
vrednosti u kodu
Najee koristimo kad treba da
dobijemo da/ne odgovor od
korisnika.
Za svaku opciju dodajemo poseban
option button, a korisnik na jednom
prozoru moe da izabere samo
jednu. Ukoliko nam treba vie
grupacija za opcije na istom prozoru,
moemo ih grupisati po frejmovima
Slina upotreba kao CheckBox,
samo sa drugaijim izgledom
Caption
24
Sve kontrole koje dodajemo na UserForm imaju vie osobina koje su im zajednike, od kojih su ovde
izlistane neke najbitnije/najkorisnije:
Sve elemente smo reali na UserForm koji sam po sebi sadri neke osobine od kojih emo samo izdvojiti
Caption (naslov prozora), i StartUpPosition mesto gde se forma pojavljuje na ekranu prilikom
prikazivanja. Identifikator prozora naveden sa (Name) za sada stoji podeen na UserForm1, mada bi
mogli da ga promenimo npr. na frmUnos, ili slino.
Kodiranje ponaanja
Prvo emo napisati kod koji e prikazivati formu koju smo prethodno napravili. Taj kod piemo u modulu
gde smo i ranije pisali makroe. Za prikaz ekrana koristi se njegova Show metoda, na sledei nain:
Sub prikazi()
UserForm1.Show
End Sub
Ovaj makro moemo da pokrenemo na standardni nain, kao i bilo koji makro koji smo pokretali ranije
(npr, pozicioniranjem bilo gde na kod i pritiskom na F5 (odnosno klikom na play)). Kad se pokrene,
prikazae se forma koju smo malopre napravili. Obzirom da nismo iskodirali nikakve akcije za dugmie,
oni nee reagovati na klik. Na sledei zadatak je da napiemo kod kojim emo obraditi ponaanja
dugmia.
25
U VBE-u otvoriti UserForms, i duplim klikom na dugme koje je tu postavljeno otvoriemo kod koji e se
izvravati kada korisnik klikne na dugme.
Automatski e se ispisati format koda koji odgovara
kliku na dugme. Sve to napiemo ovde e se izvriti
kada korisnik klikne na dugme.
Dogaaj (Event) za
izabranu kontrolu
Dodaemo sada kod za Odustani dugme koji samo treba da zatvori prozor bez ikakve obrade:
Private Sub cmdOdustani_Click()
Unload UserForm1
End Sub
Unload je metoda kojom se unitava objekat koji je specificiran u ovom sluaju navodimo identifikator
naeg prozora UserForm1.
Ovde smo tekstu Uneli ste dodali tekst koji je napisan u txtBroj.Text osobini, i sve to ispisali kao poruku
korisniku. Na slian nain moemo oitati bilo koju osobinu bilo koje kontrole.
Takoe, dok piemo kod za UserForm mi imamo i kompletan pristup standardnim objektima
Worksheet, ActiveCell, Selection itd Ako bi hteli da menjamo trenutno selektovane elije, od korisnika
moemo zahtevati da prvo selektuje neki opseg pre nego to nastavimo dalje, i slino.
26
Worksheet Events
Otvorite Visual Basic Editor (VBE) i u Project prozoru duplim klikom na ime sheet-a otvorite njegov kod
(npr. Sheet1). Prikazuje se standardni prozor za kod, gde moemo da selektujemo objekat i odreeni
dogaaj u njemu. Po default-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 piemo nae procedure i
funkcije. Meutim, u Object box-u pored General moemo izabrati Worksheet kao objekat i tom prilikom
automatski se bira default dogaaj za njega SelectionChange (tj. promena trenutne selekcije, odnosno
trenutak kad korisnik klikne na drugu eliju npr. Promena selekcije podrazumeva da se radi sa elijama
kada se selektuju grafiki elementi linija, kvadrat i sl. dogaaj se ne pali). U ovom kodu imamo
sledeu definiciju procedure, koju principijelno nikad ne bi trebali da menjamo:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Kljuna re Private ograniava vidljivost ove procedure na Sheet u kome trenutno radimo, tj. za koji
piemo kod ovo je tipino za bilo koji Event kod koji piemo. Posle kljune rei Sub ide ime objekta za
koji je dogaaj definisan, koji je donjom crtom odvojen od naziva dogaaja. Ono zbog ega je ovaj
dogaaj razliit od neeg to smo do sada radili je u tome to poseduje svoj parametar procedure
naveden u zagradama. Kada procedura za dogaaj ima parametar onda e taj parametar uvek dobiti
vrednost koja je relevantna za dogaaj u sluaju SelectionChange dogaaja, relevantna informacija je
novi opseg koji je selektovan. Koristei taj parametar, moemo na primer napisati sledei kod koji e
ispisivati adresu trenutno selektovanog opsega u eliju A1:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range("A1").Value = Target.Address
End Sub
27
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 poslednji red procedure ukljuuju i iskljuuju osobinu Excel-a da reaguje na dogaaje pomou
osobine Application.EnableEvents. Ovo je potrebno ukoliko u proceduri Proracunaj menjamo neku
eliju iz opsega Podaci ako ne bi iskljuivali dogaaje, u tom trenutku bi se ponovo aktivirao Change
dogaaj, koji opet poziva proceduru koja opet menja sadraj, i tako u krug dobijamo beskonanu petlju
(ukoliko vam se ovo dogodi, izvravanje moete prekinuti sa Esc tasterom).
Funkcija Intersect vraa presek dva opsega. Ako se opsezi ne presecaju, vraa poseban Excel tip Nothing
koji je zapravo specijalna vrednost koja se koristi za poreenje sa objektima (slino kao to se nula koristi
u poreenju sa brojevima, tako i Nothing moe da se koristi pri poreenju sa objektima ali se umesto
znaka jednakosti koristi kljuna re Is). Ukoliko presek nije prazan, pozivamo proceduru za obradu
Proracunaj. Obzirom da smo ve iskljuili reagovanja na dogaaje, ne moramo da vodimo rauna koje
elije menjamo u toj proceduri, i da li e nastupiti beskonana petlja.
Treba voditi rauna o tome da ako obriemo neki worksheet, ujedno briemo i sve dogaaje koje smo za
njega pisali.
Workbook Events
Workbook je optiji od worksheet-a zato to on sadri sve worksheet-ove. U njemu moemo uhvatiti
dogaaje kao to su na primer otvaranje dokumenta (Open), dodavanje novog Sheet-a (NewSheet), itd
Jedan primer za dogaaj BeforePrint bi bio sledei:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
vr = MsgBox("Da li ste promenili footer da sadri brojeve stranica?", _
vbYesNo, "Podsetnik")
If vr = VbMsgBoxResult.vbNo Then
Cancel = True
End If
End Sub
Ovaj kod se izvrava svaki put pre tampe (bilo PrintPreview, bilo pravi Print). Ovaj primer je uzet zbog
parametra koji sadri Cancel As Boolean. Ovaj parametar je u vezi sa dogaajem i ima default
vrednost True koja odreuje da tampanje treba da se izvri. Ako ga promenimo na False unutar naeg
koda, prekinuemo izvravanje tampe. Slino korienje ete verovatno sretati i kod drugih dogaaja.
28
U njemu su izlistane skoro sve kontrole koje smo koristili i za pravljenje UserForms ekrana. Pored njih
imamo jo nekoliko:
-
Design Mode: prebacivanje i mod za editovanje, i za izlazak iz tog moda. Dok je ovo aktivno.
dugme izgleda utisnuto i moemo menjati sve kontrolne elemente koje smo dodali na sheet.
Kada je deaktivirano onda kontrole izvravaju funkciju koju smo im definisali u design modu.
Properties: Koristi se kada smo u design modu za promenu osobina kontrola (slino kao i pri
dizajnu UserForms ekrana)
ViewCode: Moe se kliknuti samo dok smo u design modu. Prikazuje kod koji se nalazi iza
dugmeta, ili bilo koje druge kontrole. Slino kao i u UserForms, kod moemo videti i duplim
klikom na kontrolu.
More Controls: Izlistava sve ActiveX kontrole koje su instalirane u Windows-u. Na ovaj nain uz
malo poznavanja kontrola unutar worksheet-a moete dodati video klip, otvoriti pdf dokument
itd...
Kao primer, probajte da dodate jedan CommandButton, i promenite njegov property Caption tako da na
njemu pie: Pokreni obradu. Sada, duplim klikom na dugme (u design modu) otvorie se kod i to u
Sheet-u u kome se nalazi dugme (a ne u modulu), i napravie se standardna procedura za obradu
dogaaja. Ovde moemo sada unositi neki makro kao to smo i ranije pisali u obinim makroima. Na
primer, moemo i prikazati neku UserFormu:
Private Sub CommandButton1_Click()
UserForms1.Show
End Sub
Da bi ste isprobali kako dugme funkcionie, iskljuite design mod klikom na odgovarajue dugme u
toolbar-u. Ako elite ponovo da vrite neke izmene na kontroli, morate ponovo ui u design mode.
29
Obrada greaka
Kada nastupi greka u VBA kodu automatski se zaustavlja izvravanje i prikazuje se deo koji je
problematian. Postoje situacije kada znamo da neka komanda moe izazvati greku, i umesto da
prekidamo izvravanje elimo da obradimo greku na neki nain i da nastavimo dalje. Da bi ovo ostvarili
postoji vie naina. Upotrebu emo objasniti na sledeem primeru. U ovom primeru greka moe
nastupiti u vie sluajeva: npr. prilikom pokretanja makroa nije selektovana elija nego neki grafiki
element, ili u eliji A1 pie 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 izvravanje i sledeih redova
greska:
MsgBox "Doslo je do greske: " & Error()
On Error GoTo 0
End Sub
On Error GoTo linija ako doe do greke prebaci se na
30
resetuje prethodno ponaanje, tako da kada nastupi greka negde drugde u kodu,
ne idemo stalno na liniju greska:, ve se primenjuje standardni nain rada sa grekama.
On Error GoTo 0
Bitno je primetiti da pre labele za obradu greke stoji Exit Sub to znai da ako smo doli do te linije
prekidamo dalje izvravanje procedure. Da kojim sluajem nismo stavili Exit Sub, procedura bi nastavila
sa izvravanjem, i izvrio bi se kod koji ispisuje Dolo je do greke, bez obzira to greke nema.
Jo jedan nain obrade greaka je: On Error Resume Next ako nastupi greka ignoriemo red u kome
je nastala i nastavljamo izvravanje sa sledeom linijom. Npr, u gornjem primeru, ako je nastupila greka
pri radu sa Selection objektom, nastaviemo kod i pokuati da izmenimo eliju A1.
31
Zatita koda
Slino kao to moemo da zatitimo worksheet, tako moemo da zatitimo i sav kod koji piemo tako da
ne moe da se vidi i menja bez ukucavanja ifre.
Kliknite desnim dugmetom na ime projekta u Visual Basic Editoru (npr. VBAProject (Book1)), i izaberite
Properties. Dobiete sledei ekran:
tiklirajte Lock Project For Viewing i unesite ifru koja je obavezna. Da bi zatita postala aktivna,
sauvajte dokument, zatvorite ga i probajte ponovo da ga otvorite. Dokument e se otvoriti bez
problema, moete menjati worksheet, a ak je dozvoljeno i da se pokreu makroi. Meutim, ako neko
pokua da otvori VBA kod, od njega e se traiti da ukuca ifru kojom je taj kod zatien.
- Kraj kursa -