Professional Documents
Culture Documents
1 Cas Predavanje1 PDF
1 Cas Predavanje1 PDF
KROZ
APLIKACIJE
Doc. dr ukanovi Slobodan
SNOVE VBA
Visual Basic je programski jezik visokog nivoa razvijen iz jezika BASIC (Beginner's Allpurpose Symbolic Instruction Code). Sam BASIC je nastao 1964.-te godine. Planirano je da to
bude jednostavan jezik za uenje programiranja, tj. da priblii programiranje korisnicima koji
nisu imali veliko matematiko predznanje i nisu bili zainteresovani da ga steknu. Dizajneri su
eleli da to ak bude i poetni korak u savladavanju monijih jezika kao to su FORTRAN ili
ALGO.
Od svog postanka, BASIC se razvijao i poboljavao. U svojim ranim implementacijama, BASIC
je bio interpreter. Kod interpretera se svaka linija programa zasebno tumai i ovakvo izvravanje
je obino sporo. Druga mana interpretera je da oni nemaju izvrni kod, odnosno za tumaenje
programa neophodno je posedovati odgovarajui program za interpretiranje. Programski paket
Matlab radi takoe kao interpreter. Veina modernih dijalekata BASIC-a dozvoljava
kompajliranje koda to rezultuje u brem mnogo izvravanju koda.
BASIC je dobio na popularnosti 1991.-e kada je Microsoft pustio Visual Basic for Windows koji
je popularizovao razvoj samostalna (standalone) aplikacija za Windows. Visual Basic for
Applications (VBA) predstavlja implementaciju Visual Basic-a.
Prvi softverski proizvod koji je koristio VBA bio je Excel 5. VBA je vrlo brzo bio prihvaen i
stari makro jezik koji je koristio Excel 4 je bio potisnut. U druge aplikacije Office-a, tj. Word,
Access, Power Point, Outlook, VBA je uao u paketu Office 97. Sa pojavom Front Page-a, VBA
postaje i njegov deo. tavie, VBA je izaao iz Microsoft Office okvira i biva ukljuen u Adobe,
AutoCAD, Visio, SolidWorks itd. Postoje male razlike u nainu implementacije VBA u
razliitim aplikacijama, ali se veinom koristi isti jezik, kao to je VB6, i iste biblioteke. Ono to
se menja je skup objekata odreene aplikacije. Ukratko, VBA moe biti ugraen u aplikacije
koje koriste COM (Component Object Model) objekte. COM je Microsoft-ov standard za
definisanje interfejsa izmeu objekata. Klju u korienju VBA sa drugim aplikacijama lei u
razumevanju objektnog modela aplikacije. VBA radi sa objektima aplikacije i svaka aplikacija
(Word, Excel, Visio) ima svoj jedinstveni objektni model.
VBA programski kod je smeten u samom dokumentu (Word dokumentu ili Excel tabeli) i to u
kodnim modulima, modulima klasa i korisnikim formama. Unutar kodnog modula se nalaze
procedure, dok modul klasa sadri definicije korisniki definisanih klasa. Korisnika forma
predstavlja prozor na kojem se obine nalaze razne korisnike kontrole (dugmad, meniji, liste
itd.). Mi emo uglavnom raditi sa kodnim modulima i korisnikim formama.
VBA programski kod se unosi u formi procedure. Procedure delimo na subprocedure (komandni
makroi) i funkcije. Subprocedure predstavljaju skup VBA naredbi kojima se izvrava odreeni
zadatak i one ne vraaju nikakav rezultat. Sa druge strane, funkcija takoe izvrava odreeni
zadatak i pritom vraa rezultat. Pored ove dve vrste, postoje jo i Property procedure koje slue
da definiu ili vrate osobinu (property value) za odreeni objekat. Osobina moe biti visina,
irina, boja itd.
Ukratko o VBA
Kao to rekosmo, VBA radi sa objektima same aplikacije. Na primer, objekti kod Excel-a mogu
biti radna sveska (workbook), radni list (worksheet), opseg (range), mapa (chart) itd. Klase
objekata su hijerarhijski ureene. To znai da objekti mogu sluiti kao kontejneri za druge
objekte. Na primer, Excel je objekat Application i on sadri druge objekte, kao to su Workbook
ili CommandBar. Objekat Workbook sadri objekte Worksheet i Chart. Objekat Worksheet
sadri objekte Range, PivotTable itd.
Slini objekti formiraju kolekciju. Na primer, kolekcija Worksheet se sastoji od svih radnih
listova u datoj svesci. Kolekcije za sebe predstavljaju objekte.
Referenciranje odreenog objekta u hijerarhiji se vri korienjem operatora taka (.) koji slui
kao separator izmeu kontejnera i lana. Na primer, referenciranje sveske Book1.xls se vri na
sledei nain:
Application.Workbooks("Book1.xls")
Na sreu, ne mora se koristiti ovoliki zapis svaki put za datu eliju. Ukoliko znamo da je Sheet1
aktivan list aktivne sveske Book1, gornji zapis se moe redukovati na
Range("A1")
Objekti imaju osobine. Na primer, osobine opsega kao objekta mogu biti Value i Type. Pomou
VBA se mogu menjati osobine objekta. Referenciranje osobina se vri kombinovanjem objekta i
odreene osobine uz pomo operatora taka. Na primer, osobina Value elije A1 sveske Sheet1
se moe referencirati sa
Worksheets("Sheet1").Range("A1").Value
Kao i svi moderni programski jezici, VBA poseduje sloene tipove podataka, instrukcije za
kontrolu toka programa, tj. naredbe uslovnog izvravanja i cikluse, itd. O VBA sintaksi e biti
najvie rei u delu sa Excelom. Sintaksa se, naravno, ne menja u zavisnosti od aplikacije.
PROGRAMIRANJE EXCEL-A
Za ilustraciju rada sa VBA emo koristiti Excel 2003.
Project Explorer prozor prikazuje strukturu svih trenutno otvorenih radnih sveski u Excel-u.
Svaka radna sveska predstavlja jedan projekat. Ukoliko ovaj prozor nije vidljiv, moe se otvoriti
koristei stavku View iz linije menija ili pomou preice Ctrl+R.
Code prozor (kodni prozor) sadri VBA kod. Svaka stavka iz Project Explorer prozora ima
pridrueni kodni prozor, koji se aktivira dvoklikom na odreenu stavku ili pomou opcije View
Code iz padajueg menija koji se dobija desnim klikom na odreenu stavku. Na slici 1. je
prikazan kodni prozor modula Module1, gde je definisana funkcija koja sabira prvih deset
pozitivnih celih brojeva.
Za direktno izvravanje VBA naredbi najbolje je koristiti Immediate prozor. On moe biti vrlo
koristan u ispravljanju vaeg koda jer pomou njega moete testirati napisane procedure korak
po korak. Ukoliko ovaj prozor nije vidljiv, moe se otvoriti koristei stavku View iz linije menija
ili pomou preice Ctrl+G. Primer korienja ovog prozora je dat na slici 1. Ako elimo da
dobijemo numeriku vrednost nekog izraza, koji moe sadrati i poziv korisnike funkcije, linija
koja se izvrava mora zapoeti znakom pitanja (prve tri naredbe sa slike 1.). Inae, dovoljno je
napisati samo naredbu bez znaka pitanja (naredba Workbooks.Add sa slike 1.).
Properties prozor prikazuje osobine trenutno izabranog objekta u Project Explorer prozoru.
Ukoliko ovaj prozor nije aktivan, aktivira se opcijom ViewProperties Window.
Rad sa modulima
Ukoliko elimo da nai makroi budu dostupni u svim radnim listovima radne sveske, potrebno ih
je snimiti u okviru modula, kao to je to prikazano na slici 1. Dodavanje novog modula se vri
pomou opcije InsertModule.
Brisanje modula se vri odabirom opcije Remove iz padajueg menija koji se dobija desnim
klikom na dati modul.
Eksportovanje modula radi korienja u drugim projektima se vri dabirom opcije Export File iz
padajueg menija koji se dobija desnim klikom na dati modul. Fajl eksportovanog modula ima
ekstenziju .BAS (Basic). Ovaj format koriste Visual Basic moduli, to znai da se eksportovani
VBA kod moe koristiti u Visual Basic projektima. U sutini, .BAS fajlovi su isto tekstualni
fajlovi i mogu se editovati u Notepad-u ili slinim tekst-editorima.
Importovanje modula (.BAS fajla) se vri pomou opcije FileImport File.
Promena imena modula se vri pomou Properties prozora, kao to je prikazano na slici 1.
Subprocedure
Subprocedure, ili komandni makroi, su najei tip procedura i one obino sadre komande koje
predstavljaju ekvivalent opcijama menija i drugim programskim komandama. Vana osobina
subprocedura je da, kao i obine programske komande, imaju uticaj na svoje okruenje. Na
primer, subprocedure mogu menjati format elije.
Subprocedure ne vraaju nikakvu vrednost!
Format subprocedura je sledei:
Sub ImeProcedure(argument1, argument2, ...)
VBA naredbe
End Sub
Subprocedure poinju reju Sub i zavravaju se sa End Sub. Ulazni argumenti subprocedure su
razdvojeni zarezima.
Prilikom davanja imena subproceduri moramo ispotovati par jednostavnih konvencija. Naime,
ime procedure ne moe biti due od 255 karaktera, prvi karakter mora biti slovo, a ostali
karakteri mogu biti slova, cifre ili karakter podvlaka (_). U imenu procedure nisu dozvoljeni
spejsovi i take! Na primer, dozvoljena imena subprocedura su
PromeniBoju, Para5, Debeli_lad
to se tie imena procedura, VBA nije case-sensitive, tj. ne pravi razliku izmeu velikih i malih
slova. Tako se imena PromeniBoju, Promeniboju i PROMENIBOJU odnose na istu proceduru.
Ispred kljune rei Sub u zaglavlju subprocedure se mogu nai i dodatne kljune rei koje
odreuju opseg subprocedure, tj. njenu vidljivost u odnosu na druge module u projektu. Tako se
ispred Sub mogu nai rei Private ili Public. Private oznaava da je procedura dostupna
samo procedurama iz istog modula, dok Public oznaava da je procedura vidljiva svim
procedurama iz svih ostalih modula projekta.
Nezavisno od Private i Public, ispred Sub se moe nai i kljuna re Static koja oznaava
da se promenljive u proceduri uvaju i nakon zavretka njenog izvrenja.
Izvravanje subprocedure se moe forsirano prekinuti korienjem instrukcije Exit Sub koja se
moe nai bilo gde u subproceduri.
U nastavku je data jedna jednostavna procedura koja ispisuje pozdravnu poruku.
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
VBA naredbe koriene u ovoj proceduri e biti objanjene kasnije. Napomenuemo samo da
linije koda koje poinju apostrofom (') predstavljaju komentar u VBA. Komentari mogu posluiti
za dokumentovanje procedure i VBA ih potpuno ignorie prilikom izvravanja koda.
Subprocedure se mogu izvriti na nekoliko naina. Izvrenje iz radne sveske, tj. bez ulaenja u
VBE, vri se odabirom opcije ToolsMacroMacros. U dobijenom prozoru odaberemo eljeni
makro (PocetnaPoruka u naem sluaju) i kliknemo na dugme Run. Pomou dugmeta Edit,
koje se nalazi na istom prozoru, moemo startovati VBE da bi editovali na makro. Za ovako
izvrenje subprocedure, ista ne sme imati ulaznih argumenata.
Iz prozora VBE, makro se moe izvriti koristei Immediate prozor. Ukoliko subprocedura nema
argumenata, potrebno je napisati samo njeno ime (bez znaka pitanja). Ukoliko subprocedura ima
argumenata, argumente navesti u zagradi, kao to je dato u samoj definiciji subprocedure. Drugi
nain izvrenja iz prozora VBE je pomou Debug palete alatki. Pozicioniramo se kursorom u
kod subprocedure i pritisnemo dugme Run Sub/User Form. Slino kao u prethodnom sluaju,
za ovako izvrenje, subprocedura ne sme imati ulaznih argumenata.
Funkcije
Drugi esto korieni tip procedura su korisniki definisane funkcije, koje rade slino kao i
ugraene Excel-ove funkcije (na primer, SUM ili PRODUCT). Osnovna karakteristika im je da
primaju argumente, odrade odreenu operaciju sa njima i vrate rezultat. Iako mogu uticati na
izgled okruenja, dobro definisana funkcija ne bi trebalo da utie na svoje okruenje.
Sintaksa korisnikih funkcija je sledea:
Function ImeFunkcije (argument1, argument2, ...) as Tip
VBA naredbe
ImeFunkcije = VracenaVrednost
End Function
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 elije radnog lista, kao to je to prikazano na
slici 2.
Promenljive u VBA
VBA sadri veliki broj tipova promenljivih. Dajemo u nastavku spisak tipova promenljivih uz
kratak opis svake od njih.
Boolean
Boolean je promenljiva koja moe imati dve vrednosti, True (logiki tano) ili False
(logiki netano). Za postavljanje vrednosti Boolean promenljive se mogu koristiti
kljune rei 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
numeriku vrednost), True vraa -1, a False vraa 0. Sa druge strane, kada se numerika
vrednost konvertuje u Boolean vrednost, jedino 0 vraa False, a svi ostali brojevi
vraaju True. Boolean promenljiva zauzimaju dva bajta.
Byte
Ovaj tip podatka se koristi za smetanje manjih pozitivnih brojeva, od 0 do 255. Byte
promenljiva zauzima 1 bajt memorije, najmanje memorije u odnosu na bilo koji drugi tip.
Currency
Currency tip slui za rad sa novcem, odnosno tamo gde je vrlo vana tanost kalkulacija.
Podrava pozitivne i negativne brojeve veliine do 15 cifara sa leve strane decimalne take
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 od Single i Double tipova podataka, Currency tip je
taan, tj. nije zaokruen. Ovaj tip zauzima 8 bajtova.
Date
Ovaj tip podataka se koristi za smetanje datuma i vremena. Koristi osam bajtova. VBA
moe da radi sa datumima iz opsega 1.1.100.31.12.9999. i vremenom od 0:00:00 do
23:59:59. Dodeljivanje vrednosti Date promenljivoj se vri pomou karaktera taraba (#) sa
kojim poinje i zavrava se vrednost. Na primer, datum 14.9.2009. bi se u Date
promenljivu Danas uneo na bilo koji od sledeih naina:
Danas = #September 14, 2009#
Danas = #14/9/2009#
Vreme se unosi na slian nain, tj. pomou karaktera #. Na primer, Date promenljivoj Sad
se dodela vri na sledei nain:
Sad = #17:15 PM#
U Code prozoru, VBA konvertuje uneeni podatak u format datuma koji je sistemski
podeen. Na primer, ako unesete September 14, 2009, VBA e, verovatno, prikazati
9/14/2009. Slino, vreme 17:15 PM bi se verovatno konvertovalo u 5:15:00 PM.
Decimal
Decimal promenljive se smetaju kao 12-bajtni oznaeni celi brojevi skalirani
promenljivim stepenom broja 10. Stepen broja 10 odreuje broj decimalnih mesta broja i
varira od 0 do 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 podataka je podtip tipa Variant i nije tip podataka za sebe. To
znai da ne moete deklarisati promenljivu tipa Decimal.
Single
Single tip podataka je 4-bajtni tip koji radi sa brojevima u pokretnom zarezu (IEEE
format). Single moe da radi sa negativnim brojevima u opsegu od -3.4028231038 do
-1.40129810-45 i pozitivnih u opsegu od 1.40129810-45 do 3.4028231038.
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 od 1.7976931348623110308 do
-4.9406564584124710-324, i pozitivni brojevi od 4.9406564584124710-324 do
1.7976931348623210308.
Integer
Integer tip podataka je 2-bajtni tip podataka koji moe da radi sa cijelim brojevima iz
opsega od -32 768 do 32 767. Ovo je moda najee korieni tip VBA promenljivih jer
je dati opseg dovoljan za najvei broj zadataka.
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
String tip podataka slui za smetanje teksta. Stringovi mogu da sadre slova, brojeve,
Ovaj tip podataka VBA dodeljuje svim promenljivim iji tip nije eksplicitno deklarisan,
tako da e deklaracija tipa
Dim Indeks
Promenljive tipa Variant mogu da smetaju veinu ostalih tipova podataka, pri emu treba
voditi rauna o sledeim pojedinostima:
Ukoliko se ne navede tip promenljive, podrazumeva se tip Variant. Promenljive se, u sutini,
mogu deklarisati bilo gde unutar procedure. Jedino ogranienje je da deklaracija promenljive
mora prethoditi prvoj upotrebi te promenljive u proceduri. Ipak, dobra je praksa deklaraciju vriti
odmah na poetku procedure, tj. pre ostalih naredbi, jer na taj nain vrlo brzo moemo proveriti
pravilnost deklaracije svih promenljivih bez lutanja po kodu.
Deklarisanje vie promenljivih u jednoj liniji se vri tako to se deklaracije pojedinih
promenljivih odvajaju zarezima, na primer
Dim X As Integer, Y As Double, S as String
Ukoliko imate vie promenljivih istog tipa, tip se mora navesti za svaku promenljivu posebno.
Tako e linija
Dim X As Integer, Y As Integer
VBA operatori
Operator dodele vrednosti
Operator dodele vrednosti (=) je verovatno operator koji se najvie koristi. Izraz koji se nalazi sa
desne strane ovog operatora se izvri i rezultat se dodeljuje promenljivoj ili objektu sa leve strane
operatora. Na primer:
Dim X As Double, Y As Double
X = 2.3
Y = (X-1)^2 - 3
*
/
\
^
Mod
Operacija
Primer
Rezultat
10+4
14
Sabiranje
-10
-10
Negacija
10-5
5
Oduzimanje
10*7
70
Mnoenje
10/5
2
Deljenje
11\5
2
Celobrojno deljenje
10^3
1000
Stepenovanje
10 Mod 5
0
Modulo
Tabela 2. VBA aritmetiki operatori.
Operatori poreenja
Ovi se operatori koriste za poreenje dva broja, stringa, promenljive ili rezultata koje vraaju
funkcije. Ako je izraz taan, njegova vrednost je logiko True (ekvivalentno bilo kojoj
numerikoj nenultoj vrednosti); u suprotnom je False (ekvivalentno nuli). Operatori poreenja
kod VBA su dati u tabeli 3.
Operator
=
<>
>
>=
<
<=
Like
Ime
Primer
Rezultat
7=3
Jednako
False
7<>3
Razliito
True
7>3
Vee od
True
"a">="b"
Vee od ili jednako
False
"a"<"b"
Manje od
True
"a"<="b"
Manje od ili jednako
True
"Borba" Like "Bo?ba"
Like
True
Tabela 3. VBA operatori poreenja.
Logiki operatori
Logiki operatori se koriste za kombinovanje ili modifikovanje True/False izraza. Najee
korieni VBA logiki operatori su dati u tabeli 4.
Operator
And
Or
Xor
Not
Ime
Korienje
Rezultat
True ako su Izr1 i Izr2 True; u
Izr1 And Izr2
I
suprotnom False.
True ako je Izr1 ili Izr2 True; u
Izr1 Or Izr2
ILI
suprotnom False.
False ako su Izr1 i Izr2 True ili Izr1
Ekskluzivno ILI Izr1 Xor Izr2
i Izr2 False; u suprotnom True.
Not Izr
Negacija
False ako je Izr True i obrnuto.
Tabela 4. VBA logiki operatori.
Prvenstvo operatora
Tabela 5 daje prvenstvo operatora u VBA, tj. prvenstvo izvravanja odgovarajuih operacija, pri
emu su operatori sortirani od onih sa najveim prvenstvom (vrh tabele) do onih sa najmanjim
prvenstvom (dno tabele).
Operator
Operacija
^
Stepenovanje
Negacija
*i/
Mnoenje i deljenje
\
Celobrojno deljenje
Mod
Modulo
+iSabiranje i oduzimanje
&
Nadovezivanje
= < > <= >= <> Like Is Operacije poreenja
And Or Xor Not
Logike operacije
Tabela 5. Prvenstvo operatora u VBA.
Vraena vrednost
Apsolutna vrednost broja X.
Sinus broja X.
Kosinus broja X.
Tangens broja X.
Arkus tangens broja X.
Exp(X)
Log(X)
Sqr(X)
Sgn(X)
Fix(X)
Int(X)
Rnd()
If naredba
Ova se naredba koristi kada je potrebno izvriti jednu ili vie naredbi samo ako je zadovoljen
odreeni uslov. Najjednostavniji oblik ove naredbe je jednolinijski i izgleda
If Uslov Then Instrukcije Else Instrukcije2
Uslov moe biti bilo koja kombinacija logikih uslova, operacija poreenja ili numerikih
izraza. Ukoliko je taj uslov taan, tj. ima numeriku vrednost razliitu od nule, izvrie se
Instrukcije1, a u suprotnom e se izvriti Instrukcije2. Ovde je Else blok opcion, tj. ne
mora postojati ukoliko nema potrebe za njim. Daemo primer korienja obe verzije ovog oblika
If naredbe.
If (X Mod 2 = 0) Then MsgBox "Broj X je paran"
If (X Mod 2 = 0) Then MsgBox "Broj X je paran" Else _
U prvoj naredbi e biti ispisana poruka "Broj X je paran" ako je X paran broj, to se
proverava korienjem operatora Mod, i preie se na izvravanje prve sledee naredbe. U
sluaju da X nije paran broj nita se nee desiti, ve e se prei na izvravanje prve sledee
naredbe. U drugoj naredbi e biti ispisana poruka "Broj X je paran" ako je X paran broj, ili
poruka "Broj X je neparan" u suprotnom.
Postoji i drugi oblik ove naredbe koji se pie u vie linija. Njegova sintaksa je sledea:
If Uslov1 Then
Instrukcije1
ElseIf Uslov2 Then
Instrukcije2
...
ElseIf UslovN Then
InstrukcijeN
Else
PodrazumevaneInstrukcije
End If
I ovde su svi ElseIf i Else blokovi opcioni, tako da je najjednostavniji oblik ove naredbe
If Uslov Then
Instrukcije
End If
Uoimo postojanje rei End If koje oznaavaju kraj naredbe. U obliku If naredbe sa vie
linija, End If je obavezno.
U narednom primeru se ispituje vrednost promenljive koja sadri broj poena koje je student
dobio na ispitu i ispisuje ocenu koju je student dobio znajui da vai sledea veza:
A,
B,
C,
Ocena =
D,
E,
F,
BrojPeona 90
BrojPeona 80
BrojPeona 70
BrojPeona 60
BrojPeona 50
BrojPeona < 50.
Ovde TestniIzraz predstavlja izraz (najee jedna promenljiva) ija se vrednost proverava i
u zavisnosti od toga koji od izraza Izraz1, ...,IzrazN odgovara toj vrednosti izvravaju se
odgovarajue instrukcije. Prostije, TestniIzraz odreuje koje e se instrukcije izvriti. Reimo
prethodni primer sa ispisom ocene studenta pomou Select Case naredbe.
Poruka = "Student je dobio
Select Case BrojPoena
Case Is >= 90
Poruka = Poruka +
Case Is >= 80
Poruka = Poruka +
Case Is >= 70
Poruka = Poruka +
Case Is >= 60
Poruka = Poruka +
Case Is >= 50
Poruka = Poruka +
Case Else
Poruka = Poruka +
End Select
MsgBox Poruka
ocenu "
"A"
"B"
"C"
"D"
"E"
"F"
Primetimo upotrebu kljune rei Is da se specificira opseg vrednosti. Ako pretpostavimo da broj
poena moe biti samo celi broj, prethodna naredba bi se mogla napisati i na sledei nain:
Select Case BrojPoena
Case Is >= 90
Poruka = Poruka
Case 80 To 89
Poruka = Poruka
Case 70 To 79
Poruka = Poruka
Case 60 To 69
Poruka = Poruka
Case 50 To 59
Poruka = Poruka
Case Else
Poruka = Poruka
End Select
+ "A"
+ "B"
+ "C"
+ "D"
+ "E"
+ "F"
U ovom obliku smo koristili kljunu re To za specificiranje opsega. Ako je broj poena celi broj,
onda se
Case 80 To 89
gde navodimo sve mogue vrednosti koje moe uzeti promenljiva BrojPoena i razdvajamo iz
zarezima. Ovaj primer ba i ne opravdava upotrebu ovakvog naina zadavanja vrednosti, ali je
pogodan za ilustraciju.
Kljuna re Is moe i da kombinuje izraze, tako da se obuhvataju razliiti opsezi koji nisu
susedni. Izrazi se odvajaju zarezima. Na primer, sluajem
Case Is > 90, 33, 50 To 60
GoTo naredba
Najjednostavniji nain da se promeni sekvencijalni redosled izvravanja koda je pomou GoTo
naredbe. Ova naredba bezuslovno prebacuje izvrenje programa (jo se naziva i grananje) na
odreenu instrukciju u kodu procedure koja mora zapoeti labelom. Dakle, GoTo naredba ne
moe da grana van procedure. Labela je oznaka instrukcije i slui da jednoznano odredi
instrukciju na koju se ide naredbom GoTo. Labela moe biti tekstualni string praen dvotakom
(:) ili broj bez dvotake. U VBA proceduri moe postojati proizvoljan broj labela.
Naredbu GoTo bi trebalo koristiti to tedljivije ili ak ne koristiti je uopte. Razlog je u tekom
prepravljanju veih procedura koje sadre ovu naredbu. Na primer, GoTo se moe koristiti za
iskakanje iz petlji. Ova naredba naruava strukturnu organizaciju programa. Jedina upotreba koja
moe opravdati potrebu za ovom naredbom je upravljanje grekama (error handling), o emu e
vie rei biti kasnije.
U narednoj funkciji dajemo primer korienja GoTo naredbe.
Function RadSaPrirodnim(X As Integer) As Integer
Dim I As Integer
RadSaPrirodnim = -1
If X < 1 Then GoTo Greska
RadSaPrirodnim = 0
For I = 1 To X
RadSaPrirodnim = RadSaPrirodnim + I
Next I
Greska: Exit Function
End Function
Funkcija RadSaPrirodnim ima za ulazni argument celi broj X i treba da izvri odreenu
operaciju samo ako je X prirodan broj. Ukoliko X nije prirodan broj, funkcija vraa -1. Ovo smo
uradili pomou naredbe GoTo koja grana na labelu Greska, a ta labela odgovara instrukciji
forsiranog izlaska iz funkcije. Naravno, sve ovo se moglo uraditi i bez naredbe GoTo.
For-Next petlja
Kad-tad emo doi u situaciju da odreenu operaciju izvrimo odreeni broj puta, koji moe biti
unapred poznat ili zavisiti od vrednosti neke promenljive u kodu. Tada moramo koristiti cikluse
ili petlje. Najjednostavnija petlja je For-Next ija je sintaksa
For Brojac = Start To End Step Korak
Instrukcije
Next Brojac
Brojac je VBA promenljiva po kojoj se petlja izvrava uzimajui na poetku vrednost Start, a
zavravajui sa vrednou End. U ovoj petlji je opcion podatak Korak, koji predstavlja korak
promene vrednosti promenljive Brojac. Opcion je i zapis Next Brojac koji se moe skratiti
sa Next. Dajemo primer dve For-Next petlje.
S = 0
For I = 1 To 99
S = S + I
Next I
S = 0
For I = 1 To 99 Step 2
S = S + I
Next
Prvom petljom vrimo sabiranje svih prirodnih brojeva manjih od 100, a drugom svih prirodnih
neparnih brojeva manjih od 100. U oba sluaja je poetna vrednost promenljive I jednaka 1, a
krajnja 99, pri emu u prvoj petlji I uzima vrednosti 1,2,3,...,99, a u drugoj 1,3,5,...,99.
Forsirani izlazak iz For-Next petlje se vri pomou naredbe Exit For koja se moe smestiti
bilo gde unutar petlje. Kada se prilikom izvravanja naie na ovu naredbu, iz petlje se automatski
izlazi i prelazi na izvrenje prve naredbe nakon petlje.
Do While petlje
Do While predstavlja drugi tip petlji u VBA. Za razliku od brojake For-Next petlje, ova se
petlja izvrava sve dok je ispunjen odreeni uslov. Do While petlja moe uzeti jedan od sledea
dva oblika:
Do While Uslov
Instrukcije
Loop
ili
Do
Instrukcije
Loop While Uslov
While uslov se moe staviti na poetak ili na kraj petlje. Razlika izmeu ova dva oblika Do
While petlje je u trenutku kad se proverava tanost uslova. U prvom obliku se uslov proverava
odmah na poetku petlje i moe se desiti da se u petlju uopte ne ue. U drugom obliku se uslov
proverava na kraju petlje i petlja se izvrava minimum jedanput.
Forsirani izlazak iz Do While petlje se vri naredbom Exit Do.
Uradimo primer sa sabiranjem brojeva manjih od 100 koristei oba oblika Do While petlje.
S = 0: I
Do While
S =
I =
Loop
=
I
S
I
1
< 100
+ I
+ 1
S = 0: I = 0
Do
I = I + 1
S = S + I
Loop While I < 99
Moramo voditi rauna da se promenljiva od koje zavisi uslov izvrenja petlje menja tako da
jednog trenutka taj uslov ne bude zadovoljen. Ukoliko to nije ispunjeno, dobiemo beskonanu
petlju. U naem sluaju, promenljiva I raste dok ne postane 100 u sluaju prve petlje i 99 u
sluaju druge petlje. Dakle, pri izlasku iz petlje, promenljiva od koje zavisi uslov petlje ima prvu
vrednost za koju taj uslov nije zadovoljen.
Uoimo korienje dvotake radi grupisanja vie VBA instrukcija u jednu liniju.
Napomenimo i to da je deo While Uslov u sintaksi petlje opcion, tj. ne mora se navoditi uslov.
Tada se u petlji mora nai Exit Do radi izlaska iz petlje. Prethodni primer uraen koristei ovaj
oblik Do While petlje je dat ispod.
S = 0: I = 1
Do
S = S + I
I = I + 1
If I = 100 Then Exit Do
Loop
Do Until petlje
Ovaj tip petlje je vrlo slian Do While petlji, sa tom razlikom da se Do Until petlja izvrava
sve dok se ne ispuni odreeni uslov. Sintaksa ove petlje takoe dozvoljava proveru uslova petlje
na njenom poetku i na kraju.
Do Until Uslov
Instrukcije
Loop
ili
Do
Instrukcije
Loop Until Uslov
Petlja se u oba oblika izvrava sve dok uslov nije ispunjen. Kada se uslov ispuni, izlazi se iz
petlje i nastavlja sa prvom sledeom instrukcijom. Kod oblika sa proverom uslova na kraju,
petlja se izvrava bar jedanput.
Uradimo primer sa sabiranjem brojeva manjih od 100 koristei oba oblika Do Until petlje.
S = 0: I
Do Until
S =
I =
Loop
=
I
S
I
S = 0: I =
Do
I = I
S = S
Loop Until
1
= 100
+ I
+ 1
0
+ 1
+ I
I = 99