104 votes

VBA vérifie si l'objet est défini

J'ai une variable globale qui est une instance de ma classe personnalisée.

Comment puis-je vérifier si l'objet est défini ou si je dois l'initialiser ?

157voto

stakx Points 29832
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

5voto

Cool Blue Points 664

La manière (non)sûre de le faire - si vous êtes d'accord avec ne pas utiliser l'option explicite - est...

Not TypeName(myObj) = "Empty"

Cela permet également de traiter le cas si l'objet n'a pas été déclaré. C'est utile si vous voulez juste commenter une déclaration pour désactiver un comportement...

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 installe automatiquement une variable non déclarée en tant que type de variante vide. Il élimine le besoin d'un booléen auxiliaire pour gérer le comportement.

3voto

Amy Points 35

Lorsque vous utilisez des variables globales, il est possible de se retrouver dans une situation dans laquelle l'objet est vide. Donc, le code :

If Not obj Is Nothing Then
  'obj is already set
Else
  'set obj
End If

produit une erreur « objet requis ».

Dans cette situation, les travaux suivants :

'First check it is initialized 
If IsObject(obj) Then
     'Then check if it is set
     If Not obj Is Nothing Then
        'obj is set
     Else
        'set obj
     End If
End If

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X