Нулевая проблема текстового поля - PullRequest
21 голосов
/ 14 апреля 2011

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

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

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

РЕДАКТИРОВАТЬ: @Dimse, я пытался "", не работает.А также textbox.text = Null, появляется сообщение об ошибке, сообщающее, что текстовое поле не активно .. Очень странно.

Ответы [ 8 ]

53 голосов
/ 14 апреля 2011

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

If IsNull(Me.textbox.Value) Then

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

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

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

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

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

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

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

3 голосов
/ 25 июля 2015

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

2 голосов
/ 28 ноября 2014

Я прошу прощения, если я пробуждаю мертвецов, но для полноты картины я собираюсь дать код для , как также проверять пробелы (явно «пустые / пустые») :

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

1 голос
/ 14 апреля 2011

Нуль не равен другому Нуль;)

попробуйте If isNull (Me.textbox.Value) Тогда

1 голос
/ 14 апреля 2011

Расширьте свою сабву так:

If is null(Me.textbox.Value) Or (Me.textbox.Value = "") Then
    Exit Sub
End if
0 голосов
/ 20 января 2016

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

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

MsgBox "Field Empty"

Else

MsgBox "Field Not Empty"

End If
0 голосов
/ 29 августа 2014

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

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

Поскольку Textbox.Value обновляется только при событии изменения, он не обновлялся при keyup, поэтому Textbox.Text - это то, что в данный момент находится в поле.

Сводка: Или используйте свойство .Text

0 голосов
/ 14 апреля 2011

Я думаю, вам может понадобиться снова проверить "", пустую строку, а не Null.

...