Polia vo Visual Basic for Application

Polia vo Visual Basic for Application sú štruktúry, ktoré zvyčajne ukladajú sady súvisiacich premenných rovnakého typu. Položky poľa sú prístupné podľa ich číselného indexu.

Napríklad existuje tím 20 ľudí, ktorých mená je potrebné uložiť pre neskoršie použitie v kóde VBA. Dalo by sa jednoducho deklarovať 20 premenných, ktoré by obsahovali každý názov, napríklad:

Dim Team_Member1 ako reťazec Dim Team_Member2 ako reťazec ... Dim Team_Member20 ako reťazec

Môžete však použiť oveľa jednoduchší a organizovanejší spôsob – uložiť zoznam mien členov tímu do poľa 20 premenných, ako napr. Reťazec:

Dim Team_Members(1 až 20) ako reťazec

V riadku uvedenom vyššie sme deklarovali pole. Teraz napíšme hodnotu pre každý z jeho prvkov, takto:

Team_Members(1) = "John Smith"

Ďalšia výhoda ukladania údajov do poľa v porovnaní s použitím samostatných premenných sa prejaví, keď je potrebné vykonať rovnakú akciu na každom prvku poľa. Ak by boli mená členov tímu uložené v 20 samostatných premenných, potom by bolo potrebné zakaždým napísať 20 riadkov kódu na vykonanie rovnakej akcie na každom z nich. Ak sú však názvy uložené v poli, potom môžete vykonať požadovanú akciu s každým z nich pomocou jednoduchej slučky.

Ako to funguje, je znázornené nižšie na príklade kódu, ktorý vytlačí mená každého člena tímu postupne v bunkách stĺpca. A aktívny pracovný hárok programu Excel.

Pre i = 1 až 20 buniek (i, 1). Hodnota = Členovia_tímu (i) Ďalej i

Je zrejmé, že práca s poľom, v ktorom je uložených 20 mien, je oveľa menej ťažkopádna a presnejšia ako použitie 20 samostatných premenných. Ale čo ak týchto mien nie je 20, ale 1000? A ak sa navyše vyžaduje, aby sa priezviská a priezviská uchovávali oddelene?! Je jasné, že zvládnuť taký objem dát v kóde VBA bez pomoci poľa bude čoskoro úplne nemožné.

Viacrozmerné polia v Exceli Visual Basic

Vyššie diskutované polia Visual Basic sa považujú za jednorozmerné. To znamená, že uchovávajú jednoduchý zoznam mien. Polia však môžu mať viacero rozmerov. Napríklad dvojrozmerné pole možno porovnať s mriežkou hodnôt.

Povedzme, že chcete uložiť údaje o dennom predaji za január pre 5 rôznych tímov. Vyžaduje si to dvojrozmerné pole pozostávajúce z 5 sád metrík na 31 dní. Vyhlásime pole takto:

Dim Jan_Sales_Figures (1 až 31, 1 až 5) ako mena

Prístup k prvkom poľa Jan_Sales_Figures, musíte použiť dva indexy označujúce deň v mesiaci a číslo príkazu. Napríklad adresa prvku obsahujúceho údaje o predaji pre 2-oh tímy pre 15 Január by sa písal takto:

Jan_Sales_Figures(15, 2)

Rovnakým spôsobom môžete deklarovať pole s 3 alebo viacerými rozmermi – stačí pridať ďalšie rozmery do deklarácie poľa a použiť ďalšie indexy na odkazovanie na prvky tohto poľa.

Deklarovanie polí v Excel Visual Basic

V tomto článku sme sa už pozreli na niekoľko príkladov deklarovania polí vo VBA, ale táto téma si zaslúži bližší pohľad. Ako je znázornené, jednorozmerné pole možno deklarovať takto:

Dim Team_Members(1 až 20) ako reťazec

Takáto deklarácia hovorí kompilátoru VBA, že pole Členovia tímu pozostáva z 20 premenných, ku ktorým možno pristupovať pri indexoch od 1 do 20. Mohli by sme však uvažovať o číslovaní našich premenných poľa od 0 do 19, v takom prípade by pole malo byť deklarované takto:

Dim Team_Members(0 až 19) ako reťazec

V skutočnosti číslovanie prvkov poľa v predvolenom nastavení začína od 0 a v deklarácii poľa nemusí byť počiatočný index vôbec špecifikovaný, napríklad takto:

Dim Team_Members(19) Ako reťazec

Kompilátor VBA bude takýto záznam považovať za deklarovanie poľa 20 prvkov s indexmi od 0 do 19.

Rovnaké pravidlá platia pri deklarovaní viacrozmerných polí Visual Basic. Ako už bolo uvedené v jednom z príkladov, pri deklarovaní dvojrozmerného poľa sú indexy jeho rozmerov oddelené čiarkou:

Dim Jan_Sales_Figures (1 až 31, 1 až 5) ako mena

Ak však nešpecifikujete počiatočný index pre obe dimenzie poľa a deklarujete ho takto:

Dim Jan_Sales_Figures(31, 5) Ako mena

potom sa tento záznam bude považovať za dvojrozmerné pole, ktorého prvý rozmer obsahuje 32 prvkov s indexmi od 0 do 31 a druhý rozmer poľa obsahuje 6 prvkov s indexmi od 0 do 5.

Dynamické polia

Všetky polia vo vyššie uvedených príkladoch majú pevný počet rozmerov. V mnohých prípadoch však vopred nevieme, akú veľkosť má mať naše pole. Zo situácie sa môžeme dostať vyhlásením obrovského poľa, ktorého veľkosť bude určite väčšia, ako je potrebné pre našu úlohu. Takéto riešenie však bude vyžadovať veľa pamäte navyše a môže spomaliť program. Existuje lepšie riešenie. Môžeme použiť dynamické pole – ide o pole, ktorého veľkosť je možné počas vykonávania makra ľubovoľne nastavovať a meniť.

Dynamické pole je deklarované s prázdnymi zátvorkami, ako je toto:

Dim Team_Members() ako reťazec

Ďalej budete musieť deklarovať rozmer poľa počas vykonávania kódu pomocou výrazu ReDim:

ReDim Team_Members (1 až 20)

A ak počas vykonávania kódu potrebujete znova zmeniť veľkosť poľa, môžete znova použiť výraz ReDim:

If Team_Size > 20 Then ReDim Team_Members(1 To Team_Size) End If

Majte na pamäti, že zmena veľkosti dynamického poľa týmto spôsobom bude mať za následok stratu všetkých hodnôt uložených v poli. Ak chcete uložiť údaje už do poľa, musíte použiť kľúčové slovo zachovaťako je uvedené nižšie:

If Team_Size > 20 Then ReDim Preserve Team_Members(1 To Team_Size) End If

Bohužiaľ kľúčové slovo zachovať možno použiť iba na zmenu hornej hranice rozmeru poľa. Dolnú hranicu poľa nemožno týmto spôsobom zmeniť. Ak má pole viacero rozmerov, použite kľúčové slovo zachovať, možno zmeniť veľkosť iba posledného rozmeru poľa.

Nechaj odpoveď