You are on page 1of 20

PROGRAMIRANJE

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")

Referenciranje lista Sheet1 sveske Book1 se vri kao


Application.Workbooks("Book1.xls").Worksheets("Sheet1")

Slino, referenciranje elije A1 lista Sheet1 se vri kao


Application.Workbooks("Book1.xls").Worksheets("Sheet1").Range("A1")

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

Ovako dobijena vrednost se kasnije moe dodeliti nekoj VBA promenljivoj.


Objekti imaju metode. Metod je akcija koja se izvrava nad objektom. Na primer, jedna od
metoda objekta Range je ClearContents, pomou koje se brie sadraj opsega. Pozivanje
metode se takoe vri pomou operatora taka, koji razdvaja objekat i metod. U prethodnom
sluaju bi imali
Range("A1").ClearContents

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.

Visual Basic Editor


Kod prvih verzija Excel-a koje su imale VBA na raspolaganju, tj. Excel 5 i Excel 95, VBA
modul se pojavljivao u formi zasebnog radnog lista. Poev sa Excel-om 97, VBA modulima se
pristupa korienjem Visual Basic Editora (VBE). Moduli su, naravno, sauvani zajedno sa
radnim sveskama, samo nisu vidljivi dok se ne startuje VBE.
VBE se ne moe startovati nezavisno od Excel-a, tj. Excel mora biti otvoren da bi VBE mogao
da se startuje. Najjednostavniji nain da se startuje VBE je koristei preicu Alt+F11. Drugi
nain bi bio pomou opcije ToolsMacroVisual Basic Editor. Startovanjem VBE dobija
ete dobiti neto slino prozoru prikazanom na slici 1.

Slika 1. Prozor Visual Basic Editor-a.

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

dok su nedozvoljena imena


5Para, Mirko&Slavko, Promeni boju

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

Funkcije se definiu u okviru modula.


Sintaksa funkcija je vrlo slina subprocedurama. 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 moe
navesti u zaglavlju funkcije, nakon zagrade sa listom argumenata. O tipovima VBA promenljivih
e biti rei kasnije.
Ispred kljune rei Function u zaglavlju funkcije se mogu nai rei Private ili Public.
Private oznaava da je funkcija dostupna samo procedurama iz istog modula, dok Public
oznaava da je funkcija dostupna svim procedurama iz svih modula svih aktivnih Excel-ovih
projekata.
Ispred Function se moe nai i kljuna re Static koja oznaava da se promenljive
deklarisane u funkciji uvaju izmeu poziva funkcija.
Slino kao kod subprocedura, izvravanje funkcije se moe prekinuti korienjem instrukcije
Exit Function. U tom sluaju je potrebno voditi rauna da je imenu funkcije, kao izlaznoj
promenljivoj, dodeljena vrednost pre instrukcije Exit Function.
Primer jedne korisnike funkcije, koja rauna kvadrat razlike dva uneta broja, je dat ispod.
Function KvadratRazlikeDveCelije(X As Double, Y As Double) as Double
Dim Z As Double
Z = (X - Y) ^ 2
KvadratRazlikeDveCelije = Z
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.

Slika 2. Izvrenje korisnike funkcije u okviru radnog lista.

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

U promenljivima tipa Object se smetaju adrese objekata. Dodeljivanje vrednosti


promenljivoj tipa Object se vri naredbom Set. Object promenljive zauzimaju 4 bajta.
String

String tip podataka slui za smetanje teksta. Stringovi mogu da sadre slova, brojeve,

blanko, interpunkcijske znake i specijalne karaktere. Postoje stringovi promenljive i fiksne


duine.
Stringovi promenljive duine mogu sadrati i do dve milijarde (tanije, 231) karaktera;
zauzimaju 10 bajtova plus memoriju koja je potrebna za smetanje stringa.
Stringovi fiksne duine mogu sadrati od jednog do 64 000 karaktera i oni zauzimaju samo
memorijski prostor potreban za smetanje stringa. Ako je podatak koji je dodeljen stringu
krai od fiksne duine, VBA dodaje stringu blanko znake da bi ga dopunio do fiksne
duine. Ako je podatak koji je dodeljen stringu dui od fiksne duine, VBA odseca deo
koji je suvian. VBA broji karaktere sa leve strane stringa. Na primer, ako dodelite string
Programiranje string promenljivoj fiksne duine od sedam karaktera, VBA e smestiti
samo podstring Program.
Variant

Ovaj tip podataka VBA dodeljuje svim promenljivim iji tip nije eksplicitno deklarisan,
tako da e deklaracija tipa
Dim Indeks

kreirati Variant promenljivu Indeks. Variant promenljiva se moe deklarisati i


eksplicitno, na primer
Dim Indeks as Variant

Promenljive tipa Variant mogu da smetaju veinu ostalih tipova podataka, pri emu treba
voditi rauna o sledeim pojedinostima:

Promenljive tipa Variant ne mogu sadrati stringove fiksne duine.


Promenljive tipa Variant sadre i etiri specijalne vrednosti: Empty (znai da
promenljiva nije inicijalizovana), Error (specijalna vrednost koja se koristi za
pronalaenje greaka u proceduri), Nothing (specijalna vrednost koja slui za
odvajanje promenljive od objekta za koji je bila vezana) i Null (koristi se da
oznai da promenljiva namerno ne sadri podatke).
Zbog svojih dodatnih mogunosti, Variant promenljive zauzimaju vie memorije
od ostalih tipova promenljivih. Variant promenljive koje sadre brojeve
zauzimaju do 16 bajtova, a Variant promenljive koje sadre karaktere zauzimaju
i do 22 bajta, plus memorijski prostor potreban za smetanje karaktera.

Deklaracija VBA promenljivih


Deklaracija predstavlja navoenje imena i tipa promenljive koju emo koristiti u programu.
Deklaracija se vri korienjem rei Dim, to je skraeno od Dimension, i moe se vriti unutar
procedure, kad dobijamo promenljivu proceduralnog opsega, ili se moe vriti na vrhu modula,
kada dobijamo promenljivu opsega modula. Tako se, na primer, celobrojna promenljiva X
deklarie na sledei nain:
Dim X as Integer

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

deklarisati X i Y kao celobrojne promenljive, dok e skraeni oblik


Dim X, Y As Integer

deklarisati Y kao celobrojnu promenljivu i X kao Variant promenljivu.


Ovakva deklaracija promenljivih, tj. korienjem rei Dim, se jo naziva i eksplicitnom
deklaracijom. Drugi nain je tzv. implicitna deklaracija, koja se vri kada promenljivu koristimo
u izrazu bez njenog prethodnog deklarisanja. Ako, na primer, promenljiva S nije deklarisana,
onda e izraz
S = "Ulcinjska solana"

deklarisati promenljivu S tipa Variant.


Prednost implicitne deklaracije je da ne morate da vodite rauna o deklaracijama, ve da
promenljive koristite kako vam zatrebaju (npr. kao u Matlab-u). Meutim, ovakva deklaracija
ima i svojih mana. Prva mana je da se lako moe napraviti greka kada se radi sa duim imenima
promenljivih. Pretpostavimo, na primer, da u proceduri implicitno deklariemo promenljivu
ProsekPlata, i da se kasnije grekom pozovemo na tu promenljivu kao ProsekPiata. VBA
ovo nee tumaiti kao greku, ve e implicitno deklarisati novu promenljivu koja nema veze sa
promenljivom ProsekPlata. Pri radu sa velikim programima, ovo moe biti veliki problem, jer
se, zbog slinosti imena promenljivih, greke teko pronalaze u umi izraza. Ovo se ne moe
desiti ako sve promenljive koje koristite u programu eksplicitno deklariete. Druga mana je ta da
Variant promenljive zauzimaju vie memorijskog prostora od ostalih tipova. Ova mana je
zanemarljiva kod malih programa, ali kod veih moe doi do izraaja, pogotovo kod slabijih
raunara, jer rad sa Variant promenljivim zahteva vie vremena od rada sa ostalim tipovima.
Razlog ovome je stalna provera vrste podataka smetene u Variant promenljivoj.
Pri implicitnoj deklaraciji moemo koristiti tzv. karakter za definiciju tipa (type-declaration
character) koji se nadovezuje na ime promenljive da definie njen tip. Karakteri za definiciju
tipa su dati u tabeli 1.
Tip promenljive Karakter za definiciju tipa
Integer
%
Long
&
Currency
@
Single
!
Double
#
String
$
Tabela 1. Karakteri za definiciju tipa.

Na primer, Double promenljivu Broj moemo implicitno deklarisati na sledei nain:


Broj# = 23.7

Eksplicitno deklarisanje se moe forsirati ekiranjem opcijom Require Variable Declaration


koja se nalazi na tabu Editor prozora ToolsOptions u VBE. VBE dodaje iskaz Option
Explicit u sve nove module, koji zahteva eksplicitnu deklaraciju promenljivih u tim
modulima.

Opseg VBA promenljivih


Svaka promenljiva ima svoj opseg, tj. module i procedure gde se promenljiva moe koristiti, i
trajanje (ili ivotni vek), koje definie vreme zadravanja te promenljive u memoriji. Trajanje
promenljive je usko vezano sa njenim opsegom.
U VBA, promenljiva moe 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, trajanje lokalne promenljive je ogranieno na trajanje same procedure.
Implicitno deklarisane promenljive imaju proceduralni opseg. Eksplicitno deklarisanje lokalne
promenljive se vri pomou kljunih rei Dim ili Static unutar procedure.
Privatni opseg
Promenljiva sa privatnim opsegom je dostupna svim procedurama modula gde se ona nalazi, ali
ne i procedurama iz drugih modula. Pomou ovih promenljivih, procedure iz modula mogu
meusobno komunicirati. Privatne promenljive zadravaju svoju vrednost sve dok je predmetni
projekat otvoren.
Privatne promenljive se deklariu pomou kljunih rei Dim ili Private na poetku modula,
ispred prve procedure u modulu.
Re Private se ne moe se koristiti unutar procedure i jasnije je koristiti nju, a ne Dim, za
deklarisanje privatnih promenljivih.
Javni opseg
Promenljiva sa javnim dosegom je dostupna svim procedurama u svim modulima u projektu koji
je sadri.
Javne promenljive se deklariu korienjem kljune rei Public ispred prve procedure u
modulu.

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

Uoimo da izraz tipa


2.3 = X

nije dozvoljen jer se u konstantu 2.3 ne moe upisati vrednost.


Aritmetiki operatori
VBA podrava rad sa standardnim aritmetikim operatorima. Tabela 2 sumira ove operatore.
Operator
+

*
/
\
^
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.

O operatoru Like e biti vie rei u nastavki.

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.

Matematike funkcije u VBA


U tabeli 6 je dat spisak najee korienih matematikih funkcija u VBA.
Funkcija
Abs(X)
Sin(X)
Cos(X)
Tan(X)
Atn(X)

Vraena vrednost
Apsolutna vrednost broja X.
Sinus broja X.
Kosinus broja X.
Tangens broja X.
Arkus tangens broja X.

Eksponent broja X, tj. eX.


Prirodni logaritam broja X.
Kvadratni koren broja X.
Znak broja. Vraena vrednost je 1 ako je X>0,
1 ako je X<0 i 0 ako je X=0.
Ceo deo broja X. Ako je X<0, Fix vraa prvi
negativni broj vei od ili jednak X.
Ceo deo broja X. Ako je X<0, Int vraa prvi
negativni broj manji od ili jednak X.
Sluajan broj izmeu 0 i 1.

Exp(X)
Log(X)
Sqr(X)
Sgn(X)
Fix(X)
Int(X)
Rnd()

Tabela 6. Matematike funkcije u VBA.

Kontrola toka programa


Jednostavnije VBA procedure se izvravaju sekvencijalno, tj. naredbe se izvravaju redom, jedna
za drugom. Jedan primer sekvencijalnih procedura su makroi koji se snimaju opcijom
ToolsMacroRecord New Macro. esto se, meutim, zahteva da se u proceduri izvri jedna
radnja ako je ispunjen neki uslov i druga u suprotnom. Ili da se odreena radnja ponovi odreeni
broj puta koji zavisi od unosa korisnika. Tada nam isto sekvencijalno izvravanje ne moe
zavriti posao.
VBA poseduje veliki broj naredbi za kontrolu toka programa, koje su uglavnom dosta sline
onima iz drugih programskih jezika. Tu ubrajamo:
If naredbu
Select Case naredbu
GoTo naredbu
For-Next petlju
Do While petlje
Do Until petlje
Opisaemo svaku od njih.

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 _

MsgBox "Broj X je neparan"

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.

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

Uoimo iz ovog primera da se operator sabiranja moe koristiti i za nadovezivanje stringova.

Select Case naredba


Select Case naredba je korisna za odabir izmeu 3 ili vie opcija, mada radi i sa manje i
dobra je alternativa If naredbi. Select Case ima sledeu sintaksu:
Select Case TestniIzraz
Case Izraz1
Instrukcije1
...
Case IzrazN
InstrukcijeN
Case Else
PodrazumevaneInstrukcije
End Select

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

moe zapisati i kao


Case 80, 81, 82, 83, 84, 85, 86, 87, 88, 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

bi se obuhvatili brojevi vei od 90, broj 33 i brojevi izmeu 50 i 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

Forsirani izlazak iz Do Until petlje se takoe vri naredbom Exit Do.

You might also like