Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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
Antworten 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
Antworten 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)
Antworten 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)
   
Antworten 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)
Antworten 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
Antworten Top


Gehe zu:


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