我正在通过VBA生成查询和报告。我可以选择询问用户是否要将报告输出为快照。我先问他们是否想拍一张照片。如果他们说不,没有任何反应。如果他们说是,他们会立即询问他们想要保存的地方。
一切都很好,除非他们说是,然后在提示上单击取消,它会引发运行时错误2501,表示报告操作已取消。这是代码。
DoCmd.OpenReport "CONCERNS", acViewPreview, lstFee.Value & " DETAILS"
If MsgBox("Do you wish to create a snapshot of this report?", vbQuestion + vbYesNo) = vbYes Then
DoCmd.OutputTo acReport, "CONCERNS", "SnapshotFormat(*.snp)", ""
End If
这也是我程序的结束所以我并不关心这里是否发生错误,因为所有重要的事情都已经发生了。我只知道有些猴子会在看到它的时候翻转。有办法处理这个错误吗? On Error Resume Next不是一个选项,因为这将使调试成为未来的噩梦。听起来我正在寻找像Try / Catch这样的东西,但我不认为VBA会支持它。
答案 0 :(得分:2)
On Error GoTo errHandler
....
Exit Sub
errHandler:
If (Err.Number = 2501) Then
Resume Next
End If
End Sub
答案 1 :(得分:2)
您需要的只是处理错误,即:
On Error Goto HandleErr
DoCmd.OpenReport "CONCERNS", acViewPreview, lstFee.Value & " DETAILS"
If MsgBox("Do you wish to create a snapshot of this report?" _
, vbQuestion + vbYesNo) = vbYes Then
DoCmd.OutputTo acReport, "CONCERNS", "SnapshotFormat(*.snp)", ""
End If
ExitHere:
Exit Sub 'or Function
HandleError:
Select Case Err.Number
Case 2501 'Report Was Cancelled
If MsgBox ("Did you really want to cancel saving the report?", _
vbYesNo + vbDefaultButton2 ,"Please Confirm") = vbNo then
Resume
Else
Resume ExitHere
End if
Case Else
Msgbox "An Unexpected error Occurred " & Err.Description, _
vbExclamation,"Error"
Resume ExitHere
End Select
这将为用户提供撤消取消的选项,让他们知道他们做了什么。
答案 2 :(得分:1)
有(至少)两种方法来处理这个问题。
1>在发送报告快照之前,获取文件名并在步骤中处理可能的取消。我最近没有这样做,但是有另一种生成快照报告的方法,而不是DoCmd.OutputTo命令,或者一些不要求命令本身使用文件对话框的变体。我在旧应用程序中生成了报告快照,并且不必向用户询问文件名。我会尝试找到代码并展示一个例子。
2 - ;使用On Error Resume Next,但仅在DoCmd.OutputTo例程之前,然后查看是否有错误,然后将其关闭:
If MsgBox("Do you wish to create a snapshot of this report?", _
vbQuestion + vbYesNo) = vbYes Then
On Error Resume Next
DoCmd.OutputTo acReport, "CONCERNS", "SnapshotFormat(*.snp)", ""
if Err.Number = 2501 Then
'' log or ignore error
Else
'' log or warn other unexpected errors
End If
On Error Goto 0
End If