web-dev-qa-db-fra.com

Combobox null dans l'instruction if

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?

10
D347HxD

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
16
HansUp

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.]

4
Oliver

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
4
pteranodon

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.)

3
Heinzi

l'équivalent de null dans VB est Nothing, votre chèque veut donc être:

If ProjectAddAllDueDateAutoCmBx Is Nothing Then

....

cela aide.

0
ZaoTaoBao