VBA Dynamic Array (Redim & Redim Preserve)

Denna handledning visar hur du använder dynamiska matriser (redim och redim preserve) i VBA.

Dynamisk matris

Dynamiska matriser är matriser som kan ändra storlek (i motsats till statiska matriser, som är statiska).

För att deklarera en dynamisk matris deklarerar du matrisen, men utelämnar matrisstorleken:

1 Dim strNames () Som sträng

Innan du kan tilldela värden till din array måste du sedan använda ReDim -uttalandet för att ställa in arrayen till önskad storlek:

1 ReDim strNames (1 till 3)

Nu, när du vill ändra din matrisstorlek, använd helt enkelt ReDim (eller ReDim Preserve som vi kommer att lära oss om nedan).

Dynamiska variantarrayer

Obs! Variantarrayer är lite olika. Med variantarrayer behöver du inte ställa in matrisstorleken med ReDim innan du tilldelar värden.

12345678 Sub TestArray ()'deklarera variabelnDim varNames () Som variant'fyll i matrisenvarNames () = Array ("Fred", "Wilma", "Barney", "Betty")'returnera värdenaMsgBox Join (varNames, ",")Avsluta Sub

Redim vs. Redim Preserve

De ReDim sats ändrar storlek på en array, clearing alla befintliga värden.

De ReDim Preserve sats ändrar storlek på en array, förvaring ("Bevara") alla befintliga värden.

Använda ReDim

I praktiken ser storleken på en array med ReDim ut så här:

123456789101112 Sub TestReDim ()'deklarera strängmatrisenDim strNames () Som sträng'ändra storlek på strängmatrisen för att kunna hålla tre värdenReDim strNames (1 till 3)'fyll i matrisen med tre namnstrNames (1) = "Mel"strNames (2) = "Steve"strNames (3) = "Bob"'visa resultatet i det omedelbara fönstretDebug.Print Join (strNames, vbCrLf)Avsluta Sub

Använda ReDim Preserve

I det här exemplet kommer vi att använda ReDim för att ställa in den ursprungliga dynamiska matrisen och sedan ReDim Preserve för att ändra storlek på matrisen, förvaring de ursprungliga värdena:

1234567891011121314151617 Sub TestReDim ()'deklarera strängmatrisenDim strNames () Som sträng'ändra storlek på strängmatrisen för att kunna hålla tre värdenReDim strNames (1 till 3)'fyll i matrisenstrNames (1) = "Mel"strNames (2) = "Steve"strNames (3) = "Bob"'visa resultatet i det omedelbara fönstretDebug.Print Join (strNames, vbCrLf)'redim men förbehåll dataReDim Preserve strNames (1 till 4)strNames (4) = "Fred"'visa resultatet i det omedelbara fönstretDebug.Print Join (strNames, vbCrLf)Avsluta Sub

Om du inte använder BEVARA uttalande, skulle du förlora data som tidigare fanns i matrisen.

I det omedelbara fönstret ovan fyllde matrisen Mel, Steve och Bob. När det deklarerades på nytt tar det bort dessa värden och returnerar istället tre tomma värden och sedan värdet "Fred". Detta beror på BEVARA uttalande utelämnas.

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave