not - VBA: Condicional-No es nada
vba excel if else statement (3)
Basado en tu 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 <No Variables>? En otras palabras, no quiero ejecutar My_Object.Compute si My_Object tiene <No Variables>
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 Collection
instanciada sin elementos agregados muestra <No Variables>
en la ventana de observación. Si su objeto es de hecho una colección, puede verificar la condición <No Variables>
usando 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 declara cualquier objeto As New
, la verificación Is Nothing
vuelve inútil. La razón es que cuando declara un objeto As New
, se crea automáticamente cuando se llama por primera vez, incluso si la primera vez que lo llama 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, como otros pueden encontrar esta pregunta a través de una búsqueda en Google, quise incluirla porque es un error común de principiante.
Hay una condición If
en una aplicación VBA como se ve a continuación:
If Not My_Object Is Nothing Then
My_Object.Compute
Cuando el código se ejecuta en modo de depuración, encontré que la condición If
devuelve un verdadero incluso cuando My_Object
tiene "No Variables".
¿Podría alguien por favor explicar esto? Quiero que My_Object.Compute
se ejecute solo cuando My_Object
existe.
En mi código de muestra, estaba configurando my object
a nada, y no pude obtener la parte "no" de la instrucción if para que funcionara con el objeto. if My_Object is not nothing
y if not My_Object is nothing
. Puede ser solo una cosa de sintaxis que no puedo entender, pero no tuve tiempo para perder el tiempo, así que hice una pequeña solución como esta:
if My_Object is Nothing Then
''do nothing
Else
''Do something
End if
Solo porque su objeto de clase no tiene variables no significa que no sea nada. Declarar y objetar y crear un objeto son dos cosas diferentes. Mire y vea si está configurando / creando el objeto.
Tomemos, por ejemplo, el objeto de diccionario, solo porque no contenga variables no significa que no se haya creado.
Sub test()
Dim dict As Object
Set dict = CreateObject("scripting.dictionary")
If Not dict Is Nothing Then
MsgBox "Dict is something!" ''<--- This shows
Else
MsgBox "Dict is nothing!"
End If
End Sub
Sin embargo, si declara un objeto pero nunca lo crea, no es nada.
Sub test()
Dim temp As Object
If Not temp Is Nothing Then
MsgBox "Temp is something!"
Else
MsgBox "Temp is nothing!" ''<---- This shows
End If
End Sub