... a ver Moxkito... la expresión
If Not IsEmpty(Pasarela61850.Nodos61850) Then visto el código siempre devolverá 'not false' (not porque le preguntas not empty).
IsEmpty tiene 'utilidad práctica' cuando se usa con los variants, para otros casos no es muy útil... te pongo 1 sencillo ejemplo
supongamos un formulario:
Dim t() As Integer
Private Sub Form_Load()
If IsEmpty(t) = True Then
MsgBox "t NO ha sido inicializada"
else
' entrará aquí
MsxBox "t SI ha sido inicializada"
End If
End Sub
Ahora supon el código casi idéntico, pero nota que la línea de declaración de la matriz 't' está comentada:
' Dim t() As Integer
Private Sub Form_Load()
If IsEmpty(t) = True Then
' entrará aquí
MsgBox "t NO ha sido inicializada"
else
MsxBox "t SI ha sido inicializada"
End If
End Sub
Como en tu código declaras tanto 'pasarela' (as ...) entonces nunca te dará true (dentro del propio módulo, fuera sólo si es privada), porque está inicializada... ( en el caso de la matriz 'nodo61850' si no fuera declarado daría un error diciendo que no es un miembro de tPasarela61850 y se inicializa tan pronto como haces una declaración de una variable que es del tipo al que pertenece)
Quizás lo que quieras preguntarle es si tiene asignación de datos válidos... para eso usa isnull() ó quizás más adecuadamente quieras preguntarle si el array está inicializado, para eso acuérdate de aquella conversación que mantuvimos acerca de saber si un array estaba o no inicializado, repásalo...
Lo que no termino de entender es lo de "los tipos definidos por el usuario de módulos de objeto públicos".
Siempre he pensado que es 'lioso' como para que no se entienda adecuadamente.... trataré de explicarlo.
Los UDT (User Defined Types) cuando se usan en un formulario tienen forzosamente que ser declarados privados, al igual que las API declaradas dentro del formulario, la razón se apoya en la forma que VB6.0 'divide' el código público y privado, se detalla más abajo (dim equivale a escribir Private en vb6.0)
Por ejemplo al intentar ejecutar el siguiente código:
Public Type tiempo ' aquí dará error estando dentro del formulario, o lo ponemos privado o lo movelos a un módulo.
dias As Integer
semanas As Integer
meses As Byte
bisiesto As Boolean
'mes As NombreMeses
End Type
Dim t As tiempo
Private Sub Form_Load()
t.bisiesto = True
t.dias = 365
t.meses = 12
End Sub
... dará error porque si declaramos la estructura (UDT, TDU en español) Tiempo en el (dentro del) formulario tendremos que cambiarlo a privado para poderlo usarlo, y además por ser privado sólo podremos usarlo dentro del formulario. Si queremos que pueda ser usado fuera del formulario entonces lo podremos declarar público pero entonces deberemos moverlo a un módulo.
Esto sucede así porque la forma que tiene visualbasic de definir código público disponible en el proyecto es a través del módulo. Lo que confunde es que esto sólo se refiere a
constantes, Tipos definidos por el usuario (estructuras, TDU), matrices y declaraciones (de DLLs). Un módulo puede también tener código privado. Pero un formulario que tenga algo de lo marcado en otro color anteriormente sólo puede contenerlo si se declara privado. Nota que en cambio las funciones y rutinas (SUBs) si pueden ser públicas o privadas en el formulario.
Saludos...