当 Variant 为 Null 时,可以使用 Nz 函数返回零、 零长度字符串 (“) 或其他指定值。 例如,可以使用此函数将 Null 值转换为另一个值,并阻止它通过表达式传播。
语法
Nz ( variant [, valueifnull ] )
Nz 函数的语法有以下参数:
参数 |
说明 |
Variant |
必需。 可变的数据类型变量。 |
valueifnull |
可选(除非用于查询中)。 如果变量参数为空,提供值的变量将被返回。 此参数允许您返回非零值或零长度的字符串。 注意: 如果在查询表达式中使用 Nz 函数而不使用 valueifnull 参数,那么在包含空值的字段中结果将是零长度字符串。 |
如果 variant 参数的值为 Null, 则 Nz 函数返回数字零或零长度字符串, (在查询表达式) 中使用时始终返回零长度字符串,具体取决于上下文指示该值应为数字还是字符串。 如果包含可选的 valueifnull 参数,则当变量参数为 Null 时,Nz 函数将返回该参数指定的值。 在查询表达式中使用时, NZ 函数应始终包含 valueifnull 参数,
如果 variant 的值不为 Null,则 Nz 函数返回 variant 的值。
备注
Nz 函数对于可能包含 Null 值的表达式非常有用。 若要强制表达式计算结果为非 Null 值,即使它包含 Null 值,请使用 Nz 函数返回零、零长度字符串或自定义返回值。
例如,当 Variant varX 为 Null 时,表达式 2 + varX 将始终返回 Null 值。 但是, 2 + Nz(varX) 返回 2。
通常可以使用 Nz 函数作为 IIf 函数的替代函数。 例如,在以下代码中,需要包含 IIf 函数的两个表达式才能返回所需结果。 包含 IIf 函数的第一个表达式用于检查变量的值,如果变量为 Null,则将其转换为零。
varTemp = IIf(IsNull(varFreight), 0, varFreight)
varResult = IIf(varTemp > 50, "High", "Low")
在下一个示例中, Nz 函数提供与第一个表达式相同的功能,并且所需结果是通过一个步骤而不是两个步骤实现的。
varResult = IIf(Nz(varFreight) > 50, "High", "Low")
如果为可选参数 valueifnull 提供值,则 当 variant 为 Null 时,将返回该值。 通过包含此可选参数,可以避免使用包含 IIf 函数的表达式。 例如,如果 varFreight 值为 Null,则以下表达式使用 IIf 函数返回字符串。
varResult = IIf(IsNull(varFreight), _
"No Freight Charge", varFreight)
在下一个示例中,提供给 Nz 函数的可选参数提供 varFreight 为 Null 时要返回的字符串。
varResult = Nz(varFreight, "No Freight Charge")
查询示例
Expression |
结果 |
SELECT ProductID, NZ (折扣,“无详细信息”) AS Expr2 FROM ProductSales; |
在 Expr1 列中返回“ProductID”,计算字段“Discount”中的“Null”值,并为所有 Null 值返回“无详细信息可用”, (返回) 的非 null 值。 |
SELECT ProductID, NZ (折扣,“无详细信息可用”) AS ReplaceNull FROM ProductSales; |
返回“ProductID”列中的“ProductID”,计算字段“Discount”中的“Null”值,并返回所有 Null 值的“无详细信息可用”, (返回) 的非 null 值,并在 ReplaceNull 列中显示。 |
VBA 示例
注意: 下面的示例演示了如何在 Visual Basic for Applications (VBA) 模块中使用此函数。 有关使用 VBA 的详细信息,请在搜索旁边的下拉列表中选择“开发人员参考”,并在搜索框中输入一个或多个术语。
以下示例计算窗体上的控件,并根据控件的值返回两个字符串之一。 如果控件的值为 Null,则过程使用 Nz 函数将 Null 值转换为零长度字符串。
Public Sub CheckValue()
Dim frm As Form Dim ctl As Control Dim varResult As Variant ' Return Form object variable ' pointing to Orders form. Set frm = Forms!Orders ' Return Control object variable ' pointing to ShipRegion. Set ctl = frm!ShipRegion ' Choose result based on value of control. varResult = IIf(Nz(ctl.Value) = vbNullString, _ "No value.", "Value is " & ctl.Value & ".") ' Display result. MsgBox varResult, vbExclamation End Sub