VBA - Deklarere (Dim), Opret og initialiser matrixvariabel

Denne vejledning demonstrerer, hvordan man erklærer (Dim), opretter og initialiserer array -variabler i VBA

Hvad er en VBA Array -variabel?

En VBA -array -variabel kan betragtes som en gruppe variabler, der er gemt under samme navn og har den samme datatype. En matrix kan gemme tekst, tal eller objekter.

Du refererer til et element i en matrix ved hjælp af dets indeksnummer.

Du kan erklære en matrixvariabel på samme måde som du ville erklære enhver anden variabel ved hjælp af søgeordet Dim, Statisk, Offentlig eller Privat.

Statiske arrays

Der er 2 typer arrays - Statisk og Dynamisk. Et statisk array erklæres med den angivne størrelse, når du oprindeligt deklarerer arrayet. Det kaldes også en Fixed Array.

1 Dim intA (4) som heltal

Ovenstående array erklæres ved hjælp af Dim -sætningen på et procedure- eller modulniveau, og matrixens størrelse er 5, da vi ikke har deklareret LBound -værdien af ​​arrayet.

Nej, det er ikke en stavefejl! Array -størrelsen er 5, på trods af at du har indtastet 4 i arrayet. Dette skyldes, at matrixindekser automatisk starter ved nul.

Array indekser

Arrayindeks starter automatisk med nul, medmindre Option Base 1 erklæres øverst i dit kodemodul.

Hvis Option Base 1 erklæres, starter arrays automatisk ved 1.

Jeg finder imidlertid, at det er problematisk at erklære variabler på en sådan måde. Kodebedømmere er muligvis ikke klar over, at arrays starter ved nul eller af Option Base 1 -erklæringen

I stedet foretrækker jeg eksplicit at angive start- og slutpositioner for arrays:

1 Dim intA (2 til 5) som heltal

Bemærk, at når du gør det, kan du starte arrayet med et vilkårligt tal (ikke kun 1 eller 0).

Dynamiske arrays

En Dynamic Array -variabel er en matrix, hvis størrelse kan ændres under runtime. Du erklærer dynamiske variabler uden en størrelse.

1 Dim intA () som heltal

Du kan bruge ReDim -sætningen til at angive størrelsen på arrayet, efter at arrayet er blevet oprettet.

1 ReDim intA (2)

Du kan til enhver tid ændre størrelsen på et dynamisk array. Når du bruger ReDim -erklæringen, slettes alle eksisterende værdier. For at bevare eksisterende array -værdier skal du bruge ReDim Preserve i stedet.

1 ReDim Preserve intA (2)

Du kan erklære et dynamisk array på et procedure-, modul- eller globalt niveau, men du kan kun bruge ReDim -sætningen inden for en procedure.

Variant arrays

Variantarrays er dynamiske arrays, der er lettere at arbejde med.

1 Dim varNames ()

Bemærk, at du ikke behøver at angive datatypen (det antages at være variant) eller arraystørrelsen.

Som vi vil se nedenfor, kan du initialisere variantarrays ved hjælp af Array -funktionen (ikke nødvendigt at ændre størrelsen på arrays først)!

Deklarere modul og offentlige arrays

Som vist ovenfor kan arrays deklareres inden for procedurer til brug inden for denne procedure:

1234 Sub StaticArray ()'erklærer arrayet med en LBound -værdi på 1 og en UBound -værdi på 4Dim IntA (1 til 4) som heltalAfslut Sub

Men de kan også erklæres på modul- eller globalt niveau.

1234567 Mulighed eksplicit'erklærer arrayet med en LBound -værdi på 1 og en UBound -værdi på 4Dim IntA (1 til 4) som heltalSub StaticArray ()Afslut Sub

I dette eksempel kan matrixvariablen kaldes overalt i dette kodemodul. I stedet kan du erklære et offentligt array, der kan bruges i hele dit VBA -projekt (se næste afsnit).

Erklæring om et offentligt array

Du erklærer en offentlig statisk matrix, ligesom du ville erklære en offentlig variabel.

1 Offentlige strNavne (3) som streng

Denne erklæring skal stå øverst i dit modul, under Option Explicit. Det kunne derefter bruges i hele dit VBA -projekt i ethvert modul eller en procedure.

Hvis du erklærer Array øverst i modulet, men med Dim -søgeordet, er brugen af ​​dette array begrænset til det enkelte modul. Hvis du prøver at bruge Array i et separat modul, ville det resultere i en fejl.

Initialiser arrays

Du kan tildele værdier til et statisk array på følgende måde.

