Il existe une condition If
dans une application VBA, comme indiqué ci-dessous:
If Not My_Object Is Nothing Then
My_Object.Compute
Lorsque le code est exécuté en mode débogage, j'ai constaté que la condition If
renvoie une valeur true même lorsque My_Object
contient "Aucune variable".
Quelqu'un pourrait-il s'il vous plaît expliquer cela? Je veux que My_Object.Compute
ne soit exécuté que lorsque My_Object
existe.
Sur la base de votre commentaire à Issun:
Merci pour l'explication. Dans mon cas, l'objet est déclaré et créé avant la condition If. Alors, comment utiliser If condition pour rechercher <Aucune variable>? En d'autres termes, je ne veux pas exécuter My_Object.Compute si My_Object a <Aucune variable>
Vous devez vérifier l'une des propriétés de l'objet. Sans nous dire ce qu'est l'objet, nous ne pouvons pas vous aider.
J'ai testé plusieurs objets courants et constaté qu'une Collection
instanciée sans ajout d'éléments affiche <No Variables>
dans la fenêtre de surveillance. Si votre objet est bien une collection, vous pouvez rechercher la condition <No Variables>
à l'aide de la propriété .Count
:
Sub TestObj()
Dim Obj As Object
Set Obj = New Collection
If Obj Is Nothing Then
Debug.Print "Object not instantiated"
Else
If Obj.Count = 0 Then
Debug.Print "<No Variables> (ie, no items added to the collection)"
Else
Debug.Print "Object instantiated and at least one item added"
End If
End If
End Sub
Il est également intéressant de noter que si vous déclarez un objet As New
, la vérification Is Nothing
devient inutile. La raison en est que lorsque vous déclarez un objet As New
, il est créé automatiquement lors de son premier appel, même si vous l'appelez pour la première fois, c'est pour voir s'il existe!
Dim MyObject As New Collection
If MyObject Is Nothing Then ' <--- This check always returns False
Cela ne semble pas être la cause de votre problème spécifique. Mais, étant donné que d’autres peuvent trouver cette question grâce à une recherche Google, je voulais l’inclure car c’est une erreur courante pour les débutants.
Parce que votre objet de classe n'a pas de variables ne signifie pas que ce n'est rien. Déclarer et créer et créer un objet sont deux choses différentes. Regardez et voyez si vous définissez/créez l'objet.
Prenons par exemple l'objet dictionnaire - le fait qu'il ne contienne aucune variable ne signifie pas qu'il n'a pas été créé.
Sub test()
Dim dict As Object
Set dict = CreateObject("scripting.dictionary")
If Not dict Is Nothing Then
MsgBox "Dict is something!" '<--- This shows
Else
MsgBox "Dict is nothing!"
End If
End Sub
Cependant, si vous déclarez un objet mais ne le créez jamais, ce n'est rien.
Sub test()
Dim temp As Object
If Not temp Is Nothing Then
MsgBox "Temp is something!"
Else
MsgBox "Temp is nothing!" '<---- This shows
End If
End Sub
Dans mon exemple de code, je définissais my object
sur rien et je ne pouvais pas faire en sorte que la partie "non" de l'instruction if ne fonctionne pas avec l'objet. J'ai essayé if My_Object is not nothing
et aussi if not My_Object is nothing
. C'est peut-être juste un problème de syntaxe que je n'arrive pas à comprendre mais je n'avais pas le temps de perdre mon temps, alors j'ai fait une petite solution comme celle-ci:
if My_Object is Nothing Then
'do nothing
Else
'Do something
End if