处理Access中的输出错误

时间:2009-07-10 20:31:26

标签: ms-access vba error-handling

我正在通过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会支持它。

3 个答案:

答案 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