Обработка ошибки вывода в Access - PullRequest
0 голосов
/ 11 июля 2009

Я генерирую запрос и сообщаю через 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 ]

2 голосов
/ 11 июля 2009
On Error GoTo errHandler
  ....
  Exit Sub

errHandler:
  If (Err.Number = 2501) Then
    Resume Next
  End If

End Sub
2 голосов
/ 11 июля 2009

Все, что вам нужно, это обработать ошибку, т.е.:

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

Это даст пользователю возможность отменить отмену и сообщить им, что они сделали.

1 голос
/ 11 июля 2009

Есть (по крайней мере) два способа справиться с этим.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...