Combobox null в инструкции if

Я пытаюсь закодировать оператор if, где если определенный combobox равен null, то он запускает определенную часть кода, если в нем есть данные, то он запускает другой. Я написал следующее:--2-->

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

Я оставляю combobox без данных,а затем он не запускает код в первой части if или код во второй части! Если я ввожу данные в поле, он отлично запускает 2-ю часть оператора if. Ошибок нет, я в тупике. Делать выпадающие списки имеют их собственный "ноль"? Есть ли проблема с этим утверждением if?

5 ответов


ничто никогда не равно Null, даже еще один Null.

использовать IsNull () чтобы проверить, является ли поле значение null.

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

вы не можете использовать = Null сравнение, чтобы получить результаты, которые вы хотите, потому что Null распространяется. Чтобы увидеть это в действии, попробуйте:

? Null = Null

в ближайшем окне, и вы увидите, что возвращается значение Null. Используйте функцию IsNull, которая вернет true или false, как и следовало ожидать.

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

хотя принятый ответ абсолютно правильный, я использую другой подход:

If HasValue(ProjectAddAllDueDateAutoCmBx) Then

где функция HasValue:

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

это имеет преимущество обработки нулевых и "" (или любых чистых пробелов) значений одинаково, что во много раз больше, чем вы хотите с элементами управления MSAccess. Например, ввод значения в текстовое поле с нулевым значением и его повторное удаление с помощью backspace приведет к "" - значению, а не NULL. С точки зрения пользователя это в основном должно быть тот же.

[Часть (v &"") - это просто трюк для принудительного преобразования в строку.]


Я бы предложил

If IsNull(ProjectAddAllDueDateAutoCmBx.Value) Then

он правильно проверяет Null (IsNull вместо = Null), и он явно проверяет стоимостью поля со списком.

(в большинстве случаев-в зависимости от контекста-просто использование имени элемента управления дает значение, но не помешает быть явным.)


эквивалент null в VB-ничто, поэтому ваша проверка хочет быть:

If ProjectAddAllDueDateAutoCmBx Is Nothing Then

....

надеюсь, что это помогает.