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
....
надеюсь, что это помогает.