0 votes

Gestion d'une erreur de sortie dans Access

Je génère une requête et un rapport via VBA. J'ai la possibilité de demander à l'utilisateur s'il souhaite produire le rapport sous forme d'instantané. Je lui demande d'abord s'il veut faire une capture d'écran. S'il répond par la négative, rien ne se passe. S'il dit oui, il reçoit une invite lui demandant où il veut l'enregistrer.

Tout fonctionne parfaitement, sauf s'ils disent oui et qu'ils cliquent sur Annuler à l'invite, une erreur d'exécution 2501 se produit, indiquant que l'action du rapport a été annulée. Voici le code.

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

C'est aussi la fin de ma procédure, donc je ne me soucie pas vraiment qu'une erreur se produise ici puisque toutes les choses importantes se sont déjà produites. Je sais juste qu'un singe quelque part va s'énerver s'il le voit. Y a-t-il un moyen de gérer cette erreur ? On Error Resume Next n'est pas une option car cela ferait du débogage un cauchemar dans le futur. Il semble que je cherche quelque chose comme un Try/Catch mais je ne pense pas que VBA le supporte.

2voto

Sam Points 203

Tout ce dont vous avez besoin, c'est de gérer l'erreur :

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

L'utilisateur aura ainsi la possibilité d'annuler l'annulation et de savoir ce qu'il a fait.

1voto

Smandoli Points 3792
On Error GoTo errHandler
  ....
  Exit Sub

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

End Sub

0voto

Todd Points 1978

Il y a (au moins) deux façons de procéder.

1) obtenir le nom du fichier et gérer l'annulation éventuelle dans une étape avant d'envoyer l'instantané du rapport. Je ne l'ai pas fait récemment, mais il y a une autre façon de générer le rapport instantané que la commande DoCmd.OutputTo, ou une variante qui ne nécessite pas que la commande elle-même utilise un dialogue de fichier. J'ai généré des rapports instantanés dans une ancienne application et je n'ai pas eu à demander à l'utilisateur un nom de fichier. J'essaierai de trouver le code et de montrer un exemple.

2> utiliser On Error Resume Next, mais seulement juste avant la routine DoCmd.OutputTo, puis voir s'il y a une erreur, puis la désactiver :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X