Per conoscere quanti elementi ci sono in ogni dimensione di un array
si usa UBound:
Sub prova()
Dim MyArray(4, 5, 6) As Variant
Debug.Print UBound(MyArray, 1) '= 4
Debug.Print UBound(MyArray, 2) '= 5
Debug.Print UBound(MyArray, 3) '= 6
End Sub
Ma se volessi conoscere quante "dimensioni" ha l'array (in questo caso
3)?
Esiste una funzione ad-hoc che non ignoro?
Al momento mi viene in mente solo qualcosa del genere:
Sub prova()
Dim MyArray1(4, 5, 6) As Variant
Dim i As Long
Debug.Print UBound(MyArray, 1) '= 4
Debug.Print UBound(MyArray, 2) '= 5
Debug.Print UBound(MyArray, 3) '= 6
i = 0
On Error Resume Next
While Err.Number = 0
i = i + 1
Debug.Print UBound(MyArray, i)
Wend
On Error GoTo 0
Debug.Print i - 1 '= 3
End Sub
Qualche soluzione migliore?
Bye!
Scossa
> Visto che in questi giorni gli array vanno di moda :-) ne approfitto
> per porre una domanda.
> Per conoscere quanti elementi ci sono in ogni dimensione di un array
> si usa UBound:
[...]
> Ma se volessi conoscere quante "dimensioni" ha l'array (in questo caso
> 3)?
> Esiste una funzione ad-hoc che non ignoro?
[...]
Ciao Scossa.
Un classico:
The number of dimensions of an array
http://www.devx.com/vb2themax/Tip/18265
Gia' che ci sei guarda anche:
Arrays : All
http://www.devx.com/vb2themax/Door/18897?cat=1159&type=1
--
Maurizio Borrelli [Microsoft MVP Office System]
http://www.riolab.org/
"Maurizio Borrelli" ha scritto:
> "Scossa" wrote in message
> news:40135aa3-8cef-4383...@g23g2000vbr.googlegroups.com...
>
> > Visto che in questi giorni gli array vanno di moda :-) ne approfitto
> > per porre una domanda.
> > Per conoscere quanti elementi ci sono in ogni dimensione di un array
> > si usa UBound:
> [...]
> > Ma se volessi conoscere quante "dimensioni" ha l'array (in questo caso
> > 3)?
> > Esiste una funzione ad-hoc che non ignoro?
> [...]
>
> Ciao Scossa.
>
> Un classico:
>
> The number of dimensions of an array
> http://www.devx.com/vb2themax/Tip/18265
>
> Gia' che ci sei guarda anche:
>
> Arrays : All
> http://www.devx.com/vb2themax/Door/18897?cat=1159&type=1
ciao Scossa, ciao Maurizio,
più che altro occasione per salutare ...
una variante sul tema
Function N_Dim(arr As Variant, Optional ByVal l As Long = 1) As Long
On Error Resume Next
ArrayDims = LBound(arr, l)
If Err Then
N_Dim = l - 1
Else
N_Dim = N_Dim(arr, l + 1)
End If
End Function
saluti
r
--
Come e dove incollare il codice:
http://www.rondebruin.nl/code.htm
Il mio ultimo lavoro ...
http://excelvba.altervista.org/blog/index.php/Excel-VBA/UsedRange-eccezioni-e-alternative.html
Ciao Maurizio,
>
> The number of dimensions of an arrayhttp://www.devx.com/vb2themax/Tip/18265
>
Ok, vedo che, come si dice dalle mie parti "se non l'è suppa l'è pan
bagnà"
nel senso che suggeriscono un ciclo for mentre io utilizzo un loop
while.
Ma comunque non c'è alternativa alla logica "genera errore - gestisci
errore".
> Gia' che ci sei guarda anche:
>
> Arrays : Allhttp://www.devx.com/vb2themax/Door/18897?cat=1159&type=1
>
Interessante! grazie mille.
P.S.: il mitico Francesco Balena non è quello dell'utility KebIT (per
DOS/Win9x)
Bye!
Scossa
> ciao Scossa, ciao Maurizio,
> più che altro occasione per salutare ...
Ciao Roberto
> una variante sul tema
>
> Function N_Dim(arr As Variant, Optional ByVal l As Long = 1) As Long
> On Error Resume Next
> ArrayDims = LBound(arr, l)
> If Err Then
> N_Dim = l - 1
> Else
> N_Dim = N_Dim(arr, l + 1)
> End If
> End Function
>
Interssante soluzione, anche se non amo particolarmente la
ricorsività.
Comunque, come detto a Maurizio, non si può evitare la logica
dell'errore.
Bye!
Scossa