Discussion:
Controlar array vacío (pregunta sencilla)
(demasiado antiguo para responder)
Juan Jose Costello Levien
2005-09-20 15:15:43 UTC
Permalink
Hola gente,

Resulta que estoy trabajando con matrices de tipo variant.
A veces la matriz puede estar vacía o tener filas.

Si uso la función IsEmpty(matriz) para chequear si está vacía, no funciona.
(en la ventana de Watches, veo que en el valor de la matriz dice 'Empty',
pero igualmente si pregunto If IsEmpty(matriz) then... NO ENTRA al If.)

¿Saben una manera efectiva de validar si una matriz tiene filas o no? Probé
también con Ubound, pero no funciona si la matriz no tiene filas (sale un
error de Subscript Out Of Bounds).

Gracias.

Juan
Rubén Vigón
2005-09-20 15:44:54 UTC
Permalink
Hola Juan José,

Puedes usar el viejo truco:

Dim matriz() As Variant
If Not Not matriz Then
Debug.Print "Inicializada"
Else
Debug.Print "No inicializada"
End If

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://vigon.mvps.org
Rene Berra
2005-09-20 15:49:09 UTC
Permalink
La unica manera que conozco es capturando el error, te mando una funcion que
utilizo:

Public Function TotalElementosMatriz() As Double
On Error GoTo ponermenosuno:
TotalElementos = UBound(matriz)
Exit Function
ponermenosuno:
TotalElementos = -1
End Function
--
LSC Rene M. Berra
rberraARROBAsprocomPUNTOcom
SPROCOM Software
http://www.sprocom.com
Tels (01 244) 44 6 26 36
(01 244) 44 6 34 58
Atlixco, Puebla, Mex.
Post by Juan Jose Costello Levien
Hola gente,
Resulta que estoy trabajando con matrices de tipo variant.
A veces la matriz puede estar vacía o tener filas.
Si uso la función IsEmpty(matriz) para chequear si está vacía, no funciona.
(en la ventana de Watches, veo que en el valor de la matriz dice 'Empty',
pero igualmente si pregunto If IsEmpty(matriz) then... NO ENTRA al If.)
¿Saben una manera efectiva de validar si una matriz tiene filas o no? Probé
también con Ubound, pero no funciona si la matriz no tiene filas (sale un
error de Subscript Out Of Bounds).
Gracias.
Juan
SoftJaén
2005-09-20 15:48:31 UTC
Permalink
Post by Juan Jose Costello Levien
Resulta que estoy trabajando con matrices de tipo variant.
A veces la matriz puede estar vacía o tener filas.
Si uso la función IsEmpty(matriz) para chequear si está vacía, no funciona.
(en la ventana de Watches, veo que en el valor de la matriz dice 'Empty',
pero igualmente si pregunto If IsEmpty(matriz) then... NO ENTRA al If.)
Hola, Juan José:

Si el código no entra en la condición «If», simplemente es porque el valor
devuelto por la función «IsEmpty» es «False». Si a dicha función le pasas
solamente el nombre de la matriz, siempre será «False»; tendrás que pasarle
al menos un elemento de la matriz:

Dim matriz(10) As Variant

If IsEmpty(matriz(0)) Then
MsgBox "El primer elemento de la matriz " & _
"no está inicializado."
End If

«La función IsEmpty devuelve True si la variable no está inicializada o está
explicítamente configurada a Empty; en cualquier otro caso, devuelve False»,
eso es lo que dice la ayuda de Visual Basic.
Post by Juan Jose Costello Levien
¿Saben una manera efectiva de validar si una matriz tiene filas o no? Probé
también con Ubound, pero no funciona si la matriz no tiene filas (sale un
error de Subscript Out Of Bounds).
Si por ejemplo deseas conocer si una matriz tiene elementos, una cosa que
puedes hacer es, precisamente detectar el error número 9 (Subíndice fuera
del intervalo), tal y como te muestro en el siguiente ejemplo:

Dim MiArray() As Long
Dim n As Long

' Activo una rutina de control de errores.
On Error Resume Next

' Compruebo si está dimensionada
n = UBound(MiArray)

' Si se ha producido un error, es porque
' el array no está dimensionado
'
If Err.Number Then
MsgBox "La matriz no se encuentra dimensionada."
Else
' Devuelvo el índice inferior y superior de la matriz
MsgBox "Indice inferior: " & LBound(MiArray) & vbCrLf & _
"Indice superior: " & UBound(MiArray)
End If

Si no quieres detectar el error número 9, también te puede servir el
siguiente ejemplo:

Dim MiArray() As Long

If Not Not MyArray Then
MsgBox "La matriz no se encuentra dimensionada."
Else
' Devuelvo el índice inferior y superior de la matriz
MsgBox "Indice inferior: " & LBound(MiArray) & vbCrLf & _
"Indice superior: " & UBound(MiArray)
End If

Un saludo
--
Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Juan Jose Costello Levien
2005-09-20 19:36:48 UTC
Permalink
Hola gente,

Gracias a todos por sus respuestas. Está solucionado.
Un saludo, Juan
Post by Juan Jose Costello Levien
Hola gente,
Resulta que estoy trabajando con matrices de tipo variant.
A veces la matriz puede estar vacía o tener filas.
Si uso la función IsEmpty(matriz) para chequear si está vacía, no funciona.
(en la ventana de Watches, veo que en el valor de la matriz dice 'Empty',
pero igualmente si pregunto If IsEmpty(matriz) then... NO ENTRA al If.)
¿Saben una manera efectiva de validar si una matriz tiene filas o no? Probé
también con Ubound, pero no funciona si la matriz no tiene filas (sale un
error de Subscript Out Of Bounds).
Gracias.
Juan
Loading...