wake-up-neo.com

Combobox null in if-Anweisung

Ich versuche, eine if -Anweisung zu codieren, bei der eine bestimmte Combobox den Wert null hat und dann einen bestimmten Teil des Codes ausführt. Ich habe das geschrieben:

Private Sub ProjectAddSetDateAutoBtn_Click()
If ProjectAddAllDueDateAutoCmBx = Null Then
'Code1
Msgbox("ComboBox Is Null")
Else
'Code2
Msgbox("ComboBox Has Data")
End If
End Sub

Ich lasse die Combobox ohne Daten, und dann wird der Code im ersten Teil des Falls oder der Code im 2. Teil nicht ausgeführt. Wenn ich Daten in die Box eingebe, wird der 2. Teil der if-Anweisung einwandfrei ausgeführt. Es gibt keine Fehler, ich bin darüber ziemlich überrascht. Haben ComboBoxen ihre eigenen "Null"? Gibt es ein Problem mit dieser if-Anweisung?

10
D347HxD

Nichts ist gleich Null, nicht einmal ein anderer Null .

Verwenden Sie IsNull () , um zu überprüfen, ob das Kombinationsfeld Null ist.

'If ProjectAddAllDueDateAutoCmBx = Null Then
If IsNull(ProjectAddAllDueDateAutoCmBx) = True Then
16
HansUp

Obwohl die akzeptierte Antwort völlig korrekt ist, verwende ich einen anderen Ansatz:

If HasValue(ProjectAddAllDueDateAutoCmBx) Then

wo ist die HasValue-Funktion:

Public Function HasValue(v As Variant) As Boolean
    If Trim(v & "") <> "" Then
        HasValue = True
    Else
        HasValue = False
    End If
End Function

Dies hat den Vorteil, dass die Werte NULL und "" (oder alle reinen Whitespaces) gleich behandelt werden. Dies ist ein Vielfaches, was Sie mit MSAccess-Steuerelementen wünschen. Wenn Sie beispielsweise einen Wert in ein Textfeld mit Nullwert eingeben und ihn mit der Rücktaste erneut entfernen, wird der Wert "" nicht "NULL". Aus Benutzersicht ist dies meistens gleich.

[Der (v & "") - Teil ist nur ein Trick, um die Konvertierung in einen String zu erzwingen.]

4
Oliver

Sie können keinen = Null-Vergleich verwenden, um die gewünschten Ergebnisse zu erhalten, da Null propagiert. Um dies in Aktion zu sehen, versuchen Sie Folgendes:

? Null = Null

im Direktfenster werden Sie sehen, dass Null zurückgegeben wird. Verwenden Sie die IsNull-Funktion, die erwartungsgemäß true oder false zurückgibt.

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

Ich würde vorschlagen

If IsNull(ProjectAddAllDueDateAutoCmBx.Value) Then

Es prüft korrekt nach Null (IsNull anstelle von = Null) und prüft explizit den value des Kombinationsfelds.

(In den meisten Fällen wird - abhängig vom Kontext - nur der Name des Steuerelements verwendet, um den Wert zu erhalten, es schadet jedoch nicht, explizit zu sein.)

3
Heinzi

das Äquivalent von null in VB ist Nothing, also möchte Ihr Scheck sein:

If ProjectAddAllDueDateAutoCmBx Is Nothing Then

....

es hilft hoffnung.

0
ZaoTaoBao