VBA - Deklarace (dim), vytváření a inicializace proměnné pole

Tento tutoriál předvede, jak deklarovat (dim), vytvářet a inicializovat proměnné pole ve VBA

Co je to proměnná pole VBA?

Proměnnou pole VBA lze považovat za skupinu proměnných, uloženou pod stejným názvem a se stejným datovým typem. Pole může ukládat text, čísla nebo objekty.

Na prvek v poli odkazujete pomocí jeho indexového čísla.

Proměnnou pole můžete deklarovat stejným způsobem jako jakoukoli jinou proměnnou pomocí klíčového slova Dim, Static, Public nebo Private.

Statická pole

Existují 2 typy polí - statické a dynamické. Statické pole je deklarováno s uvedenou velikostí při počátečním deklarování pole. Říká se mu také Fixed Array.

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

Výše uvedené pole je deklarováno pomocí příkazu Dim na úrovni procedury nebo modulu a velikost pole je 5, protože jsme nedeklarovali hodnotu LBound pole.

Ne, to není překlep! Velikost pole je 5, přestože do pole zadáte 4. Důvodem je, že maticové indexy automaticky začínají na nule.

Indexy pole

Indexy polí automaticky začínají na nule, ledaže Možnost Základna 1 je deklarováno v horní části modulu kódu.

Li Možnost Základna 1 je deklarováno, pak se pole automaticky spustí v 1.

Považuji však deklaraci proměnných takovým způsobem za problematickou. Kontroloři kódu si nemusí být vědomi toho, že pole začínají na nule nebo deklarace Option Base 1

Místo toho dávám přednost výslovné deklaraci počáteční a koncové polohy polí:

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

Všimněte si, že když tak učiníte, můžete pole spustit na libovolném čísle (ne jen 1 nebo 0).

Dynamická pole

Proměnná Dynamic Array je pole, jehož velikost lze za běhu změnit. Deklarujete dynamické proměnné bez velikosti.

1 Dim intA () jako celé číslo

Pomocí příkazu ReDim můžete určit velikost pole po vytvoření pole.

1 ReDim intA (2)

Velikost dynamického pole můžete kdykoli změnit. Při použití příkazu ReDim jsou však všechny existující hodnoty vymazány. Chcete -li zachovat stávající hodnoty pole, použijte Zachovat ReDim namísto.

1 ReDim Zachovat intA (2)

Dynamické pole můžete deklarovat na úrovni Procedura, Modul nebo Globální, ale příkaz ReDim můžete použít pouze v rámci Procedury.

Pole variant

Varianta pole jsou dynamická pole, se kterými je snadnější pracovat.

1 Dim varNames ()

Všimněte si, že nemusíte zadávat datový typ (předpokládá se, že je variantní) nebo velikost pole.

Jak uvidíme níže, variantní pole můžete inicializovat pomocí funkce Array (není třeba nejprve měnit velikost polí)!

Deklarujte modul a veřejná pole

Jak je uvedeno výše, pole lze deklarovat v rámci postupů pro použití v rámci tohoto postupu:

1234 Sub StaticArray ()'deklarujte pole s hodnotou LBound 1 a hodnotou UBound 4.'Dim IntA (1 až 4) jako celé čísloEnd Sub

Mohou však být také deklarovány na úrovni modulu nebo na globální úrovni.

1234567 Možnost Explicitní'deklarujte pole s hodnotou LBound 1 a hodnotou UBound 4.'Dim IntA (1 až 4) jako celé čísloSub StaticArray ()End Sub

V tomto příkladu lze proměnnou pole volat kdekoli v tomto modulu kódu. Místo toho můžete deklarovat veřejné pole, které lze použít v celém projektu VBA (viz další část).

Deklarace veřejného pole

Veřejné statické pole deklarujete stejně jako veřejnou proměnnou.

1 Veřejné strNames (3) jako řetězec

Toto prohlášení by muselo jít v horní části modulu pod Explicitní možnost. Potom by mohl být použit v celém vašem projektu VBA v jakémkoli modulu nebo proceduře.

Pokud deklarujete pole v horní části modulu, ale s klíčovým slovem Dim, pak je použití tohoto pole omezeno na tento jednotlivý modul. Pokus o použití pole v samostatném modulu by vedl k chybě.

Inicializace polí

Statickému poli můžete přiřadit hodnoty následujícím způsobem.

1234567891011 Sub StaticArray ()'deklarujte pole s hodnotou LBound 1 a hodnotou UBound 4.'Dim IntA (1 až 4) jako celé číslo“inicializujte poleIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'ukázat výsledek pozice 2 pole v bezprostředním okně.'Debug.Print IntA (2)End Sub

