Dinamički nizovi

Ponekad je potrebno da napravimo niz za koji nismo sigurni koliko će imati članova. U tom slučaju vrši se kreiranje dinamičkih nizova koji, za razliku od uobičajenih, nemaju fiksnu dužinu. Ovi nizovi se deklarišu na taj način da se izostavlja broj članova niza, a koliko će ih biti ili za koliko treba da se poveća broj članova niza naknadno se definiše uz pomoć komandi o kojima će biti reč u tekstu koji sledi.

Deklarisanje dinamičkog niza obavlja se na sledeći način:

Dim a() As Integer

Kao što vidite, postupak je isti kao prilikom deklarisanja običnog niza, samo što smo izostavili parametar pomoću koga zadajemo broj njegovih članova. Pre nego što počnemo da koristimo ovakav niz potrebno je da odredimo koliko će članova sadržati. To se postiže pomoću komande:

ReDim <naziv niza>(<broj članova>)

Na primer, ako želimo da deklarišemo dinamički niz, a zatim odredimo da on ima 10 članova napisaćemo sledeći kod:

Dim a() As String
ReDim a(9)

Svaki put nakon pokretanja naredbe ReDim niz se inicijalizuje, odnosno briše se njegov sadržaj. Ako bi smo hteli npr. da dodamo još 10 članova niza, a da pritom ne izbrišemo vrednosti članova, ovu komandu bismo napisali uz korišćenje dodatnog parametra Preserve:

Dim a() As String
ReDim Preserve a(19)

Činjenica da indeksiranje članova niza počinje od nule može delovati zbunjujuće, pa uvek možete da naglasite da indeksi polaze od broja 1. U tom slučaju to treba da naglasite na početku modula, a zatim prilikom zadavanja veličine niza unosite pravi broj članova. Evo jednog programa koji to ilustruje:

Option Base 1

Sub DynArr()

Dim i As Integer
Dim a() As String
ReDim a(10)
For i = 1 To 10
    a(i) = i
    MsgBox a(i)
Next i

End Sub