我在Access 2010 for Windows中遇到了问题:
我在使用 doCmd.OpenReport 启动报告时发现了这一点。该报告会在 Report_Open 事件中打开一个表单。表单提示用户输入报告参数,并允许他们按"确定"显示报告或按"取消"。 &b;取消" 点击事件设置"取消=真"。
似乎 OpenReport()没有正常响应取消。这似乎是一种经常使用的技术,所以我不敢称之为一个错误,我想知道我是否做错了什么。实际上......我解释的越多,听起来就像一个bug。在这一点上,我希望有人有一个解决方法,或者我错过了一些明显的东西。
这只是我为解释问题而创建的简化示例:
形式
Private Sub Form_Open(Cancel As Integer)
On Error GoTo errHandler
DoCmd.OpenReport "Test Report", acViewPreview, , , acDialog
Exit Sub
errHandler:
Select Case Err.Number
Case 2501 ' Cancelled by user, or by NoData event.
MsgBox "Report cancelled, or no matching data.", vbInformation, "Information"
Case Else
MsgBox "Error " & Err & ": " & Error$, vbInformation, "Form_Open()"
End Select
Resume Next
End Sub
报告
Private Sub Report_Open(Cancel As Integer)
Cancel = True
End Sub
答案 0 :(得分:4)
在这种情况下出现问题的原因是acDialog:
DoCmd.OpenReport "Test Report", acViewPreview, , , acDialog
我想你会发现:
DoCmd.OpenReport "Test Report", acViewPreview
没有问题。
编辑重新评论
您不需要取消报告。在大多数情况下,避免错误比捕获错误更好,因此在打开表单之前检查数据并获取参数。将表单从报表打开事件移动到自己的步骤,并在启动表单之前使用DLookUp或查询来检查数据。
答案 1 :(得分:0)
我无法测试此问题,所以我只提供一个通用的解决方案:从报告定义中删除数据/记录集/记录源。
确定参数后,您可以将记录源应用于报告。如果报告被取消,则会在没有数据连接的情况下取消报告。