Tipovi

Tip u programskom jeziku predstavlja konačan skup vrednosti i operacija koje se mogu primeniti nad tim vrednostima. Programski jezici obično sadrže određeni broj ugrađenih prostih tipova, a često omogućavaju korisniku da definiše svoje sopstvene tipove.

Prosti tipovi

Vrednosti prostih tipova ne mogu se rastaviti na jednostavnije komponente. Moguća je konverzija vrednosti promenljivih iz jednog prostog tipa u drugi korišćenjem funkcija za konverziju tipova.

Nizovni tip podataka

Jedan od najčešće korišćenih složenih tipova podataka jeste nizovni tip. Niz je konačan i uređen skup podataka istog tipa koje se nazivaju elementi niza. Elementima niza se pristupa preko zajedničkog imena (naziv nizovne promenljive) i fiksnog broja indeksa. Stoga se niz može posmatrati kao grupa indeksiranih promenljivih istog tipa sa zajedničkim imenom.

U zavisnosti od broja indeksa niz može biti jednodimenzionalan i višedimenzionalan, a broj indeksa koji se koristi za pristupanje elementu se naziva dimenzija niza. Ovde će biti reči isklxučivo o jednodimenzionalnim nizovima.

U slučaju jednodimenzionalnih nizova veličina niza se poistovećuje sa brojem njegovih elemenata, a indeks elementa se svodi na redni broj elementa u nizu. Pritom prvi indeks može biti nula (podrazumevano) ili jedinica. Ukoliko se na početku modula koristi naredba

Option Base 1

redni broj prvog elementa svakog deklarisanog niza u tom modulu biće 1.

Nizovi mogu biti statički i dinamički. Kod statičkih nizova veličina niza mora biti poznata pre kompilacije, tj. u deklaraciji statičkih nizova veličina mora biti konstantna vrednost (literal ili imenovana konstanta). U navedenom primeru i prviNiz i drugiNiz su deklarisani kao statički nizovi od po 10 elemenata:

Const MAX_VELICINA As Integer = 10

Dim prviNiz(10) as String 'niz od 10 elemenata tipa String

Dim drugiNiz(MAX_VELICINA) as String 'niz od MAX_VELICINA elemenata tipa String

Dinamički nizovi se deklarišu bez navođenja veličine, a tokom izvršavanja programa se može zadati njihova veličina primenom naredbe ReDim:

Dim dinNiz() as String

… 

'n je celobrojna promenljiva dobijena nekim izračunavanjem

Redim dinNiz(n)

Elementu niza se pristupa preko imena nizovne promenljive i indeksa. Npr.


Dim niz(10) as Integer 'niz od 10 elemenata tipa Integer (tj. celobrojni niz od 10 elemenata)

niz(5) = 16 'inicijalizacija 5. elementa niza (ako je Option Base 1)

x = 2 * niz(4) + 1 'element niza se koristi u izrazu kao bilo koja celobrojna vrednost  

Pri radu sa nizovima najčešće se koriste petlje pošto je to najefikasniji način da se nad svakim elementom niza obavi isti niz radnji (npr. For petlja za inicijalizaciju i ispisivanje elemenata niza).

Korisnički definisani tipovi

Pored ugrađenih (prostih) tipova, u VBA je omogućeno korisniku da definiše i sopstvene tipove.

Konverzija tipova

U slučaju da se u izrazu pojavljuju operandi različitih tipova, postavlja se pitanje kog tipa će biti rezultat, tj. vrednost celokupnog izraza. Takođe je potrebno razjasniti kako se izvršava naredba dodele u slučaju da su tip promenljiva sa leve strane dodele (znaka jednakosti) i tip izraza sa desne strane znaka jednakosti različiti. Npr.

Dim ix As Integer, ry As Double, s As String   'operandi

Dim iz As Integer, iv As Integer, rw As Double, s2 As String 'rezultati

Dim poruka As String

ix = 5 'inicijalizacija

ry = 4.3 'inicijalizacija

s = "123" 'inicijalizacija

iz = ix * ry ' 5 * 4.3 => 5.0 * 4.3 => 21.5 => 21 

rw = ix * ry ' 5 * 4.3 => 5.0 * 4.3 => 21.5

s2 = s & ix  ' "123" & 5 => "123" & "5" => "1235"

iv = ix + s  ' 5 + "123" => 5 + 123 => 128

MsgBox ix + s ' 5 + "123" => 5 + 123 => 128 => "128"

s = "a123"

iv = ix + s ' Greška!! "a123" ne može da se konvertuje u broj

MsgBox ix + s ' Greška!! "a123" ne može da se konvertuje u broj

s = "123.4"

rw = ix + s ' ' 5 + "123.4" => 5 + 123.4 => 5.0 + 123.4 = 128.4

iv = ix + s ' ' 5 + "123.4" => 5 + 123.4 => 5.0 + 123.4 = 128.4 => 128

MsgBox ix + s ' 5 + "123.4" => 5 + 123.4 => 5.0 + 123.4 = 128.4 => "128.4"

Navedeni primeri pokazuju da se podrazumevaju pravila poput:

Ovakva podrazumevana pravila se još nazivaju pravila implicitne konverzije tipova. Iako deluje da je zahvaljujući njima sintaksa jednostavnija, višestruke "skrivene" konverzije u izrazu mogu dovesti do grešaka koje se teško otkrivaju. Osim toga potrebno je pamtiti i mnogobrojne izuzetke od pravila. Stoga je bolje eksplicitno izvršiti konverziju kako bismo bili sigurni u tip izračunate vrednosti primenom funkcija za za eksplicitnu konverziju tipova:

s = "123.4"

iv = CInt(s) + ix ' CInt("123.4") + 5 => 123 + 5 => 128 

MsgBox CDbl(s) + ix ' CDbl("123.4") + 5 => 123.4 + 5 => 128.4 => "128.4"

'CInt('a123') i CDbl('a123.4') prijavljuju grešku!