2-D Array, Redim und UBound
#1
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
Top
#2
Hallo Stefan,

beschreibe doch bitte etwas ausführlicher, was du erreichen willst.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#3
Moin!
Du hast da kein 2D-Array, sondern 3 1D-Arrays:

   

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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#4
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


Angehängte Dateien Thumbnail(s)
   
Top
#5
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#6
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
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste