处理 VBA 中的空单元格以进行访问

Posted

技术标签:

【中文标题】处理 VBA 中的空单元格以进行访问【英文标题】:Dealing with Empty Cells in VBA for Access 【发布时间】: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() 哦抱歉,我不知道为什么我没有检查。 【参考方案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比较是不行的

【讨论】:

以上是关于处理 VBA 中的空单元格以进行访问的主要内容,如果未能解决你的问题,请参考以下文章

将多个值写入一个单元格 - VBA

如何在 VBA 中锁定 Excel 单元格?

选择您的 if 语句触发的单元格并在 vba 中选择该单元格

如果当前单元格在 VBA 中为空,则获取相邻单元格的值

Excel VBA:用相邻的单元格值填充空单元格

使用 VBA 在 Excel 中处理合并和居中单元格