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.