MS Access - 取消报告创建的"幻像"流程

use*_*222 5 ms-access vba

我在Access 2010 for Windows中遇到问题:

  1. 使用doCmd.OpenReport启动报告
  2. 在与报告关联的事件中设置"取消=真"
  3. 关闭访问
  4. Access继续作为"幻像"进程运行,必须在任务管理器中终止.在此过程被终止之前,Access无法打开另一个数据库.该任务最初显示一些CPU利用率,但安静下降到0%.

我在使用doCmd.OpenReport启动报告时发现了这一点.该报告在Report_Open事件中打开一个表单.表单提示用户输入报告参数,并允许他们按"确定"显示报告或按"取消".该Click上的"取消"事件设置"取消=真".

似乎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
Run Code Online (Sandbox Code Playgroud)

报告

Private Sub Report_Open(Cancel As Integer)
    Cancel = True
End Sub
Run Code Online (Sandbox Code Playgroud)

Fio*_*ala 5

这种情况下出现问题的原因是acDialog:

 DoCmd.OpenReport "Test Report", acViewPreview, , , acDialog
Run Code Online (Sandbox Code Playgroud)

我想你会发现:

 DoCmd.OpenReport "Test Report", acViewPreview
Run Code Online (Sandbox Code Playgroud)

工作没有问题。

编辑重新评论

您应该不需要取消报告。在大多数情况下,避免错误比捕获错误要好,因此在打开表单之前检查数据并获取参数。将表单从报表打开事件移动到它自己的步骤,并在启动表单之前使用 DLookUp 或查询来检查数据。