VBA - Tömbváltozó deklarálása (Dim), létrehozása és inicializálása

Ez az oktatóanyag bemutatja, hogyan kell deklarálni (Dim), létrehozni és inicializálni a tömbváltozókat a VBA -ban

Mi az a VBA tömbváltozó?

A VBA tömbváltozót úgy lehet felfogni, mint egy változócsoportot, ugyanazon a néven tárolva, és ugyanolyan adattípussal. Egy tömb szöveget, számokat vagy objektumokat tárolhat.

A tömb egy elemére hivatkozik az indexszám használatával.

A tömbváltozót ugyanúgy deklarálhatja, mint bármely más változót a Dim, Static, Public vagy Private kulcsszó használatával.

Statikus tömbök

Kétféle tömb létezik - statikus és dinamikus. A statikus tömb a tömb kezdeti deklarálásakor megadott mérettel van deklarálva. Ezt fix tömbnek is nevezik.

1 Dim intA (4) egész szám

A fenti tömböt a Dim utasítással deklaráljuk egy eljárás vagy modul szintjén, és a tömb mérete 5, mivel nem adtuk meg a tömb LBound értékét.

Nem, ez nem elírás! A tömb mérete 5, annak ellenére, hogy 4 -et adott meg a tömbben. Ennek oka, hogy a tömbindexek automatikusan nulláról indulnak.

Tömbindexek

A tömbindexek automatikusan nulláról indulnak, kivéve, ha Opcióalap 1 a kódmodul tetején található.

Ha Opcióalap 1 deklarálva van, akkor a tömbök automatikusan 1 -től indulnak.

A változók ilyen módon történő deklarálását azonban problémásnak tartom. A kódellenőrzők nem biztos, hogy tisztában vannak azzal, hogy a tömbök nulláról indulnak, vagy az Opcióbázis 1 deklarációból

Ehelyett inkább kifejezetten deklarálom a tömbök kezdő és véghelyzetét:

1 Az intA -t (2–5) dimenzióként egészben

Figyelje meg, hogy amikor ezt megteszi, a tömböt bármilyen számmal elindíthatja (nem csak 1 vagy 0).

Dinamikus tömbök

A Dynamic Array változó olyan tömb, amelynek mérete futás közben megváltoztatható. Dinamikus változókat deklarál méret nélkül.

1 Dim intA () egész szám

A ReDim utasítással megadhatja a tömb méretét a tömb létrehozása után.

1 ReDim intA (2)

A dinamikus tömb bármikor átméretezhető. A ReDim utasítás használata esetén azonban minden létező érték törlődik. A meglévő tömbértékek megőrzéséhez használja a ReDim Preserve helyette.

1 ReDim Preserve intA (2)

Dinamikus tömböt deklarálhat eljárás, modul vagy globális szinten, de csak egy eljárásban használhatja a ReDim utasítást.

Változatos tömbök

A variáns tömbök dinamikus tömbök, amelyekkel könnyebb dolgozni.

1 Dim varNames ()

Vegye figyelembe, hogy nem kell megadnia az adattípust (feltételezzük, hogy variáns) vagy a tömb méretét.

Amint az alábbiakban látni fogjuk, inicializálhatja a tömbváltozatokat a tömbfunkció használatával (nem kell először tömböket átméretezni)!

Nyilvántartás modul és nyilvános tömbök

Amint fentebb látható, tömbök deklarálhatók az eljárásokon belül, az eljáráson belüli használatra:

1234 Sub StaticArray ()'deklarálja a tömböt, amelynek LBound értéke 1 és UBound értéke 4Dim IntA (1–4) egész számkéntEnd Sub

De deklarálhatók modul vagy globális szinten is.

1234567 Explicit lehetőség'deklarálja a tömböt, amelynek LBound értéke 1 és UBound értéke 4Dim IntA (1–4) egész számkéntSub StaticArray ()End Sub

Ebben a példában a tömbváltozó a kódmodulon belül bárhol meghívható. Ehelyett nyilvános tömböt deklarálhat, amely a VBA -projekt során használható (lásd a következő részt).

Nyilvános tömb deklarálása

Nyilvános statikus tömböt deklarál, mint nyilvános változót.

1 Nyilvános strNames (3) karakterláncként

Ennek a nyilatkozatnak a modul tetején kell lennie, az Option Explicit alatt. Ezt követően a VBA -projekt során bármilyen modulban vagy eljárásban felhasználható.

Ha a tömböt a modul tetején deklarálja, de a Dim kulcsszóval, akkor a tömb használata az adott modulra korlátozódik. Ha a tömböt külön modulban szeretné használni, az hibát eredményezne.

Inicializálja a tömböket

A statikus tömbhöz a következő módon rendelhet értékeket.

1234567891011 Sub StaticArray ()'deklarálja a tömböt, amelynek LBound értéke 1 és UBound értéke 4Dim IntA (1–4) egész számként'inicializálja a tömbötIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'jelenítse meg a tömb 2. pozíciójának eredményét a közvetlen ablakbanHibakeresés. IntA nyomtatása (2)End Sub

