访问:取消报告生成导致错误 2501

Posted

技术标签:

【中文标题】访问:取消报告生成导致错误 2501【英文标题】:Access: Canceling Report generation causes error 2501 【发布时间】:2009-09-29 12:26:36 【问题描述】:

不敢相信我在这件事上浪费了这么多时间。

我有一个订单,当我点击一个按钮“报告”时,一个对话框 弹出窗口,其中包含可供选择的不同报告列表。双击选择 并开始记者报道。

在其中一份报告中,有一个未绑定的文本框,我需要用户输入数据。 此字段的 ControlSource 设置为其 Name 属性。 报告启动时,会出现一个输入框,其中包含一个确定和一个取消按钮。每当我输入一些数据时,一切都很好。

但是当我点击取消时,应用程序崩溃并且我收到一条错误消息: “运行时错误 2501:操作 OpenReport 已被取消”(翻译自德语)。

通过此代码调用报告:

DoCmd.OpenReport vBerichtName, nAnsicht
End If   

On Error Resume Next
  DoCmd.Close acForm, "F_BerichtDrucken"
On Error GoTo 0

1) 为什么错误处理没有启动? 2)我用谷歌搜索并找到了很多奇怪的解决方案,比如微软官方说你需要安装/更新打印机驱动程序(来吧......)。没有任何帮助。

我正在为一个朋友做这件事,我通常在 linux/php、java 等方面工作。如果解决方案有点明显或类似的事情,我深表歉意。

【问题讨论】:

【参考方案1】:

菲利普的回答同上。你没有给我们整个程序,但你需要做这样的事情......

Sub MyButton_Click
On Error Goto myError

DoCmd.OpenReport vBerichtName, nAnsicht


MyExit:
   Exit Sub

MyError:
   If Err.number = 2501 then goto myExit
   msgbox err.description
   goto myExit

End Sub

这是一个常见错误,但您可以像其他任何错误一样捕获它,如果是 2501,则忽略它。 赛斯

【讨论】:

好的,谢谢,我更进一步了。现在看起来像这样: On Error GoTo CancelError If Not IsNull(vFilter) Then DoCmd.OpenReport vBerichtName, nAnsicht, , vFilter Else DoCmd.OpenReport vBerichtName, nAnsicht End If Echo True CancelError: Exit Function (嘿嘿,我正在编辑别人的代码,我是 VB 的初学者,请考虑 ;) 现在它实际上可以工作了,但是当我点击取消时,我又回到了对话框 - 但应用程序挂起....需要重新启动 Access能够继续! 对于 cmets 中丑陋的代码格式感到抱歉,需要了解如何做到这一点;) 是的 - 任何时候使用 DoCmd.OpenReport 都必须捕获该错误【参考方案2】:

错误可能来自 DoCmd.OpenReport 行。这就是错误处理程序不起作用的原因。

我猜你要求的值在报告中是强制性的。您是否尝试将错误管理行放在 docmd.openReport 之前?

【讨论】:

【参考方案3】:

检查您的默认打印机。我遇到了同样的错误,我的所有代码都正常工作。使用计算机的人将默认打印机设置为标签打印机。不知何故,Access 正在检查打印机并知道它没有正确的打印尺寸设置,因此它停止了报告的显示。

我将默认打印机更改为另一台全尺寸纸张打印机,它工作正常。

我希望这对某人有所帮助,因为当它第一次发生时我不知所措。

【讨论】:

【参考方案4】:

好的,现在可以使用了。

根据你的建议,我把代码写成这样:

    On Error GoTo CancelError 
    If Not IsNull(vFilter) Then 
       DoCmd.OpenReport vBerichtName, nAnsicht, , vFilter 
    Else 
       DoCmd.OpenReport vBerichtName, nAnsicht 
    End If
CancelError:
  DoCmd.Close acReport, vBerichtName
  DoCmd.Close acForm, "F_BerichtDrucken"
  Echo True  ' this did the trick 
  Exit Function 

只要我将 Echo True 放入错误处理中,它就可以工作了 现在顺利,回到以前的形式并允许 继续工作 - 看起来“Echo”是一种让屏幕焕然一新的感觉...?

【讨论】:

是的......回声是一种痛苦。必须非常小心地使用它。赛斯 fablife...另一件事...而不是执行 if 块,您可以执行类似的操作...Docmd.OpenReport vBerichtName, nAnsicht,,NZ(vFilter,vbnNullString).. .that 会将 null 转换为 '' 这将被视为“显示所有记录” 最后一件事...ECHO False 防止屏幕刷新...所以当我说您必须小心时,我的意思是您必须绝对确保在某些时候将 Echo 设置为 True。如果你的代码或宏正在做很多会导致屏幕跳跃和闪烁等的事情,你应该只使用 Echo。 应该是 DoCmd.Echo。此外,您不需要测试您的过滤器 - 只需将变量传递给它。如果里面什么都没有,它就什么也做不了。不过,一般来说,习惯上将过滤器传递给字符串变量,而不是变体。应该避免函数参数的变体,除非您知道需要传递 Null(例如您在查询的每一行中调用的函数,其中输入字段可能为 Null),或者您确实具有可变数据类型。在这种情况下,字符串对我来说似乎更可取。

以上是关于访问:取消报告生成导致错误 2501的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 中的 Unnest 导致“数组”错误

Win7系统错误报告提示窗取消方法教学

在报告中添加页脚会导致错误 [MS Access 07]

什么是 SEGV_MAPERR?

Swift 取消 ActivityViewController 会导致致命错误

Angular 9 - 生成空的伊斯坦布尔测试覆盖率报告