2010-04-13 9 views

Respuesta

80
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 
+0

¡Sabía que tenía que ser simple cuando busqué en Google y no encontré nada! ¡Gracias por tu ayuda! – Icode4food

+16

Encontrar ¡Nada fue la respuesta correcta! ;) –

+3

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 ... –

0

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.

+1

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

+0

@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? –

Cuestiones relacionadas