J'ai une variable globale qui est une instance de ma classe personnalisée.
Comment vérifier si l'objet est défini ou si je dois l'initialiser?
If obj Is Nothing Then
' need to initialize obj: '
Set obj = ...
Else
' obj already set / initialized. '
End If
Ou, si vous préférez l'inverse:
If Not obj Is Nothing Then
' obj already set / initialized. '
Else
' need to initialize obj: '
Set obj = ...
End If
obj Is Nothing
n'est PAS la même chose que la vérificationIsNothing(obj)
! Merci pour la syntaxe correcte pour vérifier cela ...IsNothing()
Not (obj Is Nothing)
plus facile à comprendre queNot obj Is Nothing
. Mon cerveau ne sait pas ce qu'est un "Not obj"!Le moyen (non) sûr de le faire - si vous êtes d'accord pour ne pas utiliser l'option explicit - est ...
Not TypeName(myObj) = "Empty"
Cela gère également le cas si l'objet n'a pas été déclaré. Ceci est utile si vous souhaitez simplement commenter une déclaration pour désactiver certains comportements ...
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
Cela fonctionne car VBA instanciera automatiquement une variable non déclarée en tant que type Variant vide. Il élimine le besoin d'un booléen auxiliaire pour gérer le comportement.
la source
Option Explicit
. Il ne gagne rien sauf des problèmes. Pour «changer» de comportement, utilisez la compilation conditionnelle.