Ši pamoka parodys, kaip deklaruoti (Dim), kurti ir inicijuoti masyvo kintamuosius VBA
Kas yra VBA masyvo kintamasis?
VBA masyvo kintamąjį galima laikyti kintamųjų grupe, saugoma tuo pačiu pavadinimu ir turint tą patį duomenų tipą. Masyvas gali saugoti tekstą, skaičius ar objektus.
Jūs nurodote masyvo elementą naudodami jo indekso numerį.
Masyvo kintamąjį galite deklaruoti taip pat, kaip ir bet kurį kitą kintamąjį, naudodami raktinį žodį Dim, Static, Public arba Private.
Statiniai masyvai
Yra 2 masyvų tipai - statinis ir dinaminis. Statinis masyvas deklaruojamas nurodant jo dydį, kai iš pradžių deklaruojate masyvą. Jis taip pat vadinamas fiksuotu masyvu.
1 | Išryškinkite intA (4) kaip sveiką skaičių |
Aukščiau pateiktas masyvas deklaruojamas naudojant Dim sakinį procedūros ar modulio lygiu, o masyvo dydis yra 5, nes mes nepaskelbėme masyvo LBound vertės.
Ne, tai ne rašybos klaida! Masyvo dydis yra 5, nepaisant to, kad į masyvą įvedėte 4. Taip yra todėl, kad masyvo indeksai automatiškai prasideda nuo nulio.
Masyvo indeksai
Masyvo indeksai automatiškai prasideda nuo nulio, nebent 1 variantas yra nurodytas jūsų kodo modulio viršuje.
Jei 1 variantas yra deklaruojamas, tada masyvai automatiškai prasidės nuo 1.
Tačiau manau, kad kintamųjų deklaravimas tokiu būdu yra problemiškas. Kodo peržiūrėtojai gali nežinoti, kad masyvai prasideda nuo nulio arba nuo 1 pasirinkimo bazės deklaracijos
Vietoj to, aš norėčiau aiškiai deklaruoti masyvų pradžios ir pabaigos pozicijas:
1 | Pritvirtinkite intA (nuo 2 iki 5) kaip sveiką skaičių |
Atkreipkite dėmesį, kad kai tai padarysite, galite pradėti masyvą bet kuriuo skaičiumi (ne tik 1 arba 0).
Dinaminiai masyvai
„Dynamic Array“ kintamasis yra masyvas, kurio dydį galima pakeisti vykdymo metu. Dinaminius kintamuosius deklaruojate be dydžio.
1 | Pritemdyti intA () kaip sveiką skaičių |
Sukūrę masyvą, galite naudoti „ReDim“ sakinį, norėdami nurodyti masyvo dydį.
1 | „ReDim intA“ (2) |
Dinaminio masyvo dydį galite pakeisti bet kuriuo metu. Tačiau naudojant „ReDim Statement“ visos esamos vertės ištrinamos. Norėdami išsaugoti esamas masyvo vertes, naudokite „ReDim Preserve“ vietoj to.
1 | „ReDim Preserve intA“ (2) |
Dinaminį masyvą galite deklaruoti procedūros, modulio ar visuotiniu lygiu, tačiau „ReDim“ teiginį galite naudoti tik procedūros metu.
Variantų masyvai
Variantų masyvai yra dinaminiai masyvai, su kuriais lengviau dirbti.
1 | Dim varNames () |
Atkreipkite dėmesį, kad jums nereikia nurodyti duomenų tipo (manoma, kad tai variantas) ar masyvo dydžio.
Kaip matysime žemiau, galite inicijuoti variantų masyvus naudodami masyvo funkciją (nebūtina iš pradžių keisti masyvų dydžio)!
Deklaravimo modulis ir viešieji masyvai
Kaip parodyta aukščiau, masyvus galima deklaruoti procedūrų metu, kad būtų galima naudoti pagal šią procedūrą:
1234 | „Sub StaticArray“ ()'paskelbti masyvą, kurio LBound reikšmė yra 1 ir UBound vertė yra 4Sumažinti IntA (nuo 1 iki 4) kaip sveiką skaičiųPabaiga Sub |
Bet jie taip pat gali būti deklaruojami modulio arba pasauliniu lygiu.
1234567 | Pasirinkimas aiškus'paskelbti masyvą, kurio LBound reikšmė yra 1 ir UBound vertė yra 4Sumažinti IntA (nuo 1 iki 4) kaip sveiką skaičių„Sub StaticArray“ ()Pabaiga Sub |
Šiame pavyzdyje masyvo kintamasis gali būti iškviestas bet kurioje šio kodo modulio vietoje. Vietoj to galite paskelbti viešą masyvą, kurį galima naudoti visame VBA projekte (žr. Kitą skyrių).
Viešo masyvo paskelbimas
Jūs deklaruojate viešą statinį masyvą kaip viešąjį kintamąjį.
1 | Viešas strNames (3) kaip eilutė |
Ši deklaracija turėtų būti pateikta jūsų modulio viršuje, po parinktimi Explicit. Tada jis gali būti naudojamas visame jūsų VBA projekte bet kuriame modulyje ar procedūroje.
Jei masyvą deklaruojate modulio viršuje, bet naudodami raktinį žodį Dim, tada tą masyvą galima naudoti tik tam atskiram moduliui. Bandant naudoti masyvą atskirame modulyje, atsiras klaida.
Inicijuokite masyvus
Galite priskirti vertes statiniam masyvui tokiu būdu.
1234567891011 | „Sub StaticArray“ ()'paskelbti masyvą, kurio LBound reikšmė yra 1 ir UBound vertė yra 4Sumažinti IntA (nuo 1 iki 4) kaip sveiką skaičių“inicijuokite masyvąIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40“tiesioginiame lange parodykite masyvo 2 pozicijos rezultatąDerinti. Spausdinti IntA (2)Pabaiga Sub |
Jei atliksite aukščiau aprašytą procedūrą, 20 reikšmė bus rodoma tiesioginiame lange.
Taip pat tokiu pat būdu galite priskirti reikšmes dinaminiam masyvui
12345678910111213 | Sub DynamicArray ()“deklaruoti dinaminį masyvą, bet praleisti susietas reikšmesDim IntA () kaip sveikasis skaičius“inicijuokite masyvą„ReDim IntA“ (nuo 1 iki 4)IntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40“tiesioginiame lange parodykite masyvo 2 pozicijos rezultatąDerinti. SpausdintiIntA (2)Pabaiga Sub |
Masyvo funkcija
Tačiau, tik su variantų masyvu, galite naudoti masyvo funkciją, kuri gali būti lengvesnė nei naudojant standartinį metodą.
12 | 'užpildyti masyvąintA () = masyvas (10, 20, 30, 40) |
Užpildykite masyvą kilpa
Taip pat galite užpildyti masyvus, atlikdami kilpą per „Excel“ langelių diapazoną
1234567891011121314151617 | Sub TestDynamicArrayFromExcel ()“paskelbti masyvąDim strNames () kaip eilutė“deklaruokite sveikąjį skaičių, kad suskaičiuotumėte diapazono eilutesDim n Kaip sveikasis skaičius“deklaruokite ciklo sveikąjį skaičiųDim i As Integer'suskaičiuokite diapazono eilutesn = Diapazonas ("A1", Diapazonas ("A1"). Pabaiga (xlDown)). Eilutės. Skaičius'perdarykite masyvą iki eilučių skaičiaus diapazone.„ReDim strNames“ (n)Jei i = 0 iki nstrNames (i) = Diapazonas ("A1"). Poslinkis (i + 1, 0)Kitas I.“parodykite masyvo reikšmes„MsgBox“ prisijungimas (strNames ())Pabaiga Sub |
Iš naujo inicijuoti masyvus
Galite iš naujo inicijuoti masyvą bet kuriame kodo etape, tačiau tada prarasite pradinę vertę, esančią toje masyvo vietoje.
1234567891011121314 | „Sub StaticArray“ ()'paskelbti masyvą, kurio LBound reikšmė yra 1 ir UBound vertė yra 4Sumažinti IntA (nuo 1 iki 4) kaip sveiką skaičių“inicijuokite masyvąIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40“tiesioginiame lange parodykite masyvo 2 pozicijos rezultatąDerinti. Spausdinti IntA (2)“iš naujo inicijuokite masyvąintA (2) = 200Derinti. Spausdinti IntA (2)Pabaiga Sub |
Anksčiau pateiktame pavyzdyje statinis masyvas išsaugos visas reikšmes, išskyrus 2 pozicijos reikšmę - ta vertė pasikeis į 200.
Naudojant „ReDim“
Jei naudojate dinaminį masyvą, „ReDim“ teiginys naudojamas masyvo dydžiui nustatyti. Vėliau savo kode galite naudoti „ReDim“ teiginį, kad pakeistumėte masyvo dydį tiek kartų, kiek reikia. Žemiau esanti kodo eilutė iš naujo inicijuos intA masyvą, kad jis būtų 2 dydžio (atminkite - masyvo indeksas prasideda nuo 0!)
1 | ReDim intA (1) kaip sveikasis skaičius |
Taigi kodas, įskaitant „ReDim“ teiginį, atrodytų kaip žemiau pateiktas pavyzdys.
1234567891011121314151617 | Sub TestDynamicArray ()“paskelbti masyvąDim intA () As Integer„ReDim intA“ (2)“užpildykite masyvą skaičiaisintA (0) = 2intA (1) = 5intA (2) = 9“parodykite skaičių 1 pozicijojeDerinti. Spausdinti intA (1)„pakeiskite masyvą, kad pakeistumėte dydį„ReDim intA“ (3)intA (0) = 6intA (1) = 8“šį kartą parodykite skaičių 1 pozicijojeDerinti. Spausdinti intA (1)Pabaiga Sub |
Jei atliksite aukščiau aprašytą procedūrą, 5 reikšmė bus rodoma tiesioginiame lange, o tada reikšmė 8 bus rodoma, kai pakeisime masyvo dydį naudodami „ReDim“ ir užpildėme jį iš naujo. Tačiau kadangi mes neužpildėme IntA (2) ir nenaudojome „Re-Dim Preserve“, tos masyvo padėties reikšmė bus pašalinta ir tiek 3, tiek 4 masyvo pozicijos bus lygios nuliui.
Naudojant „ReDim Preserve“
Jei naudosime „ReDim Preserve“, ji išsaugos pradines masyvo vertes.
1234567891011121314151617 | Sub TestDynamicArray ()“paskelbti masyvąDim intA () As Integer„ReDim intA“ (2)“užpildykite masyvą skaičiaisintA (0) = 2intA (1) = 5intA (2) = 9“parodykite skaičių 2 pozicijojeDerinti. Spausdinti intA (2)„pertvarkykite masyvą„ReDim intA“ (3)intA (0) = 6intA (1) = 8“dar kartą parodykite skaičių 2 pozicijojeDerinti. Spausdinti intA (2)Pabaiga Sub |
Abiejuose pranešimų laukeliuose, rodomuose aukščiau, skaičius 9 bus rodomas kaip „ReDim Preserve“ teiginys, išlaikęs šią vertę toje pozicijoje.