vba = visual basic for applications - unizg.hr1].pdf · 2018-03-05 · računalni praktikum 2 vba-1...

6
Računalni praktikum 2 VBA-1 1 VBA [ Visual Basic for Applications ] varijanta programskog jezika Visual Basic kompatibilna s MS Office aplikacijama za potrebe RP2: pisanje jednostavnih aplikacija unutar programa MS Excel 2016 programi se pišu u editoru (Excel Developer tab Visual Basic ili ALT + F11 ) Ukoliko developer tab nije vidljiv, potrebno ga je aktivirati: File Options Customize Ribbon: staviti kvačicu na developer (desni stupac) i kliknuti na "OK" U lijevom gornjem kvadrantu developera nalazi se Project Explorer, u kojemu je vidljiva struktura čitavog dokumenta, sa svim uključenim programima Unutar Project Explorera, desnim gumbom miša kliknuti na "VBA Project (Book1)", Insert Module otvara prozor u kojem pišemo program modul se sastoji od jedne ili više procedura (Sub). U slučaju jednostavnijih programa SUB se može smatrati programom. U nastavku teksta koristit će se riječ "program" programi se sastoje od naredbi koje se izvode onim redom kojim su napisane Kod programiranja važno je poznavati barem osnovne naredbe i njihovu sintaksu, kao i pravila pisanja unutar samog programskog jezika (što se može poistovjetiti sa pravopisom i gramatikom). Nepoštivanje ovih pravila i u najmanjem detalju može dovesti do greške u izvođenju programa. Excel u većini slučajeva prikaže poruku sa opisom pogreške. U pojedinim slučajevima program se uredno izvrši, no s pogrešnim rezultatom program se može zamisliti kao niz instrukcija računalu što treba raditi; primjerice, ako za program koji uvrštava neku (od korisnika zadanu) vrijednost u neku funkciju i ispisuje rezultat, trebamo računalu redom zadati naredbe "neka je funkcija f zadana formulom...", "neka korisnik unese x", "uvrsti x u funkciju f" i "ispiši rezultat" programe nije potrebno zasebno spremati, oni ostaju sastavni (i neodvojivi) dio aktivnog dokumenta (npr. "Book1.xlsm") Da bi se VBA program sačuvao, dokument je potrebno spremiti kao (save as ...) Excel Macro-Enabled Workbook (*.xlsm)

Upload: others

Post on 19-Jul-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: VBA = Visual Basic for Applications - unizg.hr1].pdf · 2018-03-05 · Računalni praktikum 2 VBA-1 1 VBA [ Visual Basic for Applications ] varijanta programskog jezika Visual Basic

Računalni praktikum 2 VBA-1

1

VBA [ Visual Basic for Applications ]

varijanta programskog jezika Visual Basic kompatibilna s MS Office aplikacijama

za potrebe RP2: pisanje jednostavnih aplikacija unutar programa MS Excel 2016

programi se pišu u editoru (Excel → Developer tab → Visual Basic ili ALT + F11 )

Ukoliko developer tab nije vidljiv, potrebno ga je aktivirati: File → Options →

→ Customize Ribbon: staviti kvačicu na developer (desni stupac) i kliknuti na "OK"

U lijevom gornjem kvadrantu developera nalazi se Project Explorer, u kojemu je

vidljiva struktura čitavog dokumenta, sa svim uključenim programima

Unutar Project Explorera, desnim gumbom miša kliknuti na "VBA Project (Book1)",

Insert → Module otvara prozor u kojem pišemo program

modul se sastoji od jedne ili više procedura (Sub). U slučaju jednostavnijih programa

SUB se može smatrati programom. U nastavku teksta koristit će se riječ "program"

programi se sastoje od naredbi koje se izvode onim redom kojim su napisane

Kod programiranja važno je poznavati barem osnovne naredbe i njihovu sintaksu, kao

i pravila pisanja unutar samog programskog jezika (što se može poistovjetiti sa

pravopisom i gramatikom). Nepoštivanje ovih pravila i u najmanjem detalju može

dovesti do greške u izvođenju programa. Excel u većini slučajeva prikaže poruku sa

opisom pogreške. U pojedinim slučajevima program se uredno izvrši, no s pogrešnim

rezultatom

program se može zamisliti kao niz instrukcija računalu što treba raditi; primjerice,

ako za program koji uvrštava neku (od korisnika zadanu) vrijednost u neku funkciju i

ispisuje rezultat, trebamo računalu redom zadati naredbe "neka je funkcija f zadana

