[Dies ist eine späte Antwort des Titels der Frage Adressierung (denn das ist, was die Menschen begegnen würden bei der Suche), anstatt die Besonderheiten der OP Frage, die bereits beantwortet wurde adequate]
Ubound
ist ein bisschen fragil, da es keine Möglichkeit gibt zu wissen, wie viele Dimensionen ein Array hat. Sie können die Fehlerbehandlung verwenden, um das vollständige Layout eines Arrays zu ermitteln. Der folgende Befehl gibt eine Auflistung von Arrays zurück, eines für jede Dimension. Die count
Eigenschaft kann verwendet werden, um die Anzahl der Dimensionen und ihre untere und obere Grenze zu bestimmen, kann je nach Bedarf entnommen werden:
Function Bounds(A As Variant) As Collection
Dim C As New Collection
Dim v As Variant, i As Long
On Error GoTo exit_function
i = 1
Do While True
v = Array(LBound(A, i), UBound(A, i))
C.Add v
i = i + 1
Loop
exit_function:
Set Bounds = C
End Function
wie folgt verwendet:
Sub test()
Dim i As Long
Dim A(1 To 10, 1 To 5, 4 To 10) As Integer
Dim B(1 To 5) As Variant
Dim C As Variant
Dim sizes As Collection
Set sizes = Bounds(A)
Debug.Print "A has " & sizes.Count & " dimensions:"
For i = 1 To sizes.Count
Debug.Print sizes(i)(0) & " to " & sizes(i)(1)
Next i
Set sizes = Bounds(B)
Debug.Print vbCrLf & "B has " & sizes.Count & " dimensions:"
For i = 1 To sizes.Count
Debug.Print sizes(i)(0) & " to " & sizes(i)(1)
Next i
Set sizes = Bounds(C)
Debug.Print vbCrLf & "C has " & sizes.Count & " dimensions:"
For i = 1 To sizes.Count
Debug.Print sizes(i)(0) & " to " & sizes(i)(1)
Next i
End Sub
Output:
A has 3 dimensions:
1 to 10
1 to 5
4 to 10
B has 1 dimensions:
1 to 5
C has 0 dimensions: