Ta vadnica bo pokazala, kako uporabljati dinamične matrike (redim and redim save) v VBA.
Dinamični niz
Dinamični nizi so matrike, ki lahko spreminjajo velikosti (v nasprotju z statične matrike, ki so statični).
Če želite razglasiti dinamično polje, ga deklarirate, velikost polja pa izpustite:
1 | Dim strNames () Kot niz |
Preden lahko matriki dodelite vrednosti, morate z izjavo ReDim nastaviti matriko na želeno velikost:
1 | ReDim strNames (1 do 3) |
Kadar koli želite spremeniti velikost matrike, preprosto uporabite ReDim (ali ReDim Preserve, o čemer bomo izvedeli spodaj).
Dinamični variacijski nizi
Opomba: Različice nizov so nekoliko drugačne. Z različnimi matrikami vam ni treba nastaviti velikosti matrike z ReDimom pred dodelitvijo vrednosti.
12345678 | Sub TestArray ()'razglasi spremenljivkoDim varNames () Kot varianta'napolni matrikovarNames () = Array ("Fred", "Wilma", "Barney", "Betty")'vrnite vrednostiPridruži se MsgBox (varNames, ",")End Sub |
Redim vs Redim Preserve
The ReDim stavek spremeni velikost matrike, čiščenje vse obstoječe vrednote.
The ReDim Preserve stavek spremeni velikost matrike, vodenje (»Ohranjanje«) vseh obstoječih vrednot.
Uporaba programa ReDim
V praksi je spreminjanje velikosti matrike z ReDim videti tako:
123456789101112 | Sub TestReDim ()'razglasite niz nizovDim strNames () Kot niz'spremenite velikost nizov nizov, da bodo lahko vsebovale 3 vrednostiReDim strNames (1 do 3)'napolnite polje s 3 imenistrNames (1) = "Mel"strNames (2) = "Steve"strNames (3) = "Bob"'prikaže rezultat v neposrednem oknuDebug.Print Join (strNames, vbCrLf)End Sub |
Uporaba ReDim Preserve
V tem primeru bomo uporabili ReDim za nastavitev začetnega dinamičnega niza in nato ReDim Preserve za spreminjanje velikosti matrike, vodenje prvotne vrednosti:
1234567891011121314151617 | Sub TestReDim ()'razglasite niz nizovDim strNames () Kot niz'spremenite velikost nizov nizov, da bodo lahko vsebovale 3 vrednostiReDim strNames (1 do 3)'napolni matrikostrNames (1) = "Mel"strNames (2) = "Steve"strNames (3) = "Bob"'prikaže rezultat v neposrednem oknuDebug.Print Join (strNames, vbCrLf)"Redim, vendar shranite podatkeReDim Preserve strNames (1 do 4)strNames (4) = "Fred"'prikaže rezultat v neposrednem oknuDebug.Print Join (strNames, vbCrLf)End Sub |
Če ne uporabljate REZERVIRAJTE izjavo, bi izgubili podatke, ki so bili prej v matriki.
V neposrednem oknu zgoraj je matrika naselila Mel, Stevea in Boba. Ko je bil ponovno razglašen, je te vrednosti odstranil in namesto tega vrnil 3 prazne vrednosti in nato vrednost 'Fred'. To je posledica REZERVIRAJTE izjava izpuščena.