VBA - deklareerige (Dim), looge ja initsialiseerige massiivi muutuja

See õpetus näitab, kuidas VBA -s massiivmuutujaid deklareerida (Dim), luua ja lähtestada

Mis on VBA massiivi muutuja?

VBA massiivi muutujat võib pidada muutujate rühmaks, mis on salvestatud sama nime all ja millel on sama andmetüüp. Massiiv võib salvestada teksti, numbreid või objekte.

Viidate massiivi elemendile, kasutades selle indeksinumbrit.

Massiivimuutuja saate deklareerida samamoodi nagu mis tahes muud muutujat, kasutades märksõna Dim, Staatiline, Avalik või Privaatne.

Staatilised massiivid

Massiive on kahte tüüpi - staatiline ja dünaamiline. Staatiline massiiv deklareeritakse selle suurusega, mis on määratud massiivi esialgsel deklareerimisel. Seda nimetatakse ka fikseeritud massiiviks.

1 Dim intA (4) täisarvuna

Ülaltoodud massiiv deklareeritakse Dim -lausega protseduuri või mooduli tasemel ning massiivi suurus on 5, kuna me pole massiivi LBound väärtust deklareerinud.

Ei, see pole kirjaviga! Massiivi suurus on 5, vaatamata massiivi 4 sisestamisele. Seda seetõttu, et massiiviindeksid algavad automaatselt nullist.

Massiivindeksid

Massiiviindeksid algavad automaatselt nullist, kui pole Valiku alus 1 on teie koodimooduli ülaosas.

Kui Valiku alus 1 on deklareeritud, alustatakse massiive automaatselt 1 -st.

Siiski leian, et muutujate sellisel viisil deklareerimine on problemaatiline. Koodiarvustajad ei pruugi olla teadlikud, et massiivid algavad nullist või valikuvõimaluse 1. deklaratsioonist

Selle asemel eelistan ma selgesõnaliselt deklareerida massiivi algus- ja lõpppositsiooni:

1 Dim intA (2 kuni 5) täisarvuna

Pange tähele, et seda tehes saate massiivi käivitada mis tahes numbriga (mitte ainult 1 või 0).

Dünaamilised massiivid

Dünaamilise massiivi muutuja on massiiv, mille suurust saab käitusajal muuta. Deklareerite dünaamilisi muutujaid ilma suuruseta.

1 Dim intA () täisarvuna

ReDim -lausega saate määrata massiivi suuruse pärast massiivi loomist.

1 ReDim intA (2)

Dünaamilise massiivi suurust saate igal ajal muuta. ReDimi avalduse kasutamisel kustutatakse aga kõik olemasolevad väärtused. Massiivi olemasolevate väärtuste säilitamiseks kasutage ReDim Preserve selle asemel.

1 ReDim Preserve intA (2)

Dünaamilise massiivi saate deklareerida protseduuri, mooduli või globaalsel tasandil, kuid saate kasutada ainult protseduuri raames avaldust ReDim.

Variatiivmassiivid

Variantide massiivid on dünaamilised massiivid, millega on lihtsam töötada.

1 Dim varNames ()

Pange tähele, et te ei pea määrama andmetüüpi (eeldatakse, et see on variant) või massiivi suurust.

Nagu näeme allpool, saate massiivvariandi initsialiseerida massiivifunktsiooni abil (pole vaja massiive kõigepealt muuta)!

Deklareerimismoodul ja avalikud massiivid

Nagu ülalpool näidatud, saab massiive deklareerida protseduuride raames selle protseduuri raames kasutamiseks:

1234 Sub StaticArray ()'deklareerige massiiv LBound väärtusega 1 ja UBound väärtusega 4Dim IntA (1 kuni 4) täisarvunaEnd Sub

Kuid neid saab deklareerida ka mooduli või globaalsel tasandil.

1234567 Valik Selge'deklareerige massiiv LBound väärtusega 1 ja UBound väärtusega 4Dim IntA (1 kuni 4) täisarvunaSub StaticArray ()End Sub

Selles näites saab massiivi muutujat kutsuda selle koodimooduli kõikjal. Selle asemel saate deklareerida avaliku massiivi, mida saab kasutada kogu teie VBA projekti jooksul (vt järgmist jaotist).

Avaliku massiivi kuulutamine

Kuulutate avaliku staatilise massiivi nagu avaliku muutuja.

1 Avalikud strNames (3) kui string

See deklaratsioon peaks asuma teie mooduli ülaosas, valiku Explicit all. Seejärel saab seda kasutada kogu teie VBA projekti käigus mis tahes moodulis või protseduuris.

Kui deklareerite massiivi mooduli ülaosas, kuid märksõnaga Dim, siis on selle massiivi kasutamine piiratud selle üksiku mooduliga. Kui proovite massiivi kasutada eraldi moodulis, tekiks tõrge.

Initsialiseeri massiivid

Staatilisele massiivile saate väärtusi määrata järgmiselt.

1234567891011 Sub StaticArray ()'deklareerige massiiv LBound väärtusega 1 ja UBound väärtusega 4Dim IntA (1 kuni 4) täisarvuna'lähtestage massiivIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'näitavad massiivi 2. positsiooni tulemust vahetu aknasSilumine. Printige IntA (2)End Sub

Kui käivitate ülaltoodud protseduuri, kuvatakse vahetu aknas väärtus 20.

Samuti saate väärtused määrata dünaamilisele massiivile samal viisil

12345678910111213 Sub DynamicArray ()'deklareerige dünaamiline massiiv, kuid jätke seotud väärtused väljaDim IntA () täisarvuna'lähtestage massiivReDim IntA (1 kuni 4)IntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'näitavad massiivi 2. positsiooni tulemust vahetu aknasSilumine. PrintIntA (2)End Sub

Massiivi funktsioon

Kuid, ainult variandimassiiviga, saate kasutada massiivi funktsiooni, mis võib olla lihtsam kui standardmeetodi kasutamine.

12 'täitke massiivintA () = massiiv (10, 20, 30, 40)

Täida massiiv silmusega

Massiive saate täita ka Exceli lahtrite vahemiku kaudu

1234567891011121314151617 AlamkatseDynamicArrayFromExcel ()'kuulutage massiivDim strNames () stringina'deklareerige vahemiku ridade lugemiseks täisarvDim n Nagu täisarv'deklareerige silmuse jaoks täisarvDim i As täisarv'loendage vahemiku readn = vahemik ("A1", vahemik ("A1"). lõpp (xlDown)). Ridad. arv'redigeerige massiiv vahemiku ridade arvuni.ReDim strNames (n)Sest i = 0 kuni nstrNames (i) = Vahemik ("A1"). Nihe (i + 1, 0)Edasi i'näitavad massiivi väärtusiMsgBoxi liitumine (strNames ())End Sub

Vormindage massiivid uuesti

Saate oma massiivi uuesti initsialiseerida oma koodi mis tahes etapis, kuid kaotate seejärel oma massiivi selles asendis sisalduva algväärtuse.

1234567891011121314 Sub StaticArray ()'deklareerige massiiv LBound väärtusega 1 ja UBound väärtusega 4Dim IntA (1 kuni 4) täisarvuna'lähtestage massiivIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'näitab massiivi 2. positsiooni tulemust vahetu aknasSilumine. Printige IntA (2)'initsialiseeri massiiv uuestiintA (2) = 200Silumine. Printige IntA (2)End Sub

Ülaltoodud näites säilitab staatiline massiiv kõik väärtused, välja arvatud 2. positsiooni väärtus - see väärtus muutub 200 -ks.

ReDimi kasutamine

Kui kasutate dünaamilist massiivi, kasutatakse massiivi suuruse määramiseks lauset ReDim. Saate oma koodis hiljem kasutada ReDimi avaldust, et muuta massiivi suurust nii mitu korda kui vaja. Allpool olev koodirida lähtestab intA -massiivi uuesti suuruseks 2 (pidage meeles - massiiviindeks algab nullist!)

1 ReDim intA (1) täisarvuna

Nii et kood, mis sisaldab ReDimi avaldust, näeks välja nagu allpool toodud näide.

1234567891011121314151617 AlamkatseDynamicArray ()'kuulutage massiivDim intA () täisarvunaReDim intA (2)'täitke massiiv numbritegaintA (0) = 2intA (1) = 5intA (2) = 9"näita numbrit positsioonil 1Silumine. Prindi intA (1)'redigeerige massiivi suuruse muutmiseksReDim intA (3)intA (0) = 6intA (1) = 8'näidake seekord numbrit positsioonil 1Silumine. Prindi intA (1)End Sub

Kui käivitate ülaltoodud protseduuri, kuvatakse vahetu aknas väärtus 5 ja seejärel kuvatakse väärtus 8, kui oleme massiivi suuruse ReDim abil muutnud ja selle uuesti täitnud. Kuid kuna me pole IntA-d (2) asustanud ja me ei kasutanud Re-Dim Preserve'i, eemaldatakse selle massiivi positsiooni väärtus ja nii massiivi 3. kui ka 4. positsioon on null.

ReDim Preserve kasutamine

Kui kasutame ReDim Preserve'i, säilitab see massiivi algsed väärtused.

1234567891011121314151617 AlamkatseDynamicArray ()'kuulutage massiivDim intA () täisarvunaReDim intA (2)'täitke massiiv numbritegaintA (0) = 2intA (1) = 5intA (2) = 9"näita numbrit positsioonil 2Silumine. Prindi intA (2)'redigeeri massiiviReDim intA (3)intA (0) = 6intA (1) = 8'näidake uuesti numbrit positsioonil 2Silumine. Prindi intA (2)End Sub

Mõlemas ülaltoodud sõnumikastis kuvatakse number 9, kuna ReDim Preserve avaldus hoiab selle väärtuse selles asendis.

Te aitate arengu ala, jagades leht oma sõpradega

wave wave wave wave wave