2013-11-12 7 views
7

Я пытаюсь закодировать оператор if, где, если определенная combobox имеет значение NULL, тогда она запускает определенную часть кода, если в ней есть данные, тогда она запускает другую. Я написал это:Combobox null in if statement

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

Я оставляю выпадающий без данных, а затем он не запускается код в первой части, если или код во 2-й части этого либо! Если я ввожу данные в поле, он отлично выполняет вторую часть инструкции if. Ошибок нет, я на этом сильно зациклен. У ComboBoxes есть свой «Null»? Есть ли проблема с этим оператором if?

+0

Нуль не то же самое, как «нет данных». Null означает, что никаких комбобокса нет, что, вероятно, никогда не будет истинным. Вам нужно только решить, есть ли у него данные или нет. – PMF

+0

Вы не хотите проверять, является ли combobox _checked_? 'Если ProjectAddAllDueDateAutoCmBx.Checked Then ...' – CompuChip

+0

PMF; что бы я заменил нулевым значением без данных? Compu; Я думаю, что у вас есть comboboxs, смешанные с кнопками check/option? – D347HxD

ответ

0

эквивалент нуль в VB является Ничто так чек не хочет быть:

If ProjectAddAllDueDateAutoCmBx Is Nothing Then 

....

это надежда помогает.

+0

Кажется, что еще не запускать код в разделе ничего. – D347HxD

+0

wtf ... так же есть данные? почему вы не пытаетесь отлаживать? или напечатать количество элементов с помощью ..ListCount .. – ZaoTaoBao

+3

В VBA, 'Nothing',' Null' и 'Empty' являются тремя * разными * значениями! – Heinzi

4

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

? Null = Null 

в окне Immediate, и вы увидите, что 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 
+0

Спасибо! Если бы я мог, я бы перечислил ваши ответы и ответы Хейнзи как ответ, а также HansUp, хотя он первым ответил, и я могу отметить только один, чтобы он получил эту ага. Он действительно работает и благодарит вас за описание того, почему '= Null' не работает; Я буду помнить об этом! – D347HxD

2

Я хотел бы предложить

If IsNull(ProjectAddAllDueDateAutoCmBx.Value) Then 

Это правильно проверяет NullIsNull (вместо = Null), и она явно проверяет значение поля со списком.

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

+0

Спасибо! Если бы я мог, я бы перечислил ваши ответы и ответы pteranodon как ответ, а также HansUp, хотя он первым ответил, и я могу отметить только один, чтобы он получил эту ага. Это сработало, много любви. – D347HxD

+0

@ D347HxD: Без проблем, пожалуйста! – Heinzi

2

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

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 

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

[The (v & «») -часть это просто уловка, чтобы заставить преобразование в строку.]