VBA不为空

VBA不为空,vba,ms-access,conditional,Vba,Ms Access,Conditional,在Access中使用某些VBA代码时,当满足一组非常特定的条件时,会弹出一个输入框,要求输入一个整数。到目前为止还不错 Private Sub Command10_Click() If Not IsNull(mrf) Then If min <> max Then If qty <= min Then mrf = GetParamValue End If E

在Access中使用某些VBA代码时,当满足一组非常特定的条件时,会弹出一个输入框,要求输入一个整数。到目前为止还不错

Private Sub Command10_Click()

    If Not IsNull(mrf) Then
        If min <> max Then
            If qty <= min Then
                mrf = GetParamValue
            End If
        End If
    End If
    End Sub
Private子命令10_Click()
如果不为空(mrf),则
如果最小最大,则

如果qtyNo,则Not IsNull工作正常

请记住,IsNull是一个函数,如果传递给它的参数为null,则返回TRUE,否则返回false

您的“If Not IsNull(mrf)Then”语句翻译成英语为“If mrf Not null Then”


这意味着当mrf有一个值时,您正在处理if语句中的代码。如果希望在mrf为null时触发内部代码,则需要从语句中删除NOT

我的猜测是mrf不是空的,即使它是空的或其他什么。它也可能是空的,这与VBA区域中的null不同(我认为)。尝试在调试器中运行代码并查看mrf的值。根据mrf是什么,你可以做一个不同的测试(比如check len(mrf)或者not isNothing(mrf),或者如果它是一个整数,并且它的init为零,那么mrf为0…你就明白了。希望这能帮上忙!

如果
mrf
是Variant,那么它最初是
空的,而不是
Null
。因此你必须使用
IsEmpty()
函数。

您可能对VB6/VBA null/nothing/empty上的这篇文章感兴趣:


Ahh看起来我的问题来自其他地方。另一个选项是将mrf初始化为null。我注意到他没有声明任何变量(最小、最大、mrf),这通常是一个坏主意。打开“option Explicit”(选项显式)可以避免很多类似这样的逻辑错误。