Basado en su comentario a Issun:
Gracias por la explicación. En mi caso, el objeto se declara y crea antes de la condición If. Entonces, ¿cómo uso la condición If para verificar < Sin variables>? En otras palabras, no quiero para ejecutar My_Object.Compute si mi_objeto tiene < ninguna variable>
Es necesario comprobar una de las propiedades del objeto. Sin decirnos cuál es el objeto, no podemos ayudarte.
Probé varios objetos comunes y descubrí que una instancia de Collection
sin elementos añadidos muestra <No Variables>
en la ventana del reloj. Si el objeto es de hecho una colección, se puede comprobar por la condición <No Variables>
utilizando la propiedad .Count
:
Sub TestObj()
Dim Obj As Object
Set Obj = New Collection
If Obj Is Nothing Then
Debug.Print "Object not instantiated"
Else
If Obj.Count = 0 Then
Debug.Print "<No Variables> (ie, no items added to the collection)"
Else
Debug.Print "Object instantiated and at least one item added"
End If
End If
End Sub
También vale la pena señalar que si se declara un objeto As New
entonces el cheque Is Nothing
se vuelve inútil. La razón es que cuando declaras un objeto As New
, se crea automáticamente cuando se llama por primera vez, ¡incluso si la primera vez que llamas es para ver si existe!
Dim MyObject As New Collection
If MyObject Is Nothing Then ' <--- This check always returns False
Esto no parece ser la causa de su problema específico. Pero, dado que otros pueden encontrar esta pregunta a través de una búsqueda en Google, quería incluirla porque es un error común para principiantes.
Cómo se declaró 'My_Object'? – GSerg
¿Puedes aclarar a qué te refieres con "sin variables"?Si My_Object es Nothing, definitivamente significa que no está apuntando a un objeto. Además, ¿cuál es la definición de tipo de My_Object? –
"Quiero que My_Object.Compute se ejecute solo cuando existe My_Object". Su deseo se concede por la presente. (Es decir, ¿hay algún escenario donde este * no * sea el caso ?!) –