VBA - Deklarēt (Dim), izveidot un inicializēt masīva mainīgo

Šī apmācība parādīs, kā VBA deklarēt (dim), izveidot un inicializēt masīva mainīgos

Kas ir VBA masīva mainīgais?

VBA masīva mainīgo var uzskatīt par mainīgo grupu, kas tiek glabāta ar tādu pašu nosaukumu un kam ir tāds pats datu tips. Masīvā var saglabāt tekstu, ciparus vai objektus.

Jūs atsaucaties uz elementu masīvā, izmantojot tā indeksa numuru.

Masīva mainīgo var deklarēt tāpat kā jebkuru citu mainīgo, izmantojot Dim, Static, Public vai Private atslēgvārdu.

Statiskie masīvi

Ir divu veidu masīvi - statiski un dinamiski. Statiskais masīvs tiek deklarēts ar tā lielumu, kas norādīts, sākotnēji deklarējot masīvu. To sauc arī par fiksētu masīvu.

1 Izgaismojiet intA (4) kā veselu skaitli

Iepriekš minētais masīvs tiek deklarēts, izmantojot Dim paziņojumu procedūras vai moduļa līmenī, un masīva lielums ir 5, jo mēs neesam deklarējuši masīva vērtību LBound.

Nē, tā nav drukas kļūda! Masīva izmērs ir 5, neskatoties uz to, ka masīvā ir ievadīts 4. Tas ir tāpēc, ka masīvu indeksi automātiski sākas ar nulli.

Masīvu indeksi

Masīva indeksi automātiski sākas ar nulli, ja vien Opciju bāze 1 ir norādīts jūsu koda moduļa augšpusē.

Ja Opciju bāze 1 tiek deklarēts, tad masīvi automātiski sāksies no 1.

Tomēr es uzskatu, ka mainīgo deklarēšana šādā veidā ir problemātiska. Kodu recenzenti, iespējams, nezina, ka masīvi sākas ar nulli vai no 1. iespējas bāzes deklarācijas

Tā vietā es labprātāk skaidri paziņoju masīvu sākuma un beigu pozīcijas:

1 Izgaismojiet intA (no 2 līdz 5) kā veselu skaitli

Ņemiet vērā, ka to darot, jūs varat sākt masīvu ar jebkuru numuru (ne tikai 1 vai 0).

Dinamiskie masīvi

Dinamiskā masīva mainīgais ir masīvs, kura lielumu izpildes laikā var mainīt. Jūs deklarējat dinamiskos mainīgos bez lieluma.

1 Dim intA () kā vesels skaitlis

Varat izmantot ReDim paziņojumu, lai norādītu masīva lielumu pēc masīva izveides.

1 ReDim intA (2)

Jebkurā laikā varat mainīt dinamiskā masīva izmērus. Tomēr, izmantojot ReDim paziņojumu, visas esošās vērtības tiek izdzēstas. Lai saglabātu esošās masīva vērtības, izmantojiet ReDim Preserve tā vietā.

1 ReDim Preserve intA (2)

Jūs varat deklarēt dinamisku masīvu procedūras, moduļa vai globālā līmenī, bet jūs varat izmantot ReDim paziņojumu tikai procedūras ietvaros.

Variantu masīvi

Variantu masīvi ir dinamiski masīvi, ar kuriem ir vieglāk strādāt.

1 Dim varNames ()

Ņemiet vērā, ka jums nav jānorāda datu tips (tiek pieņemts, ka tas ir variants) vai masīva lielums.

Kā redzēsim zemāk, varat inicializēt masīvu variantus, izmantojot masīva funkciju (vispirms nav jāmaina masīvu izmēri)!

Deklarēt moduli un publiskos masīvus

Kā parādīts iepriekš, masīvus var deklarēt procedūrās, lai tos izmantotu šajā procedūrā:

1234 Sub StaticArray ()'deklarējiet masīvu ar LBound vērtību 1 un UBound vērtību 4Dim IntA (no 1 līdz 4) kā vesels skaitlisBeigu apakš

Bet tos var deklarēt arī moduļa vai globālā līmenī.

1234567 Skaidrs variants'deklarējiet masīvu ar LBound vērtību 1 un UBound vērtību 4Dim IntA (no 1 līdz 4) kā vesels skaitlisSub StaticArray ()Beigu apakš

Šajā piemērā masīva mainīgo var izsaukt jebkurā šī koda moduļa vietā. Tā vietā varat deklarēt publisku masīvu, ko var izmantot visā VBA projektā (skat. Nākamo sadaļu).

Publiskā masīva pasludināšana

Jūs deklarējat publisko statisko masīvu tāpat kā publisku mainīgo.

1 Public strNames (3) kā virkne

Šai deklarācijai vajadzētu būt jūsu moduļa augšdaļā, zem opcijas Explicit. Pēc tam to varētu izmantot visā jūsu VBA projektā jebkurā modulī vai procedūrā.

Ja masīvu deklarējat moduļa augšdaļā, bet ar atslēgvārdu Dim, tad šī masīva izmantošana ir ierobežota līdz konkrētajam modulim. Mēģinot izmantot masīvu atsevišķā modulī, radīsies kļūda.

Inicializēt masīvus

Jūs varat piešķirt vērtības statiskam masīvam šādā veidā.

1234567891011 Sub StaticArray ()'deklarējiet masīvu ar LBound vērtību 1 un UBound vērtību 4Dim IntA (no 1 līdz 4) kā vesels skaitlis'inicializējiet masīvuIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'tiešajā logā parādiet masīva 2. pozīcijas rezultātuAtkļūdot. Drukāt IntA (2)Beigu apakš

Ja veicat iepriekš minēto procedūru, vērtība 20 tiks parādīta tūlītējā logā.

Jūs varat arī piešķirt vērtības dinamiskajam masīvam tādā pašā veidā

12345678910111213 Sub DynamicArray ()'deklarēt dinamisku masīvu, bet izlaist saistītās vērtībasDim IntA () kā vesels skaitlis'inicializējiet masīvuReDim IntA (no 1 līdz 4)IntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'tiešajā logā parādiet masīva 2. pozīcijas rezultātuAtkļūdot. DrukātIntA (2)Beigu apakš

Masīva funkcija

Tomēr, tikai ar variantu masīvu, varat izmantot masīva funkciju, kas var būt vienkāršāka nekā standarta metodes izmantošana.

12 'aizpildīt masīvuintA () = masīvs (10, 20, 30, 40)

Aizpildiet masīvu ar cilpu

Varat arī aizpildīt masīvus, veicot cilpas, izmantojot Excel virkni šūnu

1234567891011121314151617 Sub TestDynamicArrayFromExcel ()'deklarējiet masīvuDim strNames () kā virkne'deklarējiet veselu skaitli, lai saskaitītu rindas diapazonāDim n Kā vesels skaitlis'deklarējiet cilpai veselu skaitliDim i As Integer'saskaitiet rindas diapazonān = diapazons ("A1", diapazons ("A1"). beigas (xlDown)). Rindas. skaits'pārveidojiet masīvu līdz rindu skaitam diapazonā.ReDim strNames (n)Attiecībā uz i = 0 līdz nstrNames (i) = Diapazons ("A1"). Nobīde (i + 1, 0)Tālāk i'parāda vērtības masīvāMsgBox Join (strNames ())Beigu apakš

Atkārtoti inicializējiet masīvus

Jūs varat atkārtoti inicializēt savu masīvu jebkurā koda posmā, taču pēc tam jūs zaudēsit sākotnējo vērtību, kas ietverta šajā masīva pozīcijā.

1234567891011121314 Sub StaticArray ()'deklarējiet masīvu ar LBound vērtību 1 un UBound vērtību 4Dim IntA (no 1 līdz 4) kā vesels skaitlis'inicializējiet masīvuIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'tiešajā logā parādiet masīva 2. pozīcijas rezultātuAtkļūdot. Drukāt IntA (2)'inicializējiet masīvu vēlreizintA (2) = 200Atkļūdot. Drukāt IntA (2)Beigu apakš

Iepriekš minētajā piemērā statiskais masīvs saglabās visas vērtības, izņemot vērtību 2. pozīcijā - šī vērtība mainīsies uz 200.

Izmantojot ReDim

Ja izmantojat dinamisko masīvu, ReDim paziņojums tiek izmantots, lai iestatītu masīva lielumu. Pēc tam savā kodā varat izmantot ReDim paziņojumu, lai mainītu masīva lielumu tik reižu, cik nepieciešams. Tālāk redzamā koda rindiņa no jauna inicializēs intA masīvu, lai tā izmērs būtu 2 (Atcerieties - masīva indekss sākas ar 0!)

1 ReDim intA (1) kā vesels skaitlis

Tātad kods, ieskaitot paziņojumu ReDim, izskatītos zemāk esošajā piemērā.

1234567891011121314151617 Sub TestDynamicArray ()'deklarējiet masīvuDim intA () Kā vesels skaitlisReDim intA (2)'aizpildiet masīvu ar skaitļiemintA (0) = 2intA (1) = 5intA (2) = 9"parādiet numuru 1. pozīcijāAtkļūdot. Drukāt intA (1)rediģējiet masīvu, lai mainītu tā lielumuReDim intA (3)intA (0) = 6intA (1) = 8'šoreiz parādiet numuru 1. pozīcijāAtkļūdot. Drukāt intA (1)Beigu apakš

Ja izpildīsit iepriekš minēto procedūru, tūlītējā logā tiks parādīta vērtība 5, un pēc tam, kad būsim mainījuši masīva izmērus, izmantojot ReDim, un parādīs to no jauna, tiks parādīta vērtība 8. Tomēr, tā kā mēs neesam aizpildījuši IntA (2) un neizmantojām Re-Dim Preserve, vērtība šajā masīva pozīcijā tiks noņemta, un masīva 3. un 4. pozīcija būs nulle.

Izmantojot ReDim Preserve

Ja mēs izmantojam ReDim Preserve, tas saglabās masīvā esošās sākotnējās vērtības.

1234567891011121314151617 Sub TestDynamicArray ()'deklarējiet masīvuDim intA () Kā vesels skaitlisReDim intA (2)'aizpildiet masīvu ar skaitļiemintA (0) = 2intA (1) = 5intA (2) = 9"parādiet numuru 2. pozīcijāAtkļūdot. Drukāt intA (2)'pārveidojiet masīvuReDim intA (3)intA (0) = 6intA (1) = 8'vēlreiz parādiet numuru 2. pozīcijāAtkļūdot. Drukāt intA (2)Beigu apakš

Abos iepriekš parādītajos ziņojumu lodziņos skaitlis 9 parādīsies, jo paziņojums ReDim Preserve saglabās šo vērtību šajā pozīcijā.

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave