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.