statement not macro else elif ejemplos vba if-statement excel-vba excel-2007 nothing

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