J'essaie de coder une instruction if dans laquelle, si une certaine liste déroulante est nulle, elle exécute une certaine partie du code si elle contient des données, puis une autre. J'ai écrit ceci:
Private Sub ProjectAddSetDateAutoBtn_Click()
If ProjectAddAllDueDateAutoCmBx = Null Then
'Code1
Msgbox("ComboBox Is Null")
Else
'Code2
Msgbox("ComboBox Has Data")
End If
End Sub
Je laisse la liste déroulante sans données, et ensuite il n'exécute pas le code dans la première partie du if ou le code dans la 2e partie non plus! Si j'entre des données dans la boîte, il exécute parfaitement la deuxième partie de l'instruction if. Il n'y a pas d'erreur, je suis assez perplexe à ce sujet. Les ComboBox ont-elles leur propre "Null"? Y at-il un problème avec cette déclaration if?
Rien n'est jamais égal à Null, pas même un autre Null .
Utilisez IsNull () pour vérifier si la liste déroulante est Null.
'If ProjectAddAllDueDateAutoCmBx = Null Then
If IsNull(ProjectAddAllDueDateAutoCmBx) = True Then
Bien que la réponse acceptée soit totalement correcte, j’utilise une approche différente:
If HasValue(ProjectAddAllDueDateAutoCmBx) Then
où la fonction HasValue est:
Public Function HasValue(v As Variant) As Boolean
If Trim(v & "") <> "" Then
HasValue = True
Else
HasValue = False
End If
End Function
Cela présente l’avantage de traiter les valeurs NULL et "" (ou tout espace blanc pur) de la même manière, ce qui correspond souvent à ce que vous souhaitez avec les contrôles MSAccess. Par exemple, entrer une valeur dans une zone de texte de valeur NULL et la supprimer à nouveau avec un retour arrière entraînera une valeur "", et non NULL. Du point de vue de l'utilisateur, cela est généralement censé être identique.
[La partie (v & "") est juste une astuce pour forcer la conversion en chaîne.]
Vous ne pouvez pas utiliser une comparaison = Null
pour obtenir les résultats souhaités car Null se propage. Pour voir cela en action, essayez:
? Null = Null
dans la fenêtre immédiate et vous verrez que Null est renvoyé. Utilisez la fonction IsNull, qui retournera la valeur true ou false comme prévu.
Private Sub ProjectAddSetDateAutoBtn_Click()
If IsNull(ProjectAddAllDueDateAutoCmBx) Then
'Code1
Msgbox("ComboBox Is Null")
Else
'Code2
Msgbox("ComboBox Has Data")
End If
End Sub
Je voudrais suggerer
If IsNull(ProjectAddAllDueDateAutoCmBx.Value) Then
Il vérifie correctement Null
(IsNull
au lieu de = Null
), et il vérifie explicitement le value de la liste déroulante.
(Dans la plupart des cas - en fonction du contexte - le simple fait d'utiliser le nom du contrôle donne la valeur, mais le fait d'être explicite ne fait pas de mal.)
l'équivalent de null dans VB est Nothing, votre chèque veut donc être:
If ProjectAddAllDueDateAutoCmBx Is Nothing Then
....
cela aide.