formulom...", "neka korisnik unese x", "uvrsti x u funkciju f" i "ispiši rezultat"

programe nije potrebno zasebno spremati, oni ostaju sastavni (i neodvojivi) dio

aktivnog dokumenta (npr. "Book1.xlsm")

Da bi se VBA program sačuvao, dokument je potrebno spremiti kao (save as ...)

Excel Macro-Enabled Workbook (*.xlsm)

Page 2: VBA = Visual Basic for Applications - unizg.hr1].pdf · 2018-03-05 · Računalni praktikum 2 VBA-1 1 VBA [ Visual Basic for Applications ] varijanta programskog jezika Visual Basic

Računalni praktikum 2 VBA-1

2

V A R I J A B L E

Varijable u računalnim programima mogu se zamišljati kao poštanski pretinci: u njih se

sprema neki sadržaj-podatak (iznos broja, slovo, tekst, ...). Varijabla može mijenjati svoju

vrijednost, bilo tijekom izvođenja samog programa, bilo prije početka (unos podataka).

Varijabla mora imati ime i mora biti deklarirana kao određeni tip odn. vrsta podataka.

Ime varijable Da bi se podaci prethodno spremljeni kao varijabla mogli koristiti, potrebno joj je dati

ime. Ime varijable ne smije biti dulje od 255 znakova, ne smije početi brojem, ne

smije sadržavati prazna mjesta (space), slova sa crticama/kvačicama, niti

specijalne znakove (osim underscore tj. znak _ koji se koristi umjesto space-a). Postoje i

zabranjena imena varijabli, a to su (logično) sve VBA naredbe ili konstante (npr. Sin,

Cos, I, Pi, E, For, Then, ...). Ime varijable trebalo bi biti odabrano tako da se zna o čemu je

riječ. Osim toga, valja imati na umu da VBA ne razlikuje velika i mala slova (npr. varijabla

imena otopina je ista kao i Otopina i kao OTOPINA). Isto pravilo imenovanja vrijedi i za

ime programa.

Tip varijable Varijable mogu biti različitih tipova tj. biti unaprijed predviđene da sadrže podatke

određene vrste (brojevi različitih preciznosti, slova, datumi,... ili miješano). VBA

poznaje sedam numeričkih i pet nenumeričkih tipova varijabli (numerički tip znači

da s varijablom tog tipa možemo obavljati računske operacije).

Vidi prilog "VBA - vrste podataka"

Deklariranje varijabli Sve varijable koje se namjeravaju koristiti dobro je deklarirati kao određeni tip odmah

na početku programa. Sama deklaracija varijabli u VBA nije nužna, no radi se o dobroj

navici u programiranju i za potrebe RP2 je OBAVEZNA. Ukoliko se varijabla ne deklarira,

VBA ju automatski smatra najopćenitijim tipom - Variant, koji zauzima i najviše

memorijskog prostora i procesorske snage. U slučaju većeg broja varijabli to može

znatno usporiti izvođenje programa. Za potrebe RP2 bit će dovoljno pravilno koristiti

jedan od tri tipa: Integer (cijeli brojevi), Double (decimalni brojevi) ili String (niz bilo

kojih znakova; moraju se pisati između navodnih znakova: "...").

Opći oblik deklaracije varijable je:

Dim ime_varijable As tip

Npr. Dim x As Double deklarira varijablu x u koju ćemo moći spremati brojeve tipa

Double. Ako je potrebno deklarirati više varijabli odjednom mora se koristiti sljedeća

sintaksa:

Dim var1 As tip1, var2 As tip2, var3 As tip 3

Page 3: VBA = Visual Basic for Applications - unizg.hr1].pdf · 2018-03-05 · Računalni praktikum 2 VBA-1 1 VBA [ Visual Basic for Applications ] varijanta programskog jezika Visual Basic

Računalni praktikum 2 VBA-1

3

M i n i m a l n i V B A - p r o g r a m

Option Explicit

Sub ime_programa()

...

End Sub

"Naredba" Option Explicit na početku programa za posljedicu ima OBAVEZNO

deklariranje tipa SVAKE varijable. U suprotnom Excel javlja pogrešku "Variable not

defined".

Sub je početak svakog programa, iza kojega slijedi proizvoljno ime programa, te

obavezno zagrade (). Nakon što se stisne Enter, automatski se ispisuje POSLJEDNJI

redak programa, End Sub. Između Sub i End Sub unose se sve druge naredbe.

Naredbe i ostale ključne riječi ispisane su plavim tekstom, a varijable crnim.

Osim naredbi i varijabli u program se mogu upisivati i komentari, koji se započinju

znakom apostrofa ' i označeni su zelenom bojom. Komentari služe kao opaske i

objašnjenje pojedinih programskih redaka, npr. za slučaj kada program treba čitati

netko drugi osim autora.

Važno: Naredbe u VBA završavaju prelaskom u novi red (Enter/Return). Bez obzira koliko dug

naredbeni redak bio, ne treba ručno prelaziti u novi red, već treba nastaviti pisati i

pustiti Excel da sam prelomi naredbu u dva reda.

Osnovna struktura programa je u pravilu:

UNOS PODATAKA (INPUT) → OBRADA PODATAKA → ISPIS REZULTATA (OUTPUT).

O s n o v n e n a r e d b e

Naredba pridruživanja ( = ) Samom deklaracijom varijabli se ne pridružuje vrijednost. Da bismo spremili neki

sadržaj u varijablu, potrebno joj je pridružiti sadržaj tj. vrijednost. Osnovni način za

promjenu sadržaja varijable je naredba pridruživanja. Sintaksa je:

ime_varijable = vrijednost_varijable

Page 4: VBA = Visual Basic for Applications - unizg.hr1].pdf · 2018-03-05 · Računalni praktikum 2 VBA-1 1 VBA [ Visual Basic for Applications ] varijanta programskog jezika Visual Basic

Računalni praktikum 2 VBA-1

4

Tako primjerice naredba

n = 5

sprema veličinu (iznos) "5" u varijablu "n" (ako je n prije imao neku drugu vrijednost,

ona se briše i postavlja se nova).

Primjer:

Dim tekst As String

tekst = "patka"

Dim broj As Double

broj = 17

Aritmetičke operacije Brojeve možemo zbrajati (+), oduzimati (–), množiti (*), dijeliti (/) i potencirati (^).

Cijele brojeve (integer) možemo još i cjelobrojno dijeliti (znak "backslash", \ ALTGR + Q )

i određivati im ostatak pri dijeljenju (Mod).

Primjer: Naredba

n = (2 + 3*5 – 4^2)*5 + 6/2 + 7\3

će kao vrijednost u n pridružiti broj 10 (izračunajte na papiru!).

Konstante Ako nekoj varijabli ne želimo mijenjati vrijednost tokom cijelog programa, deklariramo

ju kao konstantu, što je vrlo korisno kada u različitim formulama koristimo iste

konstante:

Const e As Double = 2.718281828

Ispis vrijednosti varijable u zasebnom prozorčiću (MsgBox)

Kako bismo znali rezultat rada našeg programa, potrebno je da program ima (bar jedan)

ispis. Jedan od načina ispisa je korištenjem naredbe MsgBox koja stvara prozorčić

(message box) u kojem se ispisuje određeni sadržaj.

MsgBox a

ispisuje sadržaj varijable imena a u message box-u.

Page 5: VBA = Visual Basic for Applications - unizg.hr1].pdf · 2018-03-05 · Računalni praktikum 2 VBA-1 1 VBA [ Visual Basic for Applications ] varijanta programskog jezika Visual Basic

Računalni praktikum 2 VBA-1

5

Ta naredba se koristi i kad želimo ispisati neku uputu korisniku programa.

MsgBox "neki tekst"

ispisuje (doslovno, bez navodnika) "neki tekst" u message box-u. Navodnici se koriste u

slučajevima ispisa proizvoljnog teksta. Varijable se pišu bez navodnika.

Oba pristupa moguće je i kombinirati, a za spajanje dva ili više izraza koristi se znak &

( SHIFT + 6 ) uz obavezan razmak prije i poslije &:

Naredba

MsgBox "Varijabla n iznosi " & n

Ispisati će "Varijabla n iznosi 5" (naravno, ako je u n trenutno pospremljen iznos 5).

Unos podataka preko zasebnog prozorčića (InputBox)

Ako je program namjenjen obrađivanju različitih podataka, nije praktično uvijek iznova

mijenjati varijable unutar programskog koda, već je potrebno na neki način omogućiti da

korisnik upiše podatke s kojima želi nešto učiniti. Jedan način da to postignemo je input

box: prozorčić s porukom i poljem za unos vrijednosti.

Naredba:

b = InputBox ("Unesite vrijednost:")

