Dato un ipotetico array, sia esso di valori o di controlli, la funzione restituisce il numero di elementi che lo compongono.
La funzione restituirà -1 qualora l'elemento passato non fosse un array
Aggiornamento
La funzione getArrayDim era già stata trattata nel post "Verificare se un array è nothing". Nella versione proposta qui di seguito, è stata aggiunta la possibilità di analizzare anche array di controlli.
Per completezza si consiglia di consultare tale post dove, tra le altre cose, veniva trattata anche l'API SafeArrayGetDim.
Private Function getArrayDim(ByRef mioArray As Variant) As Long
'***********************************************************************************
'Func.: getArrayDim(Creazione SB-13/02/2009; Mod.: 10/04/2009)
'Desc.: Restituisce il numero di elementi contenuti in un Array
'DLL. :
'Par. : mioArray Variabile da analizzare
'Ret. : Long Numero di elementi contenuti nell'array
' -1: Non si tratta di un Array
' 0 : Array vuoto, non contenente valori
'***********************************************************************************
Dim Result As Long
Dim x As Integer
On Error Resume Next
If TypeOf mioArray Is Object Then
Result = mioArray.ubound - mioArray.lbound + 1
If Err.Number <> 0 Then Result = -1
Err.Clear
ElseIf Not IsArray(mioArray) Then
Result = -1
Else
Result = UBound(mioArray) - LBound(mioArray) + 1
If Err.Number <> 0 Then Result = 0
Err.Clear
End If
'
' Restituisco il numero di elementi presenti nell'array
'
getArrayDim = Result
End Function
Alcuni esempi:
Dim myArray(0 To 2) As Long
dim myArrayEmpty() As long
Dim myLong As Long
Debug.Print getArrayDim(myArray)
' Restituisce 3
Debug.Print getArrayDim(myArrayEmpty)
' Restituisce 0 (nessun elemento presente)
Debug.Print getArrayDim(myLong)
' Restituisce -1 (non è un array)
Debug.Print getArrayDim(Command1)
' Restituisce -1 se Command1 NON è un array di controlli
' Restituisce il numero di controlli che compongono Command1