处理 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 中的空单元格以进行访问的主要内容,如果未能解决你的问题,请参考以下文章