将 Null 值归零的 VBA 代码

use*_*211 2 null vba

如何修改这些函数以使 Null 值返回为零?

Function MinOfList(ParamArray varValues()) As Variant
    Dim i As Integer        'Loop controller.
    Dim varMin As Variant   'Smallest value found so far.

    varMin = Null           'Initialize to null

    For i = LBound(varValues) To UBound(varValues)
        If IsNumeric(varValues(i)) Or IsDate(varValues(i)) Then
            If varMin <= varValues(i) Then
                'do nothing
            Else
                varMin = varValues(i)
            End If
        End If
    Next

    MinOfList = varMin
End Function

Function MaxOfList(ParamArray varValues()) As Variant
    Dim i As Integer        'Loop controller.
    Dim varMax As Variant   'Largest value found so far.

    varMax = Null           'Initialize to null

    For i = LBound(varValues) To UBound(varValues)
        If IsNumeric(varValues(i)) Or IsDate(varValues(i)) Then
            If varMax >= varValues(i) Then
                'do nothing
            Else
                varMax = varValues(i)
            End If
        End If
    Next

    MaxOfList = varMax
End Function
Run Code Online (Sandbox Code Playgroud)

Eli*_*ias 5

根据 Brad 的评论,该解决方案仅适用于 Microsoft Access。

一种廉价的方法是使用 nz 函数

NZ(VariableName, 0)
Run Code Online (Sandbox Code Playgroud)

MinOfList 函数结束:MinOfList = NZ(varMin, 0)

MaxOfList 函数结束:MaxOfList = NZ(varMax, 0)

这是一个模仿 NZ 功能的快速 Nz 实现:

Public Function Nz( Value As Variant, ValueIfNull As Variant ) As Variant
    Nz = IIf(IsNull(Value), ValueIfNull, Value)
End Function
Run Code Online (Sandbox Code Playgroud)