stvara prozorčić u kojemu piše tekst "Unesite vrijednost:" i polje za unos te vrijednosti;

nakon što ju korisnik unese, ta vrijednost se sprema u varijablu imena b.

PAZI: Pri programiranju se kao decimalni znak UVIJEK koristi točka (.), dok se pri unosu

podataka u ćelije spreadsheeta ili u inputbox kao decimalni znak koristi sistemski dec.

znak (točka ili zarez), odn. decimalni znak sa desnog (numeričkog) dijela tipkovnice.

Zadaci:

1) U varijablu koju ste deklarirali kao STRING unesite svoje ime te ga ispišite u MESSAGE BOX.

2) U pravilno deklariranu varijablu proizvoljnog imena unesite rezultat cjelobrojnog dijeljenja broja (2 ∙ 3 ∙ 4 – 2 – 3 – 4) s brojem 4. Ispišite rezultat u message box-u uz prikladnu poruku (npr. "Rezultat je: ..."). Pazite na zagrade!

3) Napišite program koji u Message Box ispisuje produkt dva (decimalna) broja koje unosi korisnik putem InputBox-a

4) Napišite program koji računa opseg kružnice proizvoljnog (dakle, od korisnika zadanog) polumjera. Iznos broja deklarirajte kao konstantu.

Page 6: VBA = Visual Basic for Applications - unizg.hr1].pdf · 2018-03-05 · Računalni praktikum 2 VBA-1 1 VBA [ Visual Basic for Applications ] varijanta programskog jezika Visual Basic

Računalni praktikum 2 VBA-1 (prilog)

1

VBA: vrste podataka [ Data Types ]

Pri programiranju unutar VBA mogu se koristi različite vrste (tipovi) podataka. Ako se

deklaracijom (naredba DIM) ne proglasi vrsta podatka, VBA ga automatski proglašava

vrstom Variant, koja "pokriva" sve vrste podataka, ali zato zauzima najviše

memorijskog prostora (16 Bytea + po jedan Byte za svaki znak). Memorijski prostor

može se racionalnije iskoristiti ukoliko se varijabla proglasi nekim drugim tipom,

naravno, ako očekivane vrijednosti varijable ne izlaze iz njegovih okvira.

Primjer deklaracije varijable:

Dim x As Double

gdje je x varijabla kojoj će u sljedećem koraku biti dodijeljena neka vrijednost u rasponu

kojeg pokriva vrsta podataka Double.

Proglašavanje vrste podatka zbog uštede memorijskog prostora čini se na prvi pogled

suvišno, posebice što se memorija računala mjeri u gigabytima. No ukoliko se radi o

velikom broju podataka, tada se ne radi samo o radnoj memoriji računala, nego i o

opterećenosti procesora, naročito pri složenijim računskim operacijama. Osim toga,

ispravnim deklariranjem varijabli smanjuje se vjerojatnost sitnih pogrešaka u programu

(bug-ova). Izostavljanje deklaracije varijable nije velika greška, ali pravilno proglaša-

vanje može značajno ubrzati izračun.

Ukoliko je na početku programa napisan izraz "Option Explicit", tada VBA nužno

zahtijeva proglašavanje svake varijable, u suprotnom se javlja pogreška "Variable not

defined". Option Explicit obavezno treba koristiti u nastavi RP2!

U Tablici 1 navedeni su okviri vrijednosti pojedinih tipova varijabli, te (radi usporedbe)

njihova potreba za memorijom.

Tablica 1: Vrste podataka i pridruženi (približni) rasponi vrijednosti

Data Type/bytes* Raspon vrijednosti Zauzeće memorije / Bytes

Boolean True ili False, odn. 1 ili 0 2

Integer –32768 do +32767 (samo cijeli brojevi) 2

Long –2 × 109 do +2 × 109 (samo cijeli brojevi) 4

Single –3,4 × 1038 do –1,4 × 10–45 (za x < 0) +1,4 × 10–45 do +3,4 × 1038 (za x > 0)

4

Double –1.8 × 10308 do –4.9 × 10–324 (za x < 0) –4.9 × 10–324 do –1.8 × 10308 (za x > 0)

8

Currency –9,2 × 1014 do +9,2 × 1014 8

Date Datum 8

Object Bilo koja referenca na Objekt 4

String Bilo koji alfanumerički niz znakova 1 (za svaki znak)

Variant Sve vrijednosti koje pokrivaju String i Double 16 + 1

* su označeni tipovi varijabli koji neće biti korišteni tijekom nastave RP2. Sivo