Pokud spustíte výše uvedený postup, v bezprostředním okně se zobrazí hodnota 20.

Stejným způsobem můžete také přiřadit hodnoty dynamickému poli

12345678910111213 Sub DynamicArray ()'deklarujte dynamické pole, ale vynechejte vázané hodnoty.'Dim IntA () jako celé číslo“inicializujte poleReDim IntA (1 až 4)IntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'ukázat výsledek pozice 2 pole v bezprostředním okně.'Debug.PrintIntA (2)End Sub

Funkce pole

Nicméně, pouze s variantním polem, můžete použít funkci Array, což může být jednodušší než pomocí standardní metody.

12 'naplnit poleintA () = Pole (10, 20, 30, 40)

Naplňte pole smyčkou

Pole můžete také naplnit smyčkou v řadě buněk v aplikaci Excel

1234567891011121314151617 Dílčí testDynamicArrayFromExcel ()'deklarujte pole.'Dim strNames () jako řetězec'deklarujte celé číslo pro počítání řádků v rozsahu.'Dim n jako celé číslo'deklarujte celé číslo pro smyčku.'Dim i As Integer„spočítejte řádky v rozsahun = Rozsah ("A1", Rozsah ("A1"). Konec (xlDown)). Rows.Count'redim pole na množství řádků v rozsahu.'ReDim strNames (n)Pro i = 0 až nstrNames (i) = Range ("A1"). Offset (i + 1, 0)Příště já'ukazují hodnoty v poli.'Připojení MsgBox (strNames ())End Sub

Znovu inicializujte pole

Pole můžete znovu inicializovat v jakékoli fázi kódu, ale poté ztratíte původní hodnotu obsaženou v této pozici ve vašem poli.

1234567891011121314 Sub StaticArray ()'deklarujte pole s hodnotou LBound 1 a hodnotou UBound 4.'Dim IntA (1 až 4) jako celé číslo“inicializujte poleIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'ukázat výsledek pozice 2 pole v bezprostředním okně.'Debug.Print IntA (2)'znovu inicializujte poleintA (2) = 200Debug.Print IntA (2)End Sub

Ve výše uvedeném příkladu statické pole zachová všechny hodnoty, kromě hodnoty na pozici 2 - tato hodnota se změní na 200.

Použití ReDim

Pokud používáte dynamické pole, příkaz ReDim se používá k nastavení velikosti vašeho pole. Pomocí příkazu ReDim ve svém kódu můžete následně změnit velikost pole tolikrát, kolikrát potřebujete. Níže uvedený řádek kódu znovu inicializuje pole intA tak, aby mělo velikost 2 (Pamatujte - index pole začíná na 0!)

1 ReDim intA (1) jako Integer

Takže kód včetně příkazu ReDim by vypadal jako níže uvedený příklad.

1234567891011121314151617 Dílčí testDynamicArray ()'deklarujte pole.'Dim intA () jako celé čísloReDim intA (2)'naplňte pole čísly.'intA (0) = 2intA (1) = 5intA (2) = 9„Ukažte číslo na pozici 1Debug.Print intA (1)'redim pole změnit velikostReDim intA (3)intA (0) = 6intA (1) = 8'tentokrát ukažte číslo na pozici 1Debug.Print intA (1)End Sub

Pokud spustíte výše uvedený postup, v bezprostředním okně se zobrazí hodnota 5 a poté hodnota 8, jakmile změníme velikost pole pomocí ReDim a repopulujeme jej. Protože jsme však nevyplnili IntA (2) a nepoužili jsme funkci Re-Dim Preserve, hodnota v této poloze v poli bude odstraněna a pozice 3 a 4 v poli budou nulové.

Použití ReDim Preserve

Pokud použijeme ReDim Preserve, zachová původní hodnoty obsažené v poli.

1234567891011121314151617 Dílčí testDynamicArray ()'deklarujte poleDim intA () jako celé čísloReDim intA (2)'naplňte pole čísly.'intA (0) = 2intA (1) = 5intA (2) = 9„Ukažte číslo na pozici 2Debug.Print intA (2)'redim poleReDim intA (3)intA (0) = 6intA (1) = 8'znovu zobrazte číslo na pozici 2Debug.Print intA (2)End Sub

V obou polích zpráv zobrazených výše se číslo 9 zobrazí, protože příkaz ReDim Preserve ponechal tuto hodnotu na této pozici.

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave