redim preserve

Status
Niet open voor verdere reacties.

kiredw

Gebruiker
Lid geworden
31 mei 2012
Berichten
12
Hallo,

Kan ik iemand mij een hint geven wat betreft redim en preserve. Ik lees in tutorials dat je alleen de laatste dimensie kan uitbreiden. Betekent dit dat je er niet via een loop een rij kan toevoegen aan array?

Code:
p=1
    If Worksheets(3).Cells(i, 1) = "G144" Then        
        ReDim Preserve g144mem(1 To p + 1, 1 To 11) As Variant
        g144mem(p, 1) = Worksheets(3).Cells(i, 2)
        g144mem(p, 2) = Worksheets(3).Cells(i, 3)
        g144mem(p, 3) = Worksheets(3).Cells(i, 4)
        g144mem(p, 4) = Worksheets(3).Cells(i, 5)
        g144mem(p, 5) = Worksheets(3).Cells(i, 6)
        g144mem(p, 6) = Worksheets(3).Cells(i, 7)
        g144mem(p, 7) = Worksheets(3).Cells(i, 8)
        g144mem(p, 8) = Worksheets(3).Cells(i, 9)
        g144mem(p, 9) = Worksheets(3).Cells(i, 10)
        g144mem(p, 10) = Worksheets(3).Cells(i, 11)
        g144mem(p, 11) = Worksheets(3).Cells(i, 12)
        p = p + 1
        Debug.Print p
 
Redim is ervoor om een array uit te breiden of in te krimpen.
Preserve erachter betekend dat de huidige gegevens in de array moet blijven bestaan.
Zonder Preserve zal Redim resulteren in een nieuwe array zonder gegevens.
 
In een array kun je alleen de laatste dimensie uitbreiden; maar bovendien is jouw declaratie niet goed.

Code:
Dim g144mem() As Variant
Als je een variabele array wilt declareren, of
Code:
Dim g144mem(2;5) As Variant
voor een array met vaste dimensies.
Begin het instellen van de array eerst met:
Code:
ReDim g144mem(p + 1, 11) As Variant
want je kunt de eerste waarde niet variabel aanpassen. Daarna kun je de variabele vullen met de lus.
Code:
i=i+1
ReDim Preserve g144mem(11, i) As Variant
werkt daarom wel.
Daarna kun je de variabele vullen met je gegevens
 
Laatst bewerkt:
Bedankt voor de reacties. Zal het meteen verwerken en aanpassen. Ik had ook een fout gemaakt met het afsluiten van de verkeerde lus :s. Maakt het uit als je met declareren eerst dim gebruikt en vervolgens bij het vullen redim?
 
Het is toegestaan om zonder dimensies te declareren en vervolgens in de redim pas de volledige dimensies te geven. De array moet wel geldige dimensies hebben voordat je de array kan gebruiken.

Als je echt twee dimensies aan moet kunnen passen kun je ook naar jagged arrays (ofwel arrays van arrays) kijken waarmee dit wel kan.
 
En zo blijf je bijleren :)
Hier staat een leuk voorbeeldje van een Jagged array; in VBA moet je daar namelijk een kleine omweg voor bewandelen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan