Tengo una variable global que es una instancia de mi clase personalizada.Comprobación de VBA si el objeto está configurado
¿Cómo verifico si el objeto está configurado o si necesito inicializarlo?
Tengo una variable global que es una instancia de mi clase personalizada.Comprobación de VBA si el objeto está configurado
¿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
El (des) forma segura de hacer esto - si estás bien 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 sólo quiere comentar una declaración para apagar un 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 se auto-instanciar una variable no declarada como un tipo Variant vacío. Elimina la necesidad de un booleano auxiliar para administrar el comportamiento.
Nadie debería tener ningún código VBA sin 'Option Explicit'. No gana nada excepto los problemas. Para "cambiar" el comportamiento, use la compilación condicional. – Andre
@andre, sí, punto justo. Me siento bien sin eso porque utilizo la notación húngara para el alcance, pero trato de evitar el vba estos días si puedo. La mayor parte de lo que veo se trata de declaraciones explícitas, nombre seguro y evitar las temidas variantes. ¿Cuáles son tus razones principales? –
¡Sabía que tenía que ser simple cuando busqué en Google y no encontré nada! ¡Gracias por tu ayuda! – Icode4food
Encontrar ¡Nada fue la respuesta correcta! ;) –
Tenga en cuenta que comprobar 'obj Is Nothing' NO es lo mismo que verificar' IsNothing (obj) '! Gracias por la sintaxis correcta para comprobar esto ... no estoy seguro de por qué 'IsNothing()' se comporta de manera diferente ... –