Ha futtatja a fenti eljárást, a 20 érték megjelenik a közvetlen ablakban.

Ugyanilyen módon hozzárendelheti az értékeket egy dinamikus tömbhöz is

12345678910111213 Sub DynamicArray ()'deklarálja a dinamikus tömböt, de kihagyja a kötött értékeketDim IntA () mint egész'inicializálja a tömbötReDim IntA (1-4)IntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'jelenítse meg a tömb 2. pozíciójának eredményét a közvetlen ablakbanHibakeresés. NyomtatásIntA (2)End Sub

Tömb funkció

Azonban, csak a variáns tömbvel, használhatja a tömb funkciót, amely könnyebb lehet, mint a standard módszer.

12 'töltse ki a tömbötintA () = tömb (10, 20, 30, 40)

Töltse fel a tömböt hurokkal

A tömböket úgy is feltöltheti, hogy az Excel celláinak sorozata között ciklusokat hajt végre

1234567891011121314151617 Sub TestDynamicArrayFromExcel ()'deklarálja a tömbötDim strNames () karakterláncként'deklaráljon egy egész számot, hogy megszámolja a tartomány soraitDim n Mint egész'deklarálja a ciklus egész számátDim i As Integer'számolja meg a tartomány soraitn = Tartomány ("A1", Tartomány ("A1"). Vége (xlDown)). Sorok. Szám'redimálja a tömböt a tartományban lévő sorok számára.ReDim strNames (n)I = 0 -tól n -igstrNames (i) = Tartomány ("A1"). Eltolás (i + 1, 0)Következő i'mutassa meg a tömb értékeitMsgBox csatlakozás (strNames ())End Sub

Inicializálja újra a tömböket

A tömböt a kód bármely szakaszában újra inicializálhatja, de akkor elveszíti a tömb adott pozíciójában található eredeti értéket.

1234567891011121314 Sub StaticArray ()'deklarálja a tömböt, amelynek LBound értéke 1 és UBound értéke 4Dim IntA (1–4) egész számként'inicializálja a tömbötIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'jelenítse meg a tömb 2. pozíciójának eredményét a közvetlen ablakbanHibakeresés. IntA nyomtatása (2)'inicializálja újra a tömbötintA (2) = 200Hibakeresés. IntA nyomtatása (2)End Sub

A fenti példában a Statikus tömb megtartja az összes értéket, kivéve a 2. pozícióban lévő értéket - ez az érték 200 -ra változik.

A ReDim használata

Ha dinamikus tömböt használ, a ReDim utasítással állíthatja be a tömb méretét. A ReDim utasítással később a kódban módosíthatja a tömb méretét, ahányszor csak szükséges. Az alábbi kódsor újra inicializálja az intA tömböt 2 -es méretre (Ne feledje - a tömbindex 0 -tól kezdődik!)

1 ReDim intA (1) egész számként

Tehát a ReDim utasítást tartalmazó kód az alábbi példához hasonlít.

1234567891011121314151617 Sub TestDynamicArray ()'deklarálja a tömbötDim intA () mint egészReDim intA (2)'töltse fel a tömböt számokkalintA (0) = 2intA (1) = 5intA (2) = 9'mutassa a számot az 1 -es pozícióbanHibakeresés. IntA nyomtatása (1)'módosítsa a tömböt a méret megváltoztatásáhozReDim intA (3)intA (0) = 6intA (1) = 8'ezúttal jelenítse meg a számot az 1. pozícióbanHibakeresés. IntA nyomtatása (1)End Sub

Ha futtatja a fenti eljárást, az 5 -ös érték jelenik meg a közvetlen ablakban, majd a 8 -as érték jelenik meg, miután a ReDim segítségével átméreteztük a tömböt, és újra feltöltöttük. Mivel azonban nem töltettük ki az IntA-t (2), és nem használtuk a Re-Dim Preserve-t, a tömb adott pozíciójának értéke törlődik, és a tömb 3. és 4. pozíciója is nulla lesz.

A ReDim Preserve használata

Ha ReDim Preserve -t használunk, akkor megtartja a tömb eredeti értékeit.

1234567891011121314151617 Sub TestDynamicArray ()'deklarálja a tömbötDim intA () mint egészReDim intA (2)'töltse fel a tömböt számokkalintA (0) = 2intA (1) = 5intA (2) = 9'mutassa a számot a 2 -es pozícióbanHibakeresés. IntA nyomtatása (2)'redimálja a tömbötReDim intA (3)intA (0) = 6intA (1) = 8'mutasd újra a számot a 2 -es pozícióbanHibakeresés. IntA nyomtatása (2)End Sub

A fent látható mindkét üzenetmezőben a 9 -es szám jelenik meg, mivel a ReDim Preserve utasítás megtartotta ezt az értéket ebben a helyzetben.

Segít a fejlesztés a helyszínen, megosztva az oldalt a barátaiddal

wave wave wave wave wave