Hallo Community
Redim Preserve bei einem Zweidimensionalen Array
Wir nutzen die Eigenschaft von Vba das sich die letzte Dimension neu Initialisien läßt(mit der Option Preserve)
Ein Modul zur Veranschaulichung mit Aufruf der Funktion!
Sub ArrayPreserve()
Dim Dat As Variant
Dat = Range("A1:A3") 'Array 1 to 3,1 to 1 Initialisiert
Dat = ArrayRedim(Dat) 'Array 1 to 4,1 to 1 neu Initialisiert mit der Option Preserve
'Verkuezung,in der Funktion +1 gegen -1 Tauschen,auf Null unterschreitung achten.
End Sub
Function ArrayRedim(Darr As Variant) As Variant
Darr = Application.WorksheetFunction.Transpose(Darr)
ReDim Preserve Darr(LBound(Darr) To UBound(Darr) + 1)
ArrayRedim = Application.WorksheetFunction.Transpose(Darr)
End Function
Um größere als zwei Dimensionen zu bearbeiten brauchen wir die Anzahl der Dimensionen.
Das geht mit folgender Funktion!
32 Dimensionen sind soweit ich weiß das Limit!
Function DimAnz(Darr As Variant) As Integer
Dim DimIndex As Integer, Anzahl As Integer
On Error GoTo Ende
For DimIndex = 1 To 32
Anzahl = UBound(Darr , DimIndex)
Next DimIndex
Ende:
DimAnz = DimIndex - 1
End Function
Mit der Anzahl der Dimensionen liesse sich dann über eine Schleife die betroffene Dimension zum Ende schieben um sie neu zu Initialisiert,wieder über eine Schleife an ihre ursprüngliche Position gesetzt !
Viel spaß!
Gruß Nighty