1

j并且d两者都评估相同的函数,但是当我If IsNull用来捕获任何空值时,d 的值没有被正确评估。这是什么原因造成的?

    Dim d As Integer
    Dim j As Integer

    j = DSum("Count", "qry_nihr_unique")
    If IsNull(d = DSum("Count", "qry_nihr_unique")) Then
        MsgBox "No records were found for the data criteria you entered"
        GoTo ESub
    Else
        Me.un_p.Value = d
    End If

    Debug.Print "j = " & j
    Debug.Print "d = " & d


    j = 58
    d = 0

回答后更新代码

    Dim d
    d = DSum("Count", "qry_nihr_unique")
    If IsNull(d) Then
        MsgBox "No records were found for the data criteria you entered"
        GoTo ESub
    Else
        Me.un_p.Value = d
    End If

在下面 HansUp 的回答之后,我相信这是写这个的最有效的方法。

4

1 回答 1

1

在 内IsNull(),代码检查是否d等于DSum()表达式。这是一个相等测试,没有分配给d. 所以 的值d保持不变 --- 它被初始化为零并保持为零。

情况很像这个立即窗口会话:

? DSum("id", "tblFoo")
 134 
d = 0
? (d = DSum("id", "tblFoo"))
False
? d
 0
? IsNull(d = DSum("id", "tblFoo"))
False
? d
 0

以下语句将DSum()结果分配给d; 不测试两者是否相等:

d = DSum("id", "tblFoo")
? d
 134 
于 2013-01-15T10:39:22.950 回答