Ho una variabile globale che è un'istanza della mia classe personalizzata.
Come posso verificare se l'oggetto è impostato o se devo inizializzarlo?
Ho una variabile globale che è un'istanza della mia classe personalizzata.
Come posso verificare se l'oggetto è impostato o se devo inizializzarlo?
Risposte:
If obj Is Nothing Then
' need to initialize obj: '
Set obj = ...
Else
' obj already set / initialized. '
End If
Oppure, se preferisci il contrario:
If Not obj Is Nothing Then
' obj already set / initialized. '
Else
' need to initialize obj: '
Set obj = ...
End If
obj Is Nothing
NON è la stessa cosa che controllare IsNothing(obj)
! Grazie per la sintassi corretta per controllare questo ... non so perché IsNothing()
si comporta in modo diverso ...
Not (obj Is Nothing)
più facile da capire di Not obj Is Nothing
. Il mio cervello non sa cosa sia un "Non oggetto"!
Il modo (non) sicuro per farlo - se sei d'accordo con non usare l'opzione esplicita - è ...
Not TypeName(myObj) = "Empty"
Questo gestisce anche il caso se l'oggetto non è stato dichiarato. Questo è utile se vuoi semplicemente commentare una dichiarazione per disattivare un comportamento ...
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
Questo funziona perché VBA creerà automaticamente un'istanza di una variabile non dichiarata come un tipo di variante vuota. Elimina la necessità di un booleano ausiliario per gestire il comportamento.
Option Explicit
. Non guadagna nulla tranne i problemi. Per "cambiare" il comportamento, utilizzare la compilazione condizionale.