Kolekce a pole ve Visual Basicu pro Aplikace

Přehled informací

Objekt Collection

Objekt Collection je uspořádaná množina položek, na kterou může být odkazováno jako samostatnou jednotku. Objekt Collection nám umožňuje odkazovat se na skupinu souvisejících položek jako na jediný objekt. Jedinou společnou vlastností položek objektu Collection, nazývaných členy, je jejich příslušnost ke společné kolekci. Členy objektu Collection nemusejí být nutně stejného datového typu.

Kolekce může být vytvořena stejným způsobem, jako kterýkoliv jiný objekt:

              Dim X As New Collection

Jakmile je objekt Collection vytvořen, mohou být do něj přidávány nové členy pomocí metody Add a odebírány pomocí metody Remove. Metoda Item vrací jednotlivé členy kolekce, celá kolekce může být zpracována pomocí cyklu For Each ... Next.

Více o objektu Collection se dozvíte v lekci Objekt Collection v části ActiveX automatizace.

Pole proměnných

Pole se deklarují stejně, jako jiné proměnné, pomocí příkazů Dim, Static, Private nebo Public. Rozdíl mezi skalárními proměnnými (těmi, které nejsou poli) a proměnnými polí spočívá v tom, že obecně musíme stanovit velikost pole. Visual Basic pro Aplikace rozeznává dva typy pole:

Pole může být indexováno od 0 nebo od 1. Způsob indexování závisí na nastavení příkazu Option Base. Není-li specifikován příkaz Option Base =  1, začínají se všechna pole indexovat od nuly.

Deklarace pole o pevné velikosti

V následujících řádcích kódu je deklarováno pole o pevné velikosti jako celočíselné pole (Integer) o 11 řádcích a 11 sloupcích:


              Dim MePole(10, 10) As Integer

První argument představuje řádky, druhý argument sloupce. Podobně jako u ostatních deklarací proměnných platí, že v případech, kdy pro prvky pole nedefinujeme typ dat, deklaruje se pole s typem Variant.

Všechny číselné prvky pole typu Variant zabírají 16 bajtů. Všechny znakové prvky typu Variant zabírají 22 bajtů. Chceme-li napsat co nejkompaktnější kód, deklarujeme pole explicitně s konkrétním typem dat a neponecháváme je typu Variant (viz příklad deklarace pole typu integer).

Maximální velikost pole se liší podle použitého operačního systému a velikosti dostupné paměti. Zpracování pole, jehož velikost překračuje kapacitu dostupné paměti RAM, je podstatně pomalejší, protože systém musí data číst z disku a zapisovat na disk.

Deklarace dynamického pole

Při deklaraci dynamického pole lze určit velikost pole až při zpracování kódu programu. Jak je uvedeno v následujícím příkladu, závorky se ponechají prázdné:


              Dim sngPole() As Single

K implicitní deklaraci pole v rámci procedury lze použít příkaz ReDim. Používáme-li příkaz ReDim, musíme zapsat název pole pečlivě, abychom se nepřepsali. Dokonce i v případech, kdy je v modulu použit příkaz Option Explicit, by se vytvořilo druhé pole.

V proceduře v rámci oboru pole se příkazy ReDim používají ke změně počtu rozměrů pole, k definici počtu prvků pole a k definici horní a dolní meze jednotlivých rozměrů. Příkaz ReDim lze používat ke změně dynamického pole podle potřeby. Kdykoliv však tento příkaz použijeme, ztratí se hodnoty, uložené v poli. Ke zvětšení pole se zachováním stávajících hodnot pole se používá příkaz ReDim Preserve. Následující příklad rozšiřuje pole promPole o 10 prvkům aniž by se ztratily aktuální hodnoty původních prvků:


              ReDim Preserve promPole(UBound(promPole) + 10) 

Použijeme-li klíčové slovo Preserve s dynamickým polem, můžeme měnit pouze horní mez posledního rozměru, avšak nemůžeme měnit počet rozměrů.