VBA Dynamic Array (Redim & Redim Preserve)

Denne opplæringen vil demonstrere hvordan du bruker dynamiske matriser (redim og redim preserve) i VBA.

Dynamisk matrise

Dynamiske matriser er matriser som kan endre størrelser (i motsetning til statiske matriser, som er statiske).

For å deklarere en dynamisk matrise, deklarerer du matrisen, men utelater matrisestørrelsen:

1 Dim strNames () As String

Deretter, før du kan tilordne verdier til matrisen, må du bruke ReDim -erklæringen for å sette matrisen til ønsket størrelse:

1 ReDim strNames (1 til 3)

Nå, når du vil endre matrisestørrelsen, kan du bare bruke ReDim (eller ReDim Preserve som vi vil lære om nedenfor).

Dynamiske variantarrayer

Merk: Variantarrays er litt forskjellige. Med variantarrayer trenger du ikke å angi matrisestørrelse med ReDim før du tildeler verdier.

12345678 Sub TestArray ()'erklærer variabelenDim varNames () Som variant'fyll ut matrisenvarNames () = Array ("Fred", "Wilma", "Barney", "Betty")'returner verdieneMsgBox Join (varNames, ",")Slutt Sub

Redim vs. Redim Preserve

De ReDim setningen endrer størrelsen på en matrise, lysning alle eksisterende verdier.

De ReDim Preserve setningen endrer størrelsen på en matrise, beholde ("Bevare") alle eksisterende verdier.

Bruke ReDim

I praksis ser størrelsen på en matrise med ReDim slik ut:

123456789101112 Sub TestReDim ()'erklærer strengmatrisenDim strNames () As String'endre størrelsen på strengmatrisen for å kunne holde tre verdierReDim strNames (1 til 3)'fyll ut matrisen med 3 navnstrNames (1) = "Mel"strNames (2) = "Steve"strNames (3) = "Bob"'vis resultatet i det umiddelbare vinduetDebug.Print Join (strNames, vbCrLf)Slutt Sub

Bruke ReDim Preserve

I dette eksemplet vil vi bruke ReDim til å angi den opprinnelige dynamiske matrisen og deretter ReDim Preserve for å endre størrelsen på matrisen, beholde de opprinnelige verdiene:

1234567891011121314151617 Sub TestReDim ()'erklærer strengmatrisenDim strNames () As String'endre størrelsen på strengmatrisen for å kunne holde tre verdierReDim strNames (1 til 3)'fyll ut matrisenstrNames (1) = "Mel"strNames (2) = "Steve"strNames (3) = "Bob"'vis resultatet i det umiddelbare vinduetDebug.Print Join (strNames, vbCrLf)'redim, men forhåndsdata dataeneReDim Preserve strNames (1 til 4)strNames (4) = "Fred"'vis resultatet i det umiddelbare vinduetDebug.Print Join (strNames, vbCrLf)Slutt Sub

Hvis du ikke bruker BEVARE uttalelse, vil du miste dataene som hadde vært i matrisen tidligere.

I det umiddelbare vinduet ovenfor befolket matrisen Mel, Steve og Bob. Da den ble deklarert på nytt, fjernet den disse verdiene og returnerte i stedet 3 blanke verdier og deretter verdien 'Fred'. Dette skyldes BEVARE uttalelsen utelates.

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave