5

在 Access 中使用一些 VBA 代码,当满足一组非常特定的条件时,它将弹出一个 InputBox,要求输入一个整数。到现在为止还挺好。

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

问题是 Not IsNull 似乎被忽略了。我希望它要求输入一个值,除非一个值已经存在。只要满足 min <> max 和 qty <= min 条件,这就会一直触发 InputBox。我在这里想念什么?

4

4 回答 4

11

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

于 2009-03-31T19:28:11.890 回答
4

不,Not IsNull运行良好。

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

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

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

于 2009-03-31T19:23:45.660 回答
1

我的猜测是 mrf 不是空的,即使它是空的或其他东西。它也可能是 Nothing,这与 VBA 领域中的 null 不同(我认为)。尝试在调试器中运行代码并查看 mrf 的值。根据 mrf 是什么,您可以进行不同的测试(例如检查 len(mrf) 与否 isNothing(mrf) 或者如果它是一个整数,并且它的 init 为零,那么 mrf <> 0 .... 你明白了. 希望有帮助!

于 2009-03-31T19:27:00.050 回答
1

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

http://blogs.msdn.com/ericlippert/archive/2003/09/30/53120.aspx

于 2009-03-31T20:18:02.300 回答