2009-09-29 11 views
1

ne peux pas croire que je perds tellement de temps sur celui-ci.Accès: L'annulation de la génération du rapport provoque l'erreur 2501

J'ai un formulaire de commande, et quand je clique sur un bouton "rapports", un dialogue pop-ups avec une liste de différents rapports à choisir. Un double-clic sélectionne et lance le rapport correspondant.

Dans l'un de ces rapports, il existe une zone de texte non liée dans laquelle l'utilisateur doit saisir des données. La source de contrôle de ce champ est définie sur sa propriété Nom. Lorsque le rapport est démarré, une zone de saisie apparaît avec un bouton OK et un bouton Annuler. Chaque fois que j'entre des données, tout va bien.

Mais lorsque je clique sur Annuler, l'application se bloque et j'obtiens un message d'erreur: "Erreur d'exécution 2501: L'Action OpenReport a été annulée".

Le rapport est appelé par ce code:

DoCmd.OpenReport vBerichtName, nAnsicht 
End If 

On Error Resume Next 
    DoCmd.Close acForm, "F_BerichtDrucken" 
On Error GoTo 0 

1) Pourquoi est-ce l'erreur manipulation ne débutera pas?
2) J'ai googlé et trouvé beaucoup de solutions bizarres pour cela, comme le Microsoft officiel disant que vous devez installer/mettre à jour un pilote d'imprimante (allez ...). Aucun n'a aidé. Je fais cela pour un ami et je travaille normalement sur linux/php, java, etc. Je m'excuse si la solution est quelque peu évidente ou quelque chose comme ça.

Répondre

2

Idem à la réponse de Phillipe. vous ne nous avez pas les procédures entières mais vous devez faire quelque chose comme ça ...

Sub MyButton_Click 
On Error Goto myError 

DoCmd.OpenReport vBerichtName, nAnsicht 


MyExit: 
    Exit Sub 

MyError: 
    If Err.number = 2501 then goto myExit 
    msgbox err.description 
    goto myExit 

End Sub 

Ceci est une erreur commune, mais vous pouvez l'attraper comme toute autre erreur et l'ignorer si est 2501.
Seth

+0

OK les gars, merci, j'ai fait un pas de plus. Maintenant, il ressemble à ceci: On Error GoTo CancelError If Not IsNull(vFilter) Then DoCmd.OpenReport vBerichtName, nAnsicht, , vFilter Else DoCmd.OpenReport vBerichtName, nAnsicht End If Echo True CancelError: Exit Function (Hey, j'édite le code de quelqu'un d'autre et je suis tout à fait débutant à VB, s'il vous plaît envisager;) Maintenant en fait cela fonctionne, mais quand je clique sur annuler, je suis de retour avec le dialogue - mais l'application se bloque .... besoin de redémarrer l'accès pour pouvoir continuer! – faboolous

+0

Désolé pour le formatage de code laide dans les commentaires, besoin de savoir comment faire;) – faboolous

+0

Yup - à chaque fois que vous utilisez DoCmd.OpenReport vous devez piéger cette erreur –

1

L'erreur provient probablement de la ligne DoCmd.OpenReport. C'est pourquoi le gestionnaire d'erreur ne fonctionne pas.

Je suppose que la valeur que vous avez demandée est en quelque sorte obligatoire dans le rapport. Avez-vous essayé de mettre votre ligne de gestion des erreurs avant le docmd.openReport?

0

OK, ça marche maintenant.

Après vos suggestions, je mets le code comme ceci:

On Error GoTo CancelError 
    If Not IsNull(vFilter) Then 
     DoCmd.OpenReport vBerichtName, nAnsicht, , vFilter 
    Else 
     DoCmd.OpenReport vBerichtName, nAnsicht 
    End If 
CancelError: 
    DoCmd.Close acReport, vBerichtName 
    DoCmd.Close acForm, "F_BerichtDrucken" 
    Echo True ' this did the trick 
    Exit Function 

Dès que je mets Echo vrai dans la gestion des erreurs, il fonctionne maintenant en douceur, pour revenir à la forme précédente et permettant à continuer à travailler - ressemble à "Echo" est un peu un rappel pour l'écran ...?

+0

ouais ... echo est une douleur. Il doit être utilisé avec beaucoup de soin. Seth –

+0

fablife ... une autre chose ... au lieu de faire le bloc if, vous pouvez faire quelque chose comme ça .... Docmd.OpenReport vBerichtName, nAnsicht ,, NZ (vFilter, vbnNullString) ... qui va convertir le null à '' qui sera traité comme "montrer tous les enregistrements" –

+0

Une dernière chose ... ECHO False PREVENTS rafraîchit l'écran ... alors quand je dis que vous devez faire attention, vous devez absolument vous assurer que Echo est réglé sur Vrai à un moment donné. Vous ne devriez utiliser Echo que si votre code ou vos macros font beaucoup de choses qui feront sauter et flasher l'écran, etc. –

1

Vérifiez votre imprimante par défaut. Je recevais la même erreur & tout mon code fonctionnait correctement. Quelqu'un utilisant l'ordinateur définit l'imprimante par défaut sur une imprimante d'étiquettes. D'une manière ou d'une autre, Access vérifiait que l'imprimante n'avait pas les bons paramètres de taille à imprimer, ce qui a empêché l'affichage du rapport.

J'ai changé l'imprimante par défaut pour une autre imprimante de feuille pleine taille et cela a bien fonctionné.

J'espère que cela aide quelqu'un parce que j'étais perdu quand il s'est produit.

Questions connexes