VBA Dynamic Array (Redim & Redim Preserve)

Denne vejledning viser, hvordan du bruger dynamiske arrays (redim og redim preserve) i VBA.

Dynamisk matrix

Dynamiske arrays er arrays, der kan ændre størrelser (i modsætning til statiske arrays, som er statiske).

For at deklarere et dynamisk array erklærer du arrayet, men udelader arraystørrelsen:

1 Dim strNames () Som streng

Før du derefter kan tildele værdier til dit array, skal du bruge ReDim -erklæringen til at indstille matrixen til din ønskede størrelse:

1 ReDim strNames (1 til 3)

Nu, når som helst du vil ændre din matrixstørrelse, skal du blot bruge ReDim (eller ReDim Preserve, som vi lærer mere om nedenfor).

Dynamiske variantarrays

Bemærk: Variantarrays er lidt forskellige. Med variantarrays behøver du ikke indstille arraystørrelsen med ReDim, før du tildeler værdier.

12345678 Sub TestArray ()'erklærer variablenDim varNames () Som variant'udfyld matrixenvarNames () = Array ("Fred", "Wilma", "Barney", "Betty")'returner værdierneMsgBox Join (varNames, ",")Afslut Sub

Redim vs. Redim Preserve

Det ReDim sætning ændrer størrelsen på en matrix, clearing alle eksisterende værdier.

Det ReDim Preserve sætning ændrer størrelsen på en matrix, beholde ("Bevarelse") alle eksisterende værdier.

Brug af ReDim

I praksis ser størrelsen på en matrix med ReDim sådan ud:

123456789101112 Sub TestReDim ()'erklærer strengarrayetDim strNames () Som streng'ændre størrelsen på strengmatrixen for at kunne holde 3 værdierReDim strNames (1 til 3)'udfyld matrixen med 3 navnestrNames (1) = "Mel"strNames (2) = "Steve"strNames (3) = "Bob"'vis resultatet i det umiddelbare vindueDebug.Print Join (strNames, vbCrLf)Afslut Sub

Brug af ReDim Preserve

I dette eksempel vil vi bruge ReDim til at indstille det oprindelige dynamiske array og derefter ReDim Preserve til at ændre størrelsen på arrayet, beholde de oprindelige værdier:

1234567891011121314151617 Sub TestReDim ()'erklærer strengarrayetDim strNames () Som streng'ændre størrelsen på strengmatrixen for at kunne holde 3 værdierReDim strNames (1 til 3)'udfyld matrixenstrNames (1) = "Mel"strNames (2) = "Steve"strNames (3) = "Bob"'vis resultatet i det umiddelbare vindueDebug.Print Join (strNames, vbCrLf)'redim, men forudgå dataeneReDim Preserve strNames (1 til 4)strNames (4) = "Fred"'vis resultatet i det umiddelbare vindueDebug.Print Join (strNames, vbCrLf)Afslut Sub

Hvis du ikke bruger BEVARE erklæring, ville du miste de data, der tidligere havde været i arrayet.

I det umiddelbare vindue ovenfor befolkede arrayet Mel, Steve og Bob. Da den blev deklareret igen, fjernede den disse værdier og returnerede i stedet 3 tomme værdier og derefter værdien 'Fred'. Dette skyldes BEVARE udsagn udelades.

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

wave wave wave wave wave