2017-03-24 1 views
1

J'ai cherché pendant quelques jours pour une réponse simple à cette question:Quand code de rapport MS-Access VBA exécuter

Est-ce que le code VBA derrière/dans un rapport exécuté lorsque le rapport est ouvert en mode Aperçu ET caché?

J'ai hérité d'une base de données Access 2003 P-O-S (non point de vente) (écrite principalement en allemand) qui a un rapport avec un module VBA très long et compliqué. J'ai besoin du code à exécuter lorsque le rapport est exécuté en mode Aperçu, mais ce n'est pas le cas.

Le rapport est appelé à partir d'un formulaire avec la ligne suivante:

DoCmd.OpenReport "Fertigungszettel",acPreview, , , acHidden 

Je puis fermez le formulaire avec la ligne suivante

DoCmd.Close acReport, "Fertigungszettel", acSaveNo 

Le problème est que le code/derrière/joint au rapport ne semble pas courir. Je pensais que je devais retarder la fermeture de sorte que l'accès ait eu le temps d'exécuter du code, donc j'ajouté ce qui suit au rapport vba

Private Declare Sub Sleep Lib "kernel32" (ByVal dwmilliseconds As Long) 

Public SleepPls(ByVal ISecs As Long) 
    Sleep(ISecs * 1000) 
End Sub 

Et j'ai ajouté la ligne de l'appeler comme ceci:

SleepPls(10) 

Mais cela n'a fait aucune différence. Quelqu'un peut-il m'expliquer cela ou me pointer quelque part pour l'expliquer de façon simple? Je demande un moyen simple parce que je vais devoir expliquer cela à la haute direction qui ne sont pas Dev. (Pas même proche).

Merci d'avance.

+0

Vérifiez s'il y a un OnOpen ou Activer événement. – geeFlo

+0

Si vous ouvrez le rapport uniquement pour exécuter du code, le code n'appartient pas au rapport. Il devrait être dans un module général à exécuter en cas de besoin. – Andre

Répondre

1

Dans MS Access, les rapports et autres objets possèdent un ensemble de propriétés. Si vous passez en mode Création sur le rapport et sélectionnez les propriétés pour le rapport global, une liste de s'affichera sur le côté droit. En haut se trouvent le format, les données, l'événement, etc. Sous événement, vous verrez une liste de "On ..." s qui déclenchent le code à exécuter. Comme "En cours", "En cours de chargement", "Sans données", etc.

Le code VBA peut être attaché à un ou plusieurs d'entre eux. Donc, peut-être que votre code est attaché à un événement comme "On Mouse Up" et ne serait donc pas exécuté si vous ouvrez le rapport par programme.

Trouvez comment le code est attaché à un événement, et cela devrait vous mener dans la bonne direction. Peut-être que vous pouvez attacher le code à un événement différent, ou votre code pourrait potentiellement appeler directement le code que vous voulez exécuter.

Mise à jour: Vous indiquez que le code derrière est associé au "Sur clic". Je pense que cela signifie le code ressemble derrière comme

Private Sub Report_Click() 
... 
End Sub 

donc je pense que dans votre code, vous pouvez forcer le code existant derrière exécuter par

DoCmd.OpenReport "Fertigungszettel",acPreview, , , acHidden 
Call Forms("Your form name").Report_Click() 
+0

Le code est joint à l'événement OnClick du bouton. Je n'ai pas créé le code. J'y ajoute, ou du moins j'essaie de le faire. – mbcharney

+1

Veuillez fournir plus de détails sur "le bouton". Pourquoi y a-t-il un bouton sur un rapport?Et pourquoi vous attendiez-vous à ce qu'il s'exécute en premier si le rapport est prévisualisé et masqué, puisque le bouton n'aurait jamais été cliqué et ne pourrait pas être cliqué en mode Aperçu? La solution de Knox peut fonctionner, mais peut-être que le code doit être placé dans une fonction distincte qui peut être appelée depuis OnClick et un autre événement approprié lors de la prévisualisation. –

+0

@ cade-perkins a un bon point. Je n'ai pas compris que le code est attaché à un bouton. En fonction de ce que fait le code, il peut être judicieux d'exécuter le code avant d'ouvrir le rapport. Dans ce cas, vous voudriez déplacer l'appel avant de faire l'openReport. En outre, pour un bouton sur clic, l'appel peut ressembler plus à Call Forms ("Votre nom de formulaire"). Command32_Click – Knox