Deze zelfstudie laat zien hoe u dynamische arrays (redim en redim preserve) in VBA kunt gebruiken.
Dynamische matrix
Dynamische arrays zijn arrays die van grootte kunnen veranderen (in tegenstelling tot statische arrays, die statisch zijn).
Om een dynamische array te declareren, declareer je de array, maar laat je de arraygrootte weg:
1 | Dim strNames() As String |
Vervolgens, voordat u waarden aan uw array kunt toewijzen, moet u de ReDim-instructie gebruiken om de array op de gewenste grootte in te stellen:
1 | ReDim strNames (1 tot 3) |
Nu, wanneer u uw arraygrootte wilt wijzigen, gebruikt u gewoon ReDim (of ReDim Preserve zoals we hieronder zullen leren).
Dynamische variantarrays
Opmerking: Variant-arrays zijn een beetje anders. Bij variantarrays hoeft u de arraygrootte niet in te stellen met ReDim voordat u waarden toewijst.
12345678 | Sub TestArray()'declareer de variabele'Dim varNames() als variant'vul de array'varNames() = Array("Fred", "Wilma", "Barney", "Betty")'geef de waarden terug'MsgBox Join(varNames, ",")Einde sub |
Redim vs. Redim Preserve
De ReDim statement wijzigt de grootte van een array, opruimen alle bestaande waarden.
De ReDim behouden statement wijzigt de grootte van een array, houden (“behouden”) van alle bestaande waarden.
ReDim gebruiken
In de praktijk ziet het formaat van een array met ReDim er als volgt uit:
123456789101112 | SubtestReDim()'declareer de tekenreeksarray'Dim strNames() As String'wijzig de grootte van de stringarray om 3 waarden te kunnen bevatten'ReDim strNames (1 tot 3)'vul de array met 3 namen'strNames(1) = "Mel"strNames(2) = "Steve"strNames(3) = "Bob"'toon het resultaat in het directe venster'Debug.Print Join (strNames, vbCrLf)Einde sub |
ReDim Preserve gebruiken
In dit voorbeeld gebruiken we ReDim om de initiële dynamische array in te stellen en vervolgens ReDim Preserve om de grootte van de array te wijzigen, houden de originele waarden:
1234567891011121314151617 | SubtestReDim()'declareer de tekenreeksarray'Dim strNames() As String'wijzig de grootte van de stringarray om 3 waarden te kunnen bevatten'ReDim strNames (1 tot 3)'vul de array'strNames(1) = "Mel"strNames(2) = "Steve"strNames(3) = "Bob"'toon het resultaat in het directe venster'Debug.Print Join (strNames, vbCrLf)'redim maar bewaar de gegevens'ReDim Behoud strNames (1 tot 4)strNames(4) = "Fred"'toon het resultaat in het directe venster'Debug.Print Join (strNames, vbCrLf)Einde sub |
Als u geen gebruik maakt van de BESCHERMEN statement, verliest u de gegevens die eerder in de array stonden.
In het onmiddellijke venster hierboven, bevolkte de array Mel, Steve en Bob. Toen het opnieuw werd gedeclareerd, verwijderde het die waarden en retourneerde het in plaats daarvan 3 lege waarden en vervolgens de waarde 'Fred'. Dit komt door de BESCHERMEN verklaring wordt weggelaten.