VBA - razglasi (zatemni), ustvari in inicializiraj spremenljivko matrike

Ta vadnica bo pokazala, kako razglasiti (zatemniti), ustvariti in inicializirati spremenljivke matrike v VBA

Kaj je spremenljivka matrike VBA?

Spremenljivko matrike VBA si lahko predstavljamo kot skupino spremenljivk, shranjenih pod istim imenom in z istim tipom podatkov. Polje lahko shrani besedilo, številke ali predmete.

Sklicujete se na element v matriki z njegovo indeksno številko.

Spremenljivko matrike lahko deklarirate na enak način kot katero koli drugo spremenljivko z uporabo ključne besede Dim, Static, Public ali Private.

Statični nizi

Obstajata 2 vrsti nizov - statični in dinamični. Statična matrika je razglašena z velikostjo, določeno, ko matriko na začetku deklarirate. Imenuje se tudi fiksni niz.

1 Zatemni intA (4) kot celo število

Zgornja matrika je deklarirana z uporabo stavka Dim na ravni postopka ali modula, velikost matrike pa je 5, saj nismo deklarirali vrednosti LBound matrike.

Ne, to ni pravopisna napaka! Velikost niza je 5, kljub vnosu 4 v matriko. To je zato, ker se indeksi nizov samodejno začnejo pri nič.

Indeksi nizov

Indeksi nizov se samodejno začnejo pri nič, razen če Osnovna možnost 1 je naveden na vrhu vašega kodnega modula.

Če Osnovna možnost 1 je deklarirano, potem se polja samodejno začnejo pri 1.

Vendar se mi zdi tako razglašanje spremenljivk problematično. Pregledovalci kode se morda ne zavedajo, da se polja začnejo pri nič ali pri deklaraciji Option Base 1

Namesto tega raje izrecno deklariram začetni in končni položaj nizov:

1 Zatemni intA (2 do 5) kot celo število

Upoštevajte, da lahko matrico zaženete pri poljubni številki (ne le 1 ali 0).

Dinamični nizi

Spremenljivka Dynamic Array je matrika, katere velikost je mogoče spreminjati med izvajanjem. Razglasite dinamične spremenljivke brez velikosti.

1 Zatemni intA () kot celo število

Z stavkom ReDim lahko določite velikost matrike po ustvarjanju matrike.

1 ReDim intA (2)

Dinamično matriko lahko kadar koli spremenite. Vendar se pri uporabi izjave ReDim vse obstoječe vrednosti izbrišejo. Če želite ohraniti obstoječe vrednosti matrike, uporabite ReDim Preserve namesto tega.

1 ReDim Preserve intA (2)

Dinamično matriko lahko razglasite na ravni postopka, modula ali globalne ravni, vendar lahko uporabite samo stavek ReDim v postopku.

Različni nizi

Različice matrike so dinamične matrike, s katerimi je lažje delati.

1 Dim varNames ()

Upoštevajte, da vam ni treba določiti vrste podatkov (predpostavlja se, da je različica) ali velikosti matrike.

Kot bomo videli spodaj, lahko variabilne matrike inicializirate s funkcijo Array (ni treba najprej spreminjati velikosti nizov)!

Razglasi modul in javne matrike

Kot je prikazano zgoraj, je mogoče matrike prijaviti v postopkih za uporabo v tem postopku:

1234 Sub StaticArray ()'razglasite niz z vrednostjo LBound 1 in vrednostjo UBound 4Zatemni IntA (1 do 4) kot celo številoEnd Sub

Lahko pa jih razglasimo tudi na ravni modula ali na globalni ravni.

1234567 Možnost izrecno'razglasite niz z vrednostjo LBound 1 in vrednostjo UBound 4Zatemni IntA (1 do 4) kot celo številoSub StaticArray ()End Sub

V tem primeru lahko spremenljivko matrike pokličete kjer koli v tem kodnem modulu. Namesto tega lahko razglasite javno matriko, ki jo lahko uporabljate v celotnem projektu VBA (glejte naslednji razdelek).

Razglasitev javnega polja

Javno statično polje deklarirate tako, kot bi deklarirali javno spremenljivko.

1 Javna imena str (3) kot niz

Ta izjava bi morala iti na vrh vašega modula, pod možnostjo Explicit. Nato bi ga lahko uporabili v celotnem projektu VBA v katerem koli modulu ali postopku.

Če označite polje na vrhu modula, vendar s ključno besedo Dim, je uporaba tega niza omejena na posamezni modul. Poskus uporabe polja v ločenem modulu bi povzročil napako.

Inicializirajte matrike

Statičnemu nizu lahko dodelite vrednosti na naslednji način.

1234567891011 Sub StaticArray ()'razglasite niz z vrednostjo LBound 1 in vrednostjo UBound 4Zatemni IntA (1 do 4) kot celo število'inicializirajte matrikoIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'prikaži rezultat položaja 2 matrike v neposrednem oknuDebug.Print IntA (2)End Sub

Če zaženete zgornji postopek, bo vrednost 20 prikazana v neposrednem oknu.

Vrednosti lahko na enak način dodelite tudi dinamičnemu nizu

12345678910111213 Sub DynamicArray ()'razglasi dinamično matriko, pri tem pa izpusti vezane vrednostiZatemni IntA () kot celo število'inicializirajte matrikoReDim IntA (1 do 4)IntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'prikaži rezultat položaja 2 matrike v neposrednem oknuOdpravljanje napakIntA (2)End Sub

Funkcija niza

Vendar pa samo z različno matriko, lahko uporabite funkcijo matrike, ki je morda lažja od uporabe standardne metode.

12 'napolni matrikointA () = Niz (10, 20, 30, 40)

Napolni niz z zanko

Polje lahko napolnite tudi tako, da prelistate vrsto celic v Excelu

1234567891011121314151617 Pod TestDynamicArrayFromExcel ()'razglasi matrikoDim strNames () Kot niz'deklarirajte celo število za štetje vrstic v obseguDim n kot celo število'razglasi celo število za zankoDim i kot celo število'štejte vrstice v obsegun = Razpon ("A1", Razpon ("A1"). Konec (xlDown)). Vrstice. Število'pomanjšajte matriko na količino vrstic v obsegu.ReDim strNames (n)Za i = 0 Za nstrNames (i) = Obseg ("A1"). Odmik (i + 1, 0)Naprej i'prikaži vrednosti v matrikiPridruži se MsgBox (strNames ())End Sub

Znova inicializirajte matrike

Polje lahko znova inicializirate na kateri koli stopnji kode, vendar boste izgubili prvotno vrednost, ki jo vsebuje ta položaj v matriki.

1234567891011121314 Sub StaticArray ()'razglasite niz z vrednostjo LBound 1 in vrednostjo UBound 4Zatemni IntA (1 do 4) kot celo število'inicializirajte matrikoIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'prikaži rezultat položaja 2 matrike v neposrednem oknuDebug.Print IntA (2)'znova inicializirajte matrikointA (2) = 200Debug.Print IntA (2)End Sub

V zgornjem primeru bo statična matrika ohranila vse vrednosti, razen vrednosti v položaju 2 - ta vrednost se bo spremenila v 200.

Uporaba programa ReDim

Če uporabljate dinamični niz, se izjava ReDim uporablja za nastavitev velikosti vašega niza. Nato lahko v kodi uporabite stavek ReDim, da velikost matrike spremenite tolikokrat, kot je potrebno. Spodnja vrstica kode bo ponovno inicializirala matriko intA v velikosti 2 (Ne pozabite - indeks matrike se začne pri 0!)

1 ReDim intA (1) kot celo število

Tako bi bila koda, vključno z izjavo ReDim, videti kot spodnji primer.

1234567891011121314151617 Pod TestDynamicArray ()'razglasi matrikoZatemni intA () kot celo številoReDim intA (2)'napolni matriko s številkamiintA (0) = 2intA (1) = 5intA (2) = 9'pokaži številko na položaju 1Odpravljanje napak intA (1)'pomanjšajte matriko, da spremenite velikostReDim intA (3)intA (0) = 6intA (1) = 8'tokrat prikaži številko na položaju 1Debug.Print intA (1)End Sub

Če zaženete zgornji postopek, bi bila vrednost 5 prikazana v neposrednem oknu, nato pa bi bila prikazana vrednost 8, ko bi z matrico ReDim spremenili velikost matrike in jo ponovno napolnili. Ker pa nismo zapolnili IntA (2) in nismo uporabili možnosti Re-Dim Preserve, bo vrednost v tem položaju v matriki odstranjena, oba položaja 3 in 4 v matriki pa bosta nič.

Uporaba ReDim Preserve

Če uporabljamo ReDim Preserve, bo ohranil prvotne vrednosti, ki jih vsebuje matrika.

1234567891011121314151617 Pod TestDynamicArray ()'razglasi matrikoZatemni intA () kot celo številoReDim intA (2)'napolni matriko s številkamiintA (0) = 2intA (1) = 5intA (2) = 9'pokaži številko na položaju 2Odpravljanje napak intA (2)'pomanjšaj matrikoReDim intA (3)intA (0) = 6intA (1) = 8'ponovno pokaži številko na položaju 2Debug.Print intA (2)End Sub

V obeh zgoraj prikazanih poljih za sporočila bo številka 9 prikazana, saj stavek ReDim Preserve ohranil to vrednost na tem mestu.

Vam bo pomagal razvoj spletnega mesta, ki si delijo stran s svojimi prijatelji

wave wave wave wave wave