VBA - Skelbti (Dim), sukurti ir inicijuoti masyvo kintamąjį

Š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.

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave