VBA - Deklarovať (stmievať), vytvárať a inicializovať premennú poľa

Tento tutoriál ukáže, ako deklarovať (dimenzovať), vytvárať a inicializovať premenné polí vo VBA.

Čo je to premenná poľa VBA?

Premennú poľa VBA je možné považovať za skupinu premenných, uložených pod rovnakým názvom a s rovnakým dátovým typom. Pole môže ukladať text, čísla alebo objekty.

Na prvok v poli sa odvolávate pomocou jeho indexového čísla.

Premennú poľa môžete deklarovať rovnakým spôsobom ako akúkoľvek inú premennú pomocou kľúčového slova Dim, Static, Public alebo Private.

Statické polia

Existujú 2 typy polí - statické a dynamické. Statické pole je deklarované s veľkosťou zadanou pri počiatočnom deklarovaní poľa. Hovorí sa mu tiež pevné pole.

1 Dim intA (4) ako celé číslo

Vyššie uvedené pole je deklarované pomocou príkazu Dim na úrovni procedúry alebo modulu a veľkosť poľa je 5, pretože sme deklarovali hodnotu LBound poľa.

Nie, to nie je preklep! Veľkosť poľa je 5, napriek tomu, že do poľa zadáte 4. Indexy polí sa totiž automaticky začínajú na nule.

Indexy polí

Indexy polí sa automaticky začínajú od nuly, pokiaľ nie je Možnosť Základ 1 je deklarovaný v hornej časti modulu kódu.

Ak Možnosť Základ 1 je deklarovaný, potom sa polia automaticky začnú o 1.

Považujem však deklarovanie premenných takýmto spôsobom za problematické. Recenzenti kódu si nemusia byť vedomí toho, že polia začínajú na nule alebo deklarácie Option Base 1

Namiesto toho radšej explicitne deklarujem počiatočnú a koncovú polohu polí:

1 Dim intA (2 až 5) ako celé číslo

Všimnite si toho, že keď tak urobíte, pole môžete začať na ľubovoľnom čísle (nie iba na 1 alebo 0).

Dynamické polia

Premenná Dynamic Array je pole, ktorého veľkosť je možné zmeniť za behu. Deklarujete dynamické premenné bez veľkosti.

1 Dim intA () ako celé číslo

Príkaz ReDim môžete použiť na zadanie veľkosti poľa po vytvorení poľa.

1 ReDim intA (2)

Veľkosť dynamického poľa môžete kedykoľvek zmeniť. Pri použití vyhlásenia ReDim sa však všetky existujúce hodnoty vymažú. Na zachovanie existujúcich hodnôt polí použite Zachovať ReDim namiesto.

1 ReDim Preserve intA (2)

Dynamické pole môžete deklarovať na úrovni Procedúra, Modul alebo Globálne, ale príkaz ReDim môžete použiť iba v rámci Procedúry.

Variantné polia

Polia variantov sú dynamické polia, s ktorými sa pracuje jednoduchšie.

1 Dim varNames ()

Všimnite si, že nemusíte špecifikovať typ údajov (predpokladá sa, že sú variantné) alebo veľkosť poľa.

Ako uvidíme nižšie, variantné polia môžete inicializovať pomocou funkcie poľa (nie je potrebné najskôr meniť veľkosť polí)!

Deklarujte modul a verejné polia

Ako je uvedené vyššie, polia je možné deklarovať v rámci postupov na použitie v rámci tohto postupu:

1234 Sub StaticArray ()'deklarujte pole s hodnotou LBound 1 a hodnotou UBound 4Dim IntA (1 až 4) ako celé čísloKoniec pod

Môžu byť však deklarované aj na úrovni modulu alebo na globálnej úrovni.

1234567 Možnosť explicitná'deklarujte pole s hodnotou LBound 1 a hodnotou UBound 4Dim IntA (1 až 4) ako celé čísloSub StaticArray ()Koniec pod

V tomto prípade je možné premennú poľa zavolať kdekoľvek v tomto module kódu. Namiesto toho môžete deklarovať verejné pole, ktoré je možné použiť vo vašom projekte VBA (pozri nasledujúcu časť).

Vyhlásenie o verejnom poli

Verejné statické pole deklarujete rovnako ako verejnú premennú.

1 Public strNames (3) ako reťazec

Toto vyhlásenie by sa malo nachádzať v hornej časti modulu pod explicitnou možnosťou. Potom by sa mohol použiť v celom vašom projekte VBA v akomkoľvek module alebo procedúre.

Ak deklarujete pole v hornej časti modulu, ale s kľúčovým slovom Dim, použitie tohto poľa je obmedzené na tento jednotlivý modul. Pri pokuse o použitie poľa v samostatnom module dôjde k chybe.

Inicializácia polí

Statickému poľu môžete priradiť hodnoty nasledujúcim spôsobom.

1234567891011 Sub StaticArray ()'deklarujte pole s hodnotou LBound 1 a hodnotou UBound 4Dim IntA (1 až 4) ako celé číslo'inicializujte poleIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'zobraziť výsledok pozície 2 poľa v bezprostrednom okneDebug.Print IntA (2)Koniec pod

Ak spustíte vyššie uvedený postup, v bezprostrednom okne sa zobrazí hodnota 20.

Rovnakým spôsobom môžete tiež priradiť hodnoty k dynamickému poľu

12345678910111213 Sub DynamicArray ()'deklarujte dynamické pole, ale vynechajte viazané hodnotyDim IntA () ako celé číslo'inicializujte poleReDim IntA (1 až 4)IntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'zobraziť výsledok pozície 2 poľa v bezprostrednom okneDebug.PrintIntA (2)Koniec pod

Funkcia poľa

Avšak, iba s variantným poľom, Môžete použiť funkciu poľa, ktorá môže byť jednoduchšia ako štandardná metóda.

12 “naplňte poleintA () = pole (10, 20, 30, 40)

Naplňte pole slučkou

Polia môžete tiež naplniť opakovaním v rade buniek v programe Excel

1234567891011121314151617 Sub TestDynamicArrayFromExcel ()'deklarujte poleDim strNames () ako reťazec'deklarujte celé číslo na počítanie riadkov v rozsahuDim n ako celé číslo'deklarujte celé číslo pre slučkuDim i As Integer„spočítajte riadky v rozsahun = Rozsah ("A1", Rozsah ("A1"). Koniec (xlDown)). Riadky. Počet'redimujte pole na počet riadkov v rozsahu.ReDim strNames (n)Pre i = 0 až nstrNames (i) = Rozsah ("A1"). Ofset (i + 1, 0)Ďalej i'zobraziť hodnoty v poliPripojenie k MsgBox (strNames ())Koniec pod

Znovu inicializujte polia

Svoje pole môžete znova inicializovať v ktorejkoľvek fáze kódu, ale potom prídete o pôvodnú hodnotu obsiahnutú v danej pozícii vo vašom poli.

1234567891011121314 Sub StaticArray ()'deklarujte pole s hodnotou LBound 1 a hodnotou UBound 4Dim IntA (1 až 4) ako celé číslo'inicializujte poleIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'zobraziť výsledok pozície 2 poľa v bezprostrednom okneDebug.Print IntA (2)'znova inicializujte poleintA (2) = 200Debug.Print IntA (2)Koniec pod

Vo vyššie uvedenom príklade statické pole zachová všetky hodnoty okrem hodnoty na pozícii 2 - táto hodnota sa zmení na 200.

Použitie ReDim

Ak používate dynamické pole, príkaz ReDim sa používa na nastavenie veľkosti vášho poľa. Príkaz ReDim môžete vo svojom kóde použiť následne na zmenu veľkosti poľa toľkokrát, koľkokrát budete potrebovať. Nasledujúci riadok kódu znova inicializuje pole intA tak, aby malo veľkosť 2 (Pamätajte si - index poľa začína na 0!)

1 ReDim intA (1) ako celé číslo

Kód obsahujúci príkaz ReDim by teda vyzeral ako v nižšie uvedenom príklade.

1234567891011121314151617 Sub TestDynamicArray ()'deklarujte poleDim intA () ako celé čísloReDim intA (2)'naplňte pole číslamiintA (0) = 2intA (1) = 5intA (2) = 9„Ukážte číslo na pozícii 1Debug.Print intA (1)'redim poľa zmeniť veľkosťReDim intA (3)intA (0) = 6intA (1) = 8'tentokrát ukážte číslo na pozíciu 1Debug.Print intA (1)Koniec pod

Ak spustíte vyššie uvedený postup, v bezprostrednom okne sa zobrazí hodnota 5 a potom sa zobrazí hodnota 8, akonáhle zmeníme veľkosť poľa pomocou ReDim a repopulujeme ho. Pretože sme však neobsadili IntA (2) a nepoužili sme funkciu Re-Dim Preserve, hodnota v tejto pozícii v poli bude odstránená a pozícia 3 aj 4 v poli bude nulová.

Použitie ReDim Preserve

Ak použijeme ReDim Preserve, zachová pôvodné hodnoty obsiahnuté v poli.

1234567891011121314151617 Sub TestDynamicArray ()'deklarujte poleDim intA () ako celé čísloReDim intA (2)'naplňte pole číslamiintA (0) = 2intA (1) = 5intA (2) = 9„Ukážte číslo na pozícii 2Debug.Print intA (2)„redimovať poleReDim intA (3)intA (0) = 6intA (1) = 8'znova ukážte číslo na pozícii 2Debug.Print intA (2)Koniec pod

V obidvoch zobrazených poliach so správami sa číslo 9 zobrazí ako príkaz ReDim Preserve, ktorý ponechá túto hodnotu na tejto pozícii.

Vám pomôže rozvoju miesta, zdieľať stránku s priateľmi

wave wave wave wave wave