文本框null问题

dar*_*kjh 22 ms-access vba access-vba

我的Access表单上有一个文本框和一个按钮.在按钮的单击事件中,我想查看文本框是否为空,如果是,则不会执行任何操作.所以我用

If Me.textbox.Value = Null Then
    Exit Sub
End if
Run Code Online (Sandbox Code Playgroud)

但它不起作用...我在执行窗口中检查了textbox.value并且它是Null,但if子句不起作用......为什么?

编辑:@Dimse,我试过"",不起作用.而且textbox.text = Null,它弹出一个错误告诉我文本框没有活动..很奇怪.

Han*_*sUp 55

Null永远不会等于任何东西,甚至不是Null.使用该IsNull()功能.

If IsNull(Me.textbox.Value) Then
Run Code Online (Sandbox Code Playgroud)

如果你想Me.textbox在它包含空字符串时处理相同的内容,就像它的Null一样,将空字符串连接到它并检查组合字符串的长度:

If Len(Me.textbox.Value & "") = 0 Then
Run Code Online (Sandbox Code Playgroud)

您还可以使用命名常量,vbNullString而不是字符串文字"",用于空字符串.

If Len(Me.textbox.Value & vbNullString) = 0 Then
Run Code Online (Sandbox Code Playgroud)

使用字符串文字需要VBA每次从头开始构造该字符串.使用命名常量,VBA只需要引用它,因此应该更快并使用更少的内存.然而,在许多(可能是大多数)情况下,性能优势vbNullString会非常小,以至于您不会注意到差异.另请参见下面的评论大卫-W-芬顿.

对我来说,使用的更有说服力的理由vbNullString是它可以让我老化的眼睛立刻识别出来.相反,对于字符串文字,我需要(一点点)更长的时间来确认""实际上并不是其他东西...喜欢" "或者"'".vbNullStringIMO 唯一的缺点就是需要更多打字"".

最后,尽管您实际上并不需要显式引用该Value属性(因为它是文本框的默认属性),但我将其保留,因为您有这种方式,因为我也喜欢明确地使用它Value.:-)

  • 在VBA代码中,你应该习惯使用命名常量`vbNullString`而不是空字符串,即"",因为已经分配了命名常量的内存.这在大多数情况下并不重要,但在一个循环中它可能,所以养成这个习惯可以确保你在重要的时候做到正确. (9认同)