1234567891011 Sub StaticArray ()'erklærer arrayet med en LBound -værdi på 1 og en UBound -værdi på 4Dim IntA (1 til 4) som heltal'initialiser arrayetIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'vis resultatet af position 2 i arrayet i det umiddelbare vindueDebug.Print IntA (2)Afslut Sub

Hvis du kører ovenstående procedure, vises værdien 20 i det umiddelbare vindue.

Du kan også tildele værdierne til et dynamisk array på samme måde

12345678910111213 Sub DynamicArray ()'erklærer et dynamisk array, men udelader de bundne værdierDim IntA () som heltal'initialiser arrayetReDim IntA (1 til 4)IntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'vis resultatet af position 2 i arrayet i det umiddelbare vindueDebug.PrintIntA (2)Afslut Sub

Array -funktion

Imidlertid, kun med variantarrayet, kan du bruge Array -funktionen, som kan være lettere end at bruge standardmetoden.

12 'udfyld matrixenintA () = Array (10, 20, 30, 40)

Befolk Array med Loop

Du kan også udfylde arrays ved at gå gennem en række celler i Excel

1234567891011121314151617 Sub TestDynamicArrayFromExcel ()'erklærer arrayetDim strNames () Som streng'erklære et helt tal for at tælle rækker i et områdeDim n Som heltal'erklære et helt tal for sløjfenDim i As Integer'tæl rækker i et områden = Range ("A1", Range ("A1"). End (xlDown)). Rækker.Tælling'redim arrayet til mængden af ​​rækker i området.ReDim strNames (n)For i = 0 Til nstrNames (i) = Range ("A1"). Offset (i + 1, 0)Næste i'vis værdierne i arrayetMsgBox Join (strNames ())Afslut Sub

Re-initialiser arrays

Du kan geninitialisere din matrix på ethvert trin i din kode, men du vil derefter miste den oprindelige værdi, der er indeholdt i den position i din matrix.

1234567891011121314 Sub StaticArray ()'erklærer arrayet med en LBound -værdi på 1 og en UBound -værdi på 4Dim IntA (1 til 4) som heltal'initialiser arrayetIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'vis resultatet af position 2 i arrayet i det umiddelbare vindueDebug.Print IntA (2)'initialiser arrayet igenintA (2) = 200Debug.Print IntA (2)Afslut Sub

I eksemplet ovenfor vil det statiske array beholde alle værdierne, undtagen værdien i position 2 - den værdi ændres til 200.

Brug af ReDim

Hvis du bruger et dynamisk array, bruges ReDim -sætningen til at angive størrelsen på dit array. Du kan bruge ReDim -sætningen efterfølgende i din kode til at ændre størrelsen på matrixen så mange gange du har brug for det. Kodelinjen herunder vil initialisere intA Array igen med en størrelse på 2 (Husk - et Array -indeks begynder ved 0!)

1 ReDim intA (1) som heltal

Så koden inklusive ReDim -sætningen ville ligne eksemplet herunder.

1234567891011121314151617 Sub TestDynamicArray ()'erklærer arrayetDim intA () som heltalReDim intA (2)'udfyld matrixen med talintA (0) = 2intA (1) = 5intA (2) = 9'vis tallet i position 1Debug.Print intA (1)'redim arrayet for at ændre størrelsenReDim intA (3)intA (0) = 6intA (1) = 8'vis tallet i position 1 denne gangDebug.Print intA (1)Afslut Sub

Hvis du kører ovenstående procedure, vil værdien 5 blive vist i det umiddelbare vindue, og derefter ville en værdi på 8 blive vist, når vi har ændret størrelsen på arrayet ved hjælp af ReDim og genbefolket det. Da vi imidlertid ikke har udfyldt IntA (2), og vi ikke brugte Re-Dim Preserve, fjernes værdien i den position i arrayet, og både position 3 og 4 i arrayet vil være nul.

Brug af ReDim Preserve

Hvis vi bruger ReDim Preserve, bevarer det de originale værdier i arrayet.

1234567891011121314151617 Sub TestDynamicArray ()'erklærer arrayetDim intA () som heltalReDim intA (2)'udfyld matrixen med talintA (0) = 2intA (1) = 5intA (2) = 9'vis tallet i position 2Debug.Print intA (2)'redim arrayReDim intA (3)intA (0) = 6intA (1) = 8'vis nummeret i position 2 igenDebug.Print intA (2)Afslut Sub

I begge meddelelsesbokse, der vises ovenfor, vises tallet 9, da ReDim Preserve -sætningen bevarede denne værdi i den position.

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave