Clever-Excel-Forum

Normale Version: 2-D Array, Redim und UBound
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallochen Gemeinde, kennt wer eine Lösung:

Code:
Sub arrUbound()
    Dim arrC
    arrC = Array2Dim
    Debug.Print UBound(arrC, 1) 'Bis hier läuft alles, aber dann :-('
    Debug.Print UBound(arrC, 2) 'Index außerhalb des gültigen Bereich, eigentlich klar - aber welche Lösung gibt es?
End Sub

Function Array2Dim()
    Dim x
    Dim y
    Dim arrA()
    Dim arrB()
        For x = 0 To 2
        ReDim Preserve arrA(x)
            For y = 0 To 2
                ReDim Preserve arrB(y)
                arrB(y) = y
            Next y
            arrA(x) = arrB
        Next x
    Array2Dim = arrA
End Function


Mit einer Schleife durchzählen bis zum Ende wäre eine Möglichkeit, aber mit UBound?

Danke für jede Lösung Smile
Stefan
Hallo Stefan,

beschreibe doch bitte etwas ausführlicher, was du erreichen willst.
Moin!
Du hast da kein 2D-Array, sondern 3 1D-Arrays:

[attachment=37972]

Ein 2D-Array wäre
Dim arr(2, 2)

Du willst wahrscheinlich folgendes ermitteln:
Debug.Print UBound(arrC(0))
Debug.Print UBound(arrC(1))
Debug.Print UBound(arrC(2))
(ergibt natürlich jeweils 2)

Gruß Ralf
Hallo, hier der Scrennshot vom Lokalfenster:

[
Bild bitte so als Datei hochladen: Klick mich!
]

ermittelt werden soll die Größe des inneren Array's: arrC(0)(3)

da Redim nur für 1-dimensionale Array anwendbar ist hab ich die Arrays verschachtelt. Mit Schleife kann die Größe des inneren Arrays ermittelt werden aber für UBound hab ich noich keine Lösung gefunden.

Danke
Stefan
Ich hatte Dir doch die 3 Debugs geschrieben.
Bei Deinem obigen Code ergibt UBound(arrC(0)) eben 2

Ich hab die Function mal ein wenig geändert:
Function Array2Dim()
    Dim x
    Dim y
    Dim arrA()
    Dim arrB()
        For x = 0 To 2
        ReDim Preserve arrA(x)
            For y = 0 To 3
                ReDim Preserve arrB(y)
                arrB(y) = y
            Next y
            arrA(x) = arrB
        Next x
    Array2Dim = arrA
End Function

Folgendes Makro
Sub arrUbound()
    Dim arrC, i&
    arrC = Array2Dim
    For i = 0 To UBound(arrC)
      Debug.Print "UBound(arrC(" & i & ")) ist: " & UBound(arrC(i))
    Next
End Sub

ergibt dann:

UBound(arrC(0)) ist: 3
UBound(arrC(1)) ist: 3
UBound(arrC(2)) ist: 3

Gruß Ralf
Hallo Ralf, das ist die Lösung.... mit der Schleife hatte ich es erfolgreich versucht. Ich habe aber den inhalt des Feldes geprüft und bei Err.Number = 9 die Schleife abgebrochen und y ausgegeben. Aber Dein Vorschlag ist die elegantere Lösung! 18

Danke
Stefan