Di un Array possiamo conoscere l'indice superiore o quello inferiore, ridimensionarne la struttura, scorrerne gli elementi ecc. ecc.. Tramite la funzione isArray() è anche possibile ricavare se una variabile è un array oppure no.
Dim mioArray() as Long
Dim noArray as Long
Debug.Print isArray(mioArray) ' Output -> True
Debug.Print noArray(mioArray) ' Output -> False
Quello che può capitare è il dover testare se il nostro array contiene valori, ma purtroppo, con i mezzi in nostro possesso, può non essere semplice.
Nell'esempio seguente l'istruzione IF genererà un Run-Time error '9' subscript out of range, dato che gli elementi dell'array non sono ancora stati valorizzati.
Dim mioArray() as Long
'
' Verifico se sono in presenza di un array
'
If Not isArray(mioArray) Then Exit Function
'
' Nonostante sia in presenza di un array la seguente istruzione genererà Run-Time error '9' subscript out of range
'
If lBound(mioArray)= 0 Then
...
End If
Gli array in VB6 NON sono considerati oggetti, come accade tra l'altro in linguaggi più "recenti" come il .Net e quindi è inutile tentare di scrivere mioArray = Nothing poichè otterremo solamente un errore.
In questo caso è necessario ricorrere all'API SafeArrayGetDim che ci restituirà 0 (zero) qualora non esistano elementi nel nostro array.
Option Ecplicit
Private Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long
Dim mioArray() as Long
'
'
'
If SafeArrayGetDim(mioArray) = 0 Then
Debug.Print "Nessun elemento in mioArray"
End Ff
Per chi non ama particolarmente le API, può sempre ricorrere alla seguente funzione che restituisce, oltre tutto, il numero di elementi che costituiscono l'array.
Private Function getArrayDim(ByRef mioArray As Variant) As Long
'***********************************************************************************
'Func.: getArrayDim(Creazione SB-13/02/2009; Mod.: )
'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 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