Excel VBA ReDim-erklæring
VBA Redim- sætning svarer til den dæmpede sætning, men forskellen er, at den bruges til at gemme eller allokere mere lagerplads eller mindske lagerpladsen, som en variabel eller en matrix har med sig, nu er der to vigtige aspekter, der bruges med udsagn er Bevar, hvis bevar bruges med denne erklæring, opretter det en ny matrix med forskellig størrelse, og hvis bevar ikke bruges med denne erklæring, ændrer den bare matrixstørrelsen for den aktuelle variabel.
Arrays er en vigtig del af VBA-kodningen. Ved hjælp af arrays kan vi gemme mere end en værdi i den samme variabel, som vi definerede. Ligesom hvordan vi deklarerer variablen ved hjælp af ordet "Dim", skal vi også erklære arraynavnet ved også at bruge "Dim".
For at erklære arraynavnet skal vi først identificere den type array, vi skal definere. I arrays har vi 5 typer.
- Statisk matrix
- Dynamisk matrix
- En dimensionel matrix
- To-dimensionel matrix
- Flerdimensionelt array
I det statiske array i excel vil vi beslutte den nedre værdi og den øvre værdi af arrayet i god tid, mens vi erklærer variablen. Se f.eks. Nedenstående eksempel.
Kode:
Sub ReDim_Example1 () Dim MyArray (1 til 5) Som streng-ende-sub
Her er MyArray navnet på det array, der kan holde værdien fra 1 til 5. MyArray kan rumme 5 forskellige resultater i det som det nedenstående.
Kode:
Sub ReDim_Example1 () Dim MyArray (1 til 5) Som streng MyArray (1) = "Hej" MyArray (2) = "Good" MyArray (3) = "Morning" MyArray (4) = "Have en" MyArray (5) = "Nice Day" Afslut Sub
Dynamisk matrix med ReDim-erklæring
Men i dynamisk array er dette ikke tilfældet, vi beslutter ikke den lavere værdi og den øvre værdi i god tid, snarere definerer vi bare arraynavnet og tildeler datatype.
Sub ReDim_Example1 () Dim MyArray () Som streng End Sub
For at gøre arraynavnet dynamisk, skal vi først erklære det med ordet "Dim", men ikke beslutte størrelsen på arrayet i god tid. Vi navngiver bare en matrix med tomme værdier inden for parentesen (). Når arrayet ikke inkluderer størrelse, behandles det som et dynamisk array.
Dim MyArray () som streng
I det øjeblik du nævner størrelsen på arrayet inden for parentesen, bliver det et statisk array. Dim MyArray (1 til 5) Som streng
I det dynamiske array ændrer vi altid størrelsen på arrayet ved at bruge ordet "ReDim" i den næste linje i koden.
ReDim MyArray (1 til 6) som streng
Enhver værdi, der er gemt i arraynavnet i de foregående trin, dvs. ved at bruge "Dim" -sætningen, er nul, og den størrelse, vi erklærede ved hjælp af "ReDim", bliver den nye størrelse på arrayet.
Eksempler på brug af VBA Redim-erklæring
Du kan downloade denne VBA ReDim Excel-skabelon her - VBA ReDim Excel-skabelonEksempel nr. 1
Se eksemplet på at bruge “ReDim” -erklæringen praktisk. Følg nedenstående trin for at anvende “ReDim”.
Trin 1: Opret først et makronavn.
Trin 2: Erklær et array-navn som en streng.
Kode:
Sub ReDim_Example1 () Dim MyArray () Som streng End Sub
Trin 3: Brug nu ordet “Redim” og tildel arrayets størrelse.
Kode:
Sub ReDim_Example1 () Dim MyArray () Som streng ReDim MyArray (1 til 3) End Sub
Trin 4: Så nu kan arraynavnet “MyArray” indeholde op til 3 værdier her. Tildel værdien til disse 3 arrays som nedenstående.
Kode:
Sub ReDim_Example1 () Dim MyArray () Som streng ReDim MyArray (1 til 3) MyArray (1) = "Velkommen" MyArray (2) = "til" MyArray (3) = "VBA" Afslut sub
Så den første matrix er lig med ordet "Velkommen", den anden matrix er lig med ordet "til", og den tredje matrix er lig med ordet "VBA".
Trin 5: Gem nu disse matrixværdier i celler.
Kode:
Sub ReDim_Example1 () Dim MyArray () Som streng ReDim MyArray (1 til 3) MyArray (1) = "Velkommen" MyArray (2) = "til" MyArray (3) = "VBA" Område ("A1"). Værdi = MyArray (1) Range ("B1"). Value = MyArray (2) Range ("C1"). Value = MyArray (3) End Sub
Trin 6: Hvis du kører denne kode, skal vi have disse værdier i henholdsvis A1, B1 og C1-celle.
Eksempel 2 - Ændr størrelsen på matrixstørrelse, mens du husker de gamle værdier.
Når matrixnavnet er tildelt værdier, kan vi også ændre størrelsen på ethvert tidspunkt i proceduren ved hjælp af ordet "ReDim Preserve".
Antag, at du allerede har deklareret et array-navn og tildelt værdier til disse array-navn som det nedenstående.
Nu vil du gerne øge array-længden med 2, dvs. 5. I dette tilfælde kan vi bruge ordet VBA "ReDim Preserve" til at ændre størrelsen på array-længden for også at huske de gamle værdier.
Kode:
Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub
Now we can assign two more values to the array.
Code:
Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub
Now store these values in cells.
Code:
Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub
Now run the macro and see what happens
So we got the new word in the D1 cell.
The reason why we need to use the word “preserve” because array should remember the old array values in the procedure.
The moment you ignore the word “preserve” it will not remember old values.
Things to Remember Here
- ReDim can only hold the last value of the array, not the many values. For example, we cannot use this code “ReDim Preserve MyArray(4 to 5)”, this will throw the error.
- We cannot ReDim static arrays. The moment you assign the size of the array inside the parenthesis it becomes a static array.
- Using ReDim we cannot change the data type. The array can hold whatever the data type we have assigned while declaring the array.