Tengo una variable global que es una instancia de mi clase personalizada.
¿Cómo verifico si el objeto está configurado o si necesito inicializarlo?
If obj Is Nothing Then
' need to initialize obj: '
Set obj = ...
Else
' obj already set / initialized. '
End If
O, si lo prefiere al revés:
If Not obj Is Nothing Then
' obj already set / initialized. '
Else
' need to initialize obj: '
Set obj = ...
End If
obj Is Nothing
NO es lo mismo que comprobarIsNothing(obj)
. Gracias por la sintaxis correcta para verificar esto ... no estoy seguro de por qué seIsNothing()
comporta de manera diferente ...Not (obj Is Nothing)
más fácil de entender queNot obj Is Nothing
. ¡Mi cerebro no sabe qué es un "No obj"!La forma (no) segura de hacer esto, si está de acuerdo con no usar la opción explícita, es ...
Not TypeName(myObj) = "Empty"
Esto también maneja el caso si el objeto no ha sido declarado. Esto es útil si solo desea comentar una declaración para desactivar algún comportamiento ...
Dim myObj as Object Not TypeName(myObj) = "Empty" '/ true, the object exists - TypeName is Object 'Dim myObj as Object Not TypeName(myObj) = "Empty" '/ false, the object has not been declared
Esto funciona porque VBA creará automáticamente una instancia de una variable no declarada como un tipo de variante vacía. Elimina la necesidad de un booleano auxiliar para gestionar el comportamiento.
fuente
Option Explicit
. No gana nada excepto problemas. Para "cambiar" el comportamiento, utilice la compilación condicional.