【问题标题】:2427 You entered an expression that has no value2427 您输入的表达式没有值
【发布时间】:2021-10-14 13:03:00
【问题描述】:

我有一个功能可以根据 id 字段将我的报告拆分为单独的 PDF 文件:

Public Function PrintList() As String

    Dim MyPath As String
    Dim MyFilename As String
    Dim myId As String
    Dim filter As String
    MyPath = "C:\reports\"

    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("SELECT DISTINCT id FROM table")

    'Loop through the set
    Do While Not rs.EOF

        If Not IsEmpty(rs!id) And Not IsNull(rs!id) Then
            myId = rs!id
        Else
            myId = ""
        End If

        filter = "id = '" & myId & "'"

        'Open report preview and auto-save it as a PDF
        DoCmd.OpenReport "myReport", acViewPreview, , filter

        MyFilename = "N" & myId & ".pdf"
        DoCmd.OutputTo acOutputReport, "", acFormatPDF, MyPath & MyFilename, False

        'Close the previewed report
        DoCmd.Close acReport, "myReport"

        rs.MoveNext
    Loop

End Function

但是,在运行时,我会收到此错误/警告:

2427 您输入的表达式没有值。

id 为空时会发生这种情况。我什至不知道这是错误还是警告。单击确定后,该函数继续运行到最后没有任何问题,输出文件将命名为N.pdf

由于这个消息框不像通常的错误消息框,而且它没有给我调试或结束执行的选项,我猜这不是错误?

我曾尝试使用 DoCmd.SetWarnings False 抑制警告,但它不起作用。

我该如何解决这个问题,或者至少抑制它以使其不显示?

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    VBA 中没有短路,因此请尝试更改此设置:

        If Not IsEmpty(rs!id) And Not IsNull(rs!id) Then
            myId = rs!id
        Else
            myId = ""
        End If
    

    到这里:

    If Not rs!Id Is Nothing Then
        If Not IsNull(rs!id) Then
            If Not IsEmpty(rs!id) Then
                myId = rs!id
            Else
                myId = ""
            End If
        Else
            myId = ""
        End If
    Else
        myId = ""
    End IF
    

    【讨论】:

    • 第二个myId = rs!id不应该是myId = ""吗?
    • 即使没有短路,这些表达式的计算结果是否仍为 True 或 False?
    • 确实如此,我还没有看到问题出在哪里。你能为我RBarryYoung详细解释一下吗?
    • @ashareef 否,IsEmpty(..) 会抛出错误,因为它试图访问 id 字段对象的 .Value 属性。
    • @Chin 同意您的第一条评论。我会纠正它。至于您的第二条评论,当第二个对象不存在时,此错误来自尝试访问绑定另一个对象的控件或对象的属性。在这种情况下,第二个对象是返回的 SQL 列值(显然)绑定到 ADO 字段对象“id”。无论出于何种原因,NULL 列值表现为 Field 对象内部的非创建值,因此出现错误。
    猜你喜欢
    • 2015-04-25
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2018-11-28
    相关资源
    最近更新 更多