Je génère une requête et un rapport via VBA. J'ai l'option de demander à l'utilisateur s'il veut sortir le rapport sous forme d'instantané. Je leur demande d'abord s'ils veulent faire un cliché instantané. S'ils disent non, rien ne se passe. S'ils disent oui, ils reçoivent un message demandant où ils veulent l'enregistrer.Gestion d'une erreur de sortie dans Access
Tout fonctionne très bien, sauf si l'on dit oui et que l'on clique sur Annuler à l'invite, cela déclenche une erreur d'exécution 2501 indiquant que l'action de 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 si une erreur se produit ici depuis toutes les choses importantes est déjà arrivé. Je sais juste qu'un singe va basculer quelque part si jamais ils le voient. 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. On dirait que je cherche quelque chose comme un Try/Catch mais je ne pense pas que VBA supporte cela.
J'ai dû rechercher ce que GoTo 0 fait. C'est parfait! Merci! – mandroid
Vous êtes les bienvenus. Je pense qu'il est plus pratique d'utiliser une technique de gestion des erreurs localisée plutôt que de sauter autour. Manipulez l'erreur que vous attendez à l'endroit où cela se produit, plutôt que de sauter à la fin de la routine dans une grosse déclaration de cas, puis de revenir à un autre endroit pour continuer. C'est pourquoi VB est accusé de promouvoir le code spaghetti. – Todd
On Error Resume Suivant est très dangereux. Vous ne devriez jamais l'utiliser pour plus d'une ligne de code à la fois, et désactivez immédiatement qith On Error GoTo 0. Il est préférable d'intercepter le numéro d'erreur SPECIFIC que vous connaissez et de supprimer cette erreur SPECIFIC. Si une erreur que vous n'aviez pas anticipée se produit, le code ci-dessus l'ignorera, mais si vous suivez mon conseil, il sera signalé à l'utilisateur (ou traité de manière appropriée). –