【问题标题】:Access remove line break in string, program tells it's NULL访问删除字符串中的换行符,程序告诉它是NULL
【发布时间】:2018-11-15 21:18:32
【问题描述】:

我有代码可以执行某些操作,然后您在文本字段中按 Enter,问题是当您使用 Ctrl+Enter 时,我可以捕获该事件,但访问在下一行告诉我该字段显然为 NULL

Private Sub Text5_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Or KeyAscii = 10 Then
    If Len(Me.Text5) = 0 Then Exit Sub


    If Val(Right(Me.Text5, 1)) > 2 Then Me.Text5 = Left(Me.Text5, Len(Me.Text5) - 1) & "0"

所以“Len”工作正常,但“Right”函数给出“无效使用 null”,当我点击调试并检查其值为 NULL 时

我想不通

我想我需要删除换行符,但是当文本框为 null 并且字符串的每个函数都吐出该错误时该怎么做

【问题讨论】:

  • 一种方法是添加另一张支票If IsNull(Me.Text5) Then Exit Sub
  • 那么问题是,一旦你按下 enter,文本字段的长度就不再是 0,所以即使它是 null,它也会通过你的 null 检查?
  • 我按回车键,一切都很好,但是当我按回车键+ctrl(据说是 KeyAscii = 10)时,即使我的文本框中有文本,它也说 Me.Text5 为空跨度>
  • 在第一行放一个断点。当您遇到断点时,在即时窗口中键入?Len(Me.Text5)。它返回什么?
  • 好吧,我错了一点,但是,为什么当我按下 Ctrl+enter 时,包含实际文本的文本字段显示为 NULL,但只需输入即可正常工作

标签: ms-access vba


【解决方案1】:

您检查的问题是Len(Null) 不是0,而是Null

有几种方法可以解决这个问题。首先,如 cmets 中所述,您可以简单地为IsNull 添加检查:

If IsNull(Me.Text5) Or Len(Me.Text5) = 0 Then

您可以这样做的另一种方法是通过连接 vbNullString 来强制它合并:

If Len(Me.Text5 & vbNullString) = 0 Then

【讨论】:

  • @Mr-Auto 我没有声称它不会。在任何给定时间,我都不知道Me.Text5 中的 what 是什么。我所做的声明是“Len(Null) 不是0”,如果您绑定了控件,则该测试是一个问题。
【解决方案2】:

您也可以使用Nz 并设置您希望的返回值以防表达式为空,在此示例中还可以使用vbNullString 并检查此函数的结果:

If Nz(Me.Text5, vbNullString) = vbNullString Then

If Len(Nz(Me.Text5, vbNullString) = 0) Then

If Nz(Me.Text5, 0) = 0 Then

If Not Nz(Me.Text5, False) Then

当然,您可以先将结果存储在一个变量中,然后再检查并使用它。 满足您的需求。

【讨论】:

    【解决方案3】:

    好吧,我尽可能多地对其进行测试,只是当您在字段上使用 Ctrl+Enter 并捕获按键时,由于某种原因,该字段将为空,我看不到可能的解决方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 2012-04-18
      相关资源
      最近更新 更多