Подтвердить что ты не робот

Ошибка в текстовом поле

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

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

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

EDIT: @Dimse, я попробовал "", не работает. А также textbox.text = Null, он выдает сообщение о том, что текстовое поле неактивно.. Очень странно.

4b9b3361

Ответ 1

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

If IsNull(Me.textbox.Value) Then

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

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.: -)

Ответ 2

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

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

Ответ 3

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

Ответ 4

Разверните свой субпоток так:

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

Ответ 5

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

try Если isNull (Me.textbox.Value) Затем

Ответ 6

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

Ответ 7

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

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

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

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

Ответ 8

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

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

MsgBox "Field Empty"

Else

MsgBox "Field Not Empty"

End If