Professional Documents
Culture Documents
care
Franka Miriam Bruckler
1
Uvod
Zelimo
li pristupiti nekom objektu i raditi s njim, puno ime mu se sastoji
od niza imena objekata (kolekcija) koji se nalaze nad njim u toj strukturi (i
1
1 Uvod
Application.Workbooks("Book1.xls").Worksheets("Sheet1").Range("A2")
opisuje celiju A2 u Sheet1 u Book1.xls. Ipak, Application se podrazumijeva pa ga ne moramo pisati, a u pravilu ne treba pisati ni Workbooks (ako
ne pise, podrazumijeva se rad s aktivnim workbook). Ukoliko izostavimo i
Worksheet, radit ce se s aktivnim worksheet-om (oprez, mogucnost gresaka!).
Svaki objekt ima svoja svojstva ( kakav je objekt?) koja mozemo pode
siti putem VBA. Recimo, workheet moze biti vidljiv ili ne (Sheets(SuchandSuch).Visible
= True), font moze biti bold (Selection.Font.Bold = True), celija moze sadrzavati
vrijednost ili formulu (Activecell.Value = 10, Activecell.Formula = =A1+B2),
itd. Metode su akcije s objektima; npr. mozemo htjeti zatvoriti aktivni workbook ili kopirati sadrzaj celije (ActiveWorkbook.Close, ActiveCell.Copy). I
metode, kao i svojstva, variraju za razlicite objekte. Pod funkcijama misli se
na Excelove funkcije poput NOW(). Naredbe su vise-manje standardni tipovi
instrukcija: IF...THEN, DO...LOOP, FOR...NEXT, WITH...END WITH,
EXIT FOR, EXIT DO, EXIT SUB
Da bi se pokrenula i izvela procedura, mora se desiti dogadaj (Event),
recimo pritisak na gumb.
Workbook je Excel file (ime.xls). Objekt
ThisWorkbook
je workbook unutar kojeg pisemo proceduru. Ako napisemo
ThisWorkbook.Close
zatvorit cemo ga. Svaki Workbook sastoji se od najvise 256 worksheets,
svaki sa 65536 redova i 256 stupaca (Excel 2007 dozvoljava 1000000 redova
u worksheetu).
Npr.
Worksheets("printanje3").Range("a1:e13").PrintOut
ispisuje pravokutni dio celija od A1 do E13 iz worksheet-a printanje3.
Uz sve ovo postoje i UserForms i Controls. UserForms su posebne vrste
sheet-ova koje omogucuju korisniku da unese neke vrijednosti (parametre).
Sub proTest ()
Range("A2").Value= 2
ThisWorkbook.Save
ThisWorkbook.Close
Application.Quit
End Sub
Sub ime()
EndSub
Taj kraj se automatski dodaje ako nakon prve linije nekoliko puta stisnemo Enter. Procedure izvodimo pritiskom na F5. Ukoliko zelimo da se u
nekom trenutku prekine izvodenje procedure, odgovarajuca naredba je
Exit Sub
Svaka naredba u VBA mora biti u jednom redu. Ako se desi da moramo
koristiti prijelom reda, onda se prije prijelaza u novi red treba staviti
_
(space i underscore).
VBA ne razlikuje velika i mala slova tj. ime i Ime su jednaka imena
varijabli.
Komentari zapocinju znakom i protezu se na ostatak reda u kojem je to
znak:
Ovo je komentar.
Jedini slucaj kad se apostrof ne interpretira kao pocetak komentara je
ako se nalazi izmedu dvostrukih navodnika.
Osim procedura tipa Sub, VBA poznaje i one tipa Function. One primaju
neke parametre i vracaju tocno jednu vrijednost (usporedite s matematickim
pojmom funkcije).
2.1
Tipovi podataka
2.2
Varijable
Zelimo
li se prisiliti na deklaraciju varijabli (sto je vrlo preporucljivo,
npr. jer onda VBE otkrije greske u pisanju), prije prve procedure u modulu
stavljamo
Option Explicit
Varijable se deklariraju ovako:
Dim <ime_varijable> (As <tip>)
Dim x, y As Integer
Dim a As String, b As Date
rezultat je da ce x biti tipa Variant. Deklaracije varijabli mogu biti na
nivou procedure (u pravilu na pocetku iste) - tada varijable zive samo za
vrijeme izvodenja iste; na nivou modula (deklaracija prije prve procedure) ili
pak dostupna svim procedurama u workbook-u (deklaracija s Public).
Poseban slucaj su Static-varijable. One su varijable na nivou procedure,
ali im se vrijednost ne resetira (memorija se ne oslobada) po zavrsetku iste.
Deklariraju se ovako:
Static <ime_varijable> (As <tip>)
Konstante su isto sto i varijable s fiksiranom vrijednosti. Deklariraju se
sa
Const <ime_konstante> (As <tip>) = <vrijednost>
Ukoliko cemo puno puta koristiti istu konstantu, primjerice 3.14159, isplati ju se deklarirati kao konstantu jer ce kod biti citljiviji, a i lakse joj je
promijeniti vrijednost.
Stringovi se stavljaju pod dvostruke navodnike. Ukoliko zelimo da neki
znak stringa bude dvostruki navodnik, stavlja se dvaput:
MsgBox "My name is "" Peter"""
ce ispisati My name is Peter .
Pri deklaraciji, mozemo im fiksirati maksimalnu duljinu (max):
Dim <ime> As String * <max>
Deklaracija unutar Sub odnosi se samo na samu proceduru, tj. tako
deklarirane varijable i konstante postoje samo dok se procedura izvodi. Ako
varijablu ili konstantu deklariramo prije naredbe Sub, biti ce dostupna svim
procedurama u modulu. Ako pak zelimo da varijabla/konstanta bude dostupna svim procedurama u svim modulima vaseg workbook-a, deklaraciju
treba zapoceti kljucnom rijeci Public (i staviti je ispred naredbe Sub).
isti naredbom
MsgBox "Rezultat je " & xxx
x = InputBox("Poruka")
rezultira prozorcicem s poljem za unos, iznad kojeg je ispisana Poruka.
Operacije
Zadaci
1. Napravite proceduru u varijablu x (nekog numerickog tipa) stavlja neku
vrijednost i ispisuje ju.
2. koja ispisuje poruku (npr. Hello, Vase ime!). Vase ime treba biti
uneseno od strane korisnika.
3. Napisite proceduru koja zbraja (mnozi, oduzima, . . . ) dva broja koja
unese korisnik i ispisuje rezultat.
4. Napravite proceduru koja ucitava radijus kruga i ispisuje njegov opseg
ili povrsinu.
Range objekt
8 Zadaci
koliko = Range("A1:C5").Count
prvi_stupac = Range("A1:C5").Column
prvi_redak = Range("A1:C5").Row
Zadaci
1. Napravite proceduru koja ispisuje neku poruku (npr. Hello, world!) u
celiju C7.
2. Napisite proceduru koja zbraja brojeve u celijama A1, A2, A3 i rezultat
upisujeu B1.
3. Napravite proceduru koja ucitava radijus kruga iz celije A1 i ispisuje
njegov opseg u A2 i povrsinu u A3.
Naredba granjanja
Cesto
je izvodenje neke naredbe (ili vise njih) ovisno o zadovoljenosti nekog
uvjeta. Svi programski jezici zbog toga poznaju naredbu grananja if-then.
Sintaksa je kako slijedi:
If <uvjet> Then <naredba>
Primjerice
If x = 0 Then MsgBox "Nula je."
Zapravo imamo opcenitije strukture:
10 Cells property
10
If <uvjet> Then
<naredbe 1>
Else
<naredbe 2>
End If
i
If <uvjet 1> Then
<naredbe 1>
ElseIf <uvjet 2> Then
<naredbe 2>
ElseIf <uvjet 3> Then
<naredbe 3>
...
Else
<naredbe>
End If
Za postavljanje uvjeta dobro dodu logicki operatori: And, Or, XoR
(ili-ili), Eqv (logicka ekvivalencija), Imp (logicka implikacija) i Not. Za
usporedivanje vrijednosti koriste se =, , , , =, =.
Za slucaj da imamo odabir izmedu vise od dvije opcije u ovisnosti o istom
tipu uvjeta korisna je naredbe
Select Case <uvjet>
Case <slucaj1>: <naredba 1>
...
End Select
10
Cells property
11
11
Zelimo
li iz modula pobrisati sadrzaj nekih celija, to mozemo postici pomocu
metoda Clear i Delete.
Range("A1:J10").Clear
brise i sadrzaj i formatiranje celija od A1 do J10,
Range("A1:J10").ClearContents
brise samo sadrzaj (a cuva formatiranje).
12
Logi
cki operatori
13 Select-Case
13
12
Select-Case
14
Polja
15 For-petlja
13
15
For-petlja
Cesto
je potrebno odredene naredbe izvrsiti vise puta. Za to programski
jezici poznaju posebne naredbe - petlje.
Prva od petlji u VBA je For-Next petlja.
For <brojac>=<pocetna vrijednost> To <konacna vrijednost> _
(Step <korak>)
<naredbe>
Next <brojac>
Eventualni prijevremeni izlaz postize se s
Exit For
.
Kao prvi zadatak iz petlji, generirajte nulmatricu velicine zadane od
strane korisnika pocevsi od celije A1. Zatim jedinicnu matricu.
16
Do-While i Do-Until-petlja
Do While/Until <uvjet>
<naredbe>
(Exit Do)
17 Reakcije na dogadaje
14
<naredbe>
Loop
17
Reakcije na dogadaje
18
U worksheet mozemo unijeti i objekt, primjerice kvadratic s upisanim tekstom. Desnom tipkom misa i odabirom Assign Macro mozemo odabrati koji
ce se modul pokrenuti pritiskom na taj gumb. Ako znate da Rnd vraca