Ошибка в текстовом поле
У меня есть текстовое поле и кнопка в моей форме доступа. В событии клика на кнопке я хочу посмотреть, пусто ли текстовое поле, если оно есть, ничего не будет выполнено.
Поэтому я использую
If Me.textbox.Value = Null Then
Exit Sub
End if
Но это не работает... Я проверил textbox.value в окне выполнения и это Null, но предложение if просто не работает... Почему?
EDIT: @Dimse, я попробовал "", не работает. А также textbox.text = Null, он выдает сообщение о том, что текстовое поле неактивно.. Очень странно.
Ответы
Ответ 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