2011-04-14 3 views
19

У меня есть текстовое поле и кнопка в моей форме доступа. В событии клика на кнопке я хочу посмотреть, пусто ли текстовое поле, если оно есть, ничего не будет выполнено. Так я используюОшибка в текстовом поле

If Me.textbox.Value = Null Then 
    Exit Sub 
End if 

Но это не работает ... Я проверил textbox.value в окне выполнения и это Null, но если пункт просто не работает ... Почему?

ИЗМЕНИТЬ: @ Прошу, я попробовал "", не работает. А также textbox.text = Null, он высказывает ошибку, сообщая мне, что текстовое поле неактивно .. Очень странно.

+1

В этом случае вам не нужно свойство .Value, так как это свойство элементов управления по умолчанию. 'If ​​IsNull (Me! Textbox) Then' должно быть достаточно (или, если вы привязали элемент управления к полю, которое допускает злую строку нулевой длины, вам нужно будет проверить длину значения элемента управления, связанного с пустой строкой , 'Если Len (Me! Textbox & vbNullString) = 0 Тогда' - но я просто повторяю то, что говорили все остальные, без явного свойства .Value. –

ответ

47

Null никогда не равен ничего, даже нет. Используйте функцию IsNull().

If IsNull(Me.textbox.Value) Then 

Если вы хотите Me.textbox относились так же, когда она содержит пустую строку, когда это Null, сцепить пустую строку к нему и проверить длину комбинированной строки:

If Len(Me.textbox.Value & "") = 0 Then 

You также может использовать именованную константу, vbNullString, вместо строкового литерала, "", для пустой строки.

If Len(Me.textbox.Value & vbNullString) = 0 Then 

Использование строкового литерала требует, чтобы VBA каждый раз строил эту строку с нуля. С указанной константой VBA нужно только ссылаться на нее, поэтому она должна быть быстрее и использовать меньше памяти. Однако во многих (возможно, большинстве) случаях преимущество производительности с vbNullString было бы настолько незначительным, что вы не заметили разницы. Также см. comment below от David-W-Fenton.

Для меня более неотложной причиной использования vbNullString является то, что он мгновенно узнаваем мои стареющие глаза. И наоборот, с строковым литералом для меня требуется (крошечный бит) дольше, чтобы подтвердить, что "" на самом деле не что-то еще ... например " " или "'". Единственным недостатком с vbNullString, IMO, является то, что требуется больше ввода, чем "".

И, наконец, хотя на самом деле вам не нужно явно ссылаться на свойство Value (так как это свойство по умолчанию для текстового поля), я оставил его, потому что у вас это было так и потому, что я предпочитаю быть явным с Value, тоже. :-)

+0

Спасибо .. Я получаю его .. – darkjh

+8

В коде VBA вы должны привыкнуть использовать именованную константу 'vbNullString' вместо пустой строки, т. е." ", потому что память потому что именованная константа уже выделена. Это не имеет значения в большинстве случаев, но в цикле это может быть, так что привычка гарантирует, что вы получите это правильно, когда это имеет значение. –

+0

@ David-W-Fenton: Thanks для консультации !! – darkjh

0

Думаю, вам, возможно, потребуется снова проверить «», пустую строку, а не нуль.

1

Расширьте к югу, как так:

If is null(Me.textbox.Value) Or (Me.textbox.Value = "") Then 
    Exit Sub 
End if 
+0

Нет .. не работает ... – darkjh

1

Null не равно другому Null;)

попробовать Если IsNull (Me.textbox.Value) Тогда

+0

Ahhh I didn ' я вижу ваш ответ .. Спасибо в любом случае – darkjh

0

Я не мог заставить это работать, так как я использовал событие KeyUP. Поэтому вместо этого я работал для меня.

If(Textbox.Text = '') 
    ... 

С Textbox.Value только обновления на события изменения, он не обновляется на KeyUp, так TextBox.Text является то, что в настоящее время в поле.

Резюме: В качестве альтернативы, используйте свойство .text

2

Я прошу прощения, если я пробуждение мертвого, но только ради полноты я собираюсь дать код how to test for spaces (visibly 'blank/empty') as well:

If IsNull(Me.Textbox) Or Trim(Me.Textbox) = vbNullString Then 
If Trim(Me.Textbox & vbNullString) = vbNullString Then 'Shorter version 
If Len(Trim(Me.Textbox) & vbNullString) = 0 Then 'Shortest version 

Я пришел сюда, чтобы посмотреть, как обрабатывать пробелы, пустые/ZLS, & NULL's

2

Я также извиняюсь за пробуждая мертвых, но мне интересно, что никто не рассмотрел использование функции Nz (см. ее @MSDN), очень популярной в VBA, также пригодной для использования в Access/SQL, и, на мой взгляд, более удобное, сжатое и мощное решение для значения с нулевым значением в выражениях.

0

Просто используйте второй критерий, который будет работать!
В этом случае простое слово типа «проверка».

If Forms![Basic]![Table.Item] & "check" = "check" Then 

MsgBox "Field Empty" 

Else 

MsgBox "Field Not Empty" 

End If 
+0

Пожалуйста, отформатируйте свой ответ! –

Смежные вопросы