【问题标题】:Dealing with Empty Cells in VBA for Access处理 VBA 中的空单元格以进行访问
【发布时间】:2016-07-08 15:03:51
【问题描述】:

我有以下代码,它应该逐步遍历字段数组并创建两个新数组以添加到新记录集:

For Each Field In SDSRecordsets(i)
    Debug.Print (j)
    Debug.Print (Field.Value)
    fieldNames(j) = Field.Name
    If Field.Value = Null Then
        values(j) = ""
    Else
        values(j) = Field.Value
    End If
    j = j + 1
Next

第一次运行此循环时,Debug.Print 行打印出 0,然后在第一个单元格中打印出应有的字符串值。然后它会毫无问题地贯穿其余部分。第二次,它尝试添加一个空单元格。第一个 Debug.Print 按原样打印出 1,第二个按原样打印出 Null。但是,然后我在行上得到一个编译错误:

values(j) = Field.Value

任何人都可以解释为什么它会到达这一行,因为在我看来,If 语句必须将 Null = Null 评估为 false 才会发生这种情况。

我也试过这样做:

If Not IsEmpty(Field.Value) Then

但这也不起作用。

【问题讨论】:

  • 发布后我意识到它应该是: If Not IsEmpty(Field) Then 并且可以正常工作。我仍然想知道为什么其他方式不起作用。
  • 条件Field.Value = Null 不能永远为真,因为Null is never equal to anything, not even Null.
  • 那么有什么函数或者什么东西可以用来测试 Null 值吗?我习惯了像 Java 和 C 这样的语言,其中 null 确实等于 null。
  • 你看我链接的答案了吗? --> IsNull()
  • 哦抱歉,我不知道为什么我没有检查。

标签: vba ms-access


【解决方案1】:

使用Nz函数:

For Each Field In SDSRecordsets(i)
    Debug.Print (j)
    Debug.Print (Field.Value)
    fieldNames(j) = Field.Name
    values(j) = nz(Field.Value,"")
    j = j + 1
Next

你也可以使用isnull([expr])函数,直接与null比较是不行的

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 2023-04-07
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多