【问题标题】:Textbox null problem文本框空问题
【发布时间】:2011-08-05 11:40:38
【问题描述】:

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

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

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

编辑:@Dimse,我试过“”,不起作用。还有 textbox.text = Null,它会弹出一个错误,告诉我文本框未激活.. 很奇怪。

【问题讨论】:

  • 在这种情况下您不需要 .Value 属性,因为它是控件的默认属性。 If IsNull(Me!textbox) Then 应该足够了(或者,如果您已将控件绑定到允许邪恶零长度字符串的字段,则需要测试与空字符串连接的控件值的长度,If Len(Me!textbox & vbNullString) = 0 Then - 但是我只是重复其他人所说的话,没有明确的 .Value 属性。

标签: ms-access vba


【解决方案1】:

Null 永远不等于任何东西,即使是 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 中的comment below

对我来说,使用vbNullString 的更令人信服的原因是它可以立即被我老化的眼睛认出。相反,对于字符串文字,我需要(一点点)更长的时间来确认"" 实际上不是别的东西......比如" ""'"。 IMO vbNullString 的唯一缺点是它需要比 "" 更多的输入。

最后,虽然您实际上不需要显式引用 Value 属性(因为它是文本框的默认属性),但我将其保留是因为您采用了这种方式,而且我更喜欢明确还有Value。 :-)

【讨论】:

  • 在 VBA 代码中,您应该养成使用命名常量 vbNullString 而不是空字符串的习惯,即“”,因为命名常量的内存已经分配。在大多数情况下这无关紧要,但在循环中它可能会发生,因此养成这个习惯可以确保你在重要的时候能做到正确。
  • @David-W-Fenton: 谢谢你的建议!!
  • 那个vbNullString 提示,很有用。
【解决方案2】:

我也为唤醒死者而道歉,但我想知道没有人考虑过使用 Nz 函数(参见 @MSDN),它在 VBA 中非常流行,也可用于 Access/SQL 和我认为表达式中可空值的更方便、简洁和强大的解决方案。

【讨论】:

  • 是的,Nz 是在控件中处理 null 的最简单方法。
【解决方案3】:

如果我要唤醒死者,我深表歉意,但为了完整起见,我将提供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 的

【讨论】:

    【解决方案4】:

    Null 不等于另一个 Null ;)

    试试 If isNull(Me.textbox.Value) Then

    【讨论】:

    • 啊,我没有看到你的答案.. 还是谢谢
    【解决方案5】:

    像这样展开你的子:

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

    【讨论】:

      【解决方案6】:

      我认为您可能需要再次检查“”,即空字符串,而不是 Null。

      【讨论】:

        【解决方案7】:

        我无法让它工作,因为我使用的是 KeyUP 事件。所以相反,这对我有用。

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

        由于 Textbox.Value 仅在 change 事件时更新,它不会在 keyup 时更新,因此 Textbox.Text 是当前框中的内容。

        总结:或者,使用 .Text 属性

        【讨论】:

          【解决方案8】:

          只需使用第二个标准,就可以了!!
          在这种情况下,只是一个简单的词,如“检查”。

          If Forms![Basic]![Table.Item] & "check" = "check" Then
          
          MsgBox "Field Empty"
          
          Else
          
          MsgBox "Field Not Empty"
          
          End If
          

          【讨论】:

          • 但这是否会探测null 值?
          【解决方案9】:

          我在某处看到了这个并想分享一下:

          If Len(Trim(Me.txtBox.Value)) > 0 Then

          【讨论】:

            猜你喜欢
            • 2016-03-28
            • 1970-01-01
            • 2023-03-23
            • 1970-01-01
            • 2010-10-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多