我的Access表单上有一个文本框和一个按钮。在按钮的单击事件中,我想查看文本框是否为空,如果是,则不会执行任何操作。 所以我用
If Me.textbox.Value = Null Then
Exit Sub
End if
但它不起作用...我在执行窗口中检查了textbox.value并且它是Null,但if子句不起作用......为什么?
编辑:@Dimse,我试过“”,不起作用。而且textbox.text = Null,它弹出一个错误告诉我文本框没有活动..很奇怪。答案 0 :(得分:52)
Null永远不会等于任何东西,甚至不是Null。使用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
的性能优势会非常小,以至于您不会注意到差异。另请参阅comment below中的David-W-Fenton。
对我来说,使用vbNullString
的更有说服力的理由是,它可以让我的老眼睛立刻识别出来。相反,使用字符串文字,我需要(一点点)更长时间来确认""
实际上不是其他内容......如" "
或"'"
。 IMO vbNullString
的唯一缺点是需要比""
更多的输入。
最后,虽然你实际上并不需要显式引用Value
属性(因为它是文本框的默认属性),但我把它留在了,因为你有这种方式,因为我更喜欢明确Value
。 : - )
答案 1 :(得分:3)
我也为唤醒死者而道歉,但我想知道没有人考虑使用Nz
功能(见@MSDN),在VBA中非常流行,也可用于Access / SQL,在我看来,这是表达式中可空值的更方便,简洁和强大的解决方案。
答案 2 :(得分: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的的
答案 3 :(得分:1)
像这样扩展您的子:
If is null(Me.textbox.Value) Or (Me.textbox.Value = "") Then
Exit Sub
End if
答案 4 :(得分:1)
Null不等于另一个Null;)
尝试If isNull(Me.textbox.Value)然后
答案 5 :(得分:0)
我认为您可能需要检查“”,空字符串,而不是Null。
答案 6 :(得分:0)
我无法使用它,因为我正在使用KeyUP事件。相反,这对我有用。
If(Textbox.Text = '')
...
由于Textbox.Value仅更新了更改事件,因此它没有在keyup上更新,因此Textbox.Text是当前框中的内容。
摘要:或者,使用.Text属性
答案 7 :(得分:0)
只需使用第二个标准,即可使用!!
在这种情况下,只是一个简单的词,如“检查”。
If Forms![Basic]![Table.Item] & "check" = "check" Then
MsgBox "Field Empty"
Else
MsgBox "Field Not Empty"
End If
答案 8 :(得分:0)
我在某处看到了这个,想分享一下:
If Len(Trim(Me.txtBox.Value)) > 0 Then