2014-08-27 45 views
0

我有一个功能,我的报告分成基于字段id单独的PDF文件的表达式:2427输入了没有价值

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压制警告,但它不起作用。

我该如何解决这个问题,或者至少抑制它,让它不出现?

enter image description here

回答

0

有没有短路的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 
+0

应该不是第二个'身份识别码= RS id'是'myId =“”'而不是? – Chin 2014-08-27 16:41:29

+0

即使没有短路,这些表达式仍然评估为真或假? – ashareef 2014-08-27 16:45:53

+0

这是真的,我还没有看到问题来自哪里。你能否更详细地为我解释一下RBarryYoung? – Chin 2014-08-27 16:49:57