2016-02-25 1 views
0

J'espère que j'ai posé cette question de la bonne façon. J'ai un document Word utilisé dans mon environnement d'entreprise que les responsables utilisent pour remplir certains éléments pour le déploiement d'actifs. Ils échouent toujours à ajouter une certaine catégorie sur le formulaire, donc je prévois d'intégrer deux choix en utilisant un contrôle Liste déroulante.Force Word Document ComboBox Sélection de l'élément avant la première fermeture dans VBA

Cependant, lorsque le document est ouvert pour première fois, je veux forcer l'utilisateur à choisir un élément du contrôle DDL AVANT de pouvoir enregistrer/fermer le document. Je voulais savoir si cela était initialement possible.

Encore une fois, lorsque l'utilisateur ouvre le document pour la première fois, ils peuvent faire d'autres modifications, ou aucune modification du tout, mais ils ne peuvent en principe pas fermer le document jusqu'à ce que la liste déroulante est remplie avec l'un des les deux choix. Une fois qu'ils ont effectué une sélection et enregistré le document, le choix de l'élément est stocké en tant que variable constante et ils peuvent ouvrir, modifier ou fermer le document comme ils le souhaitent. Des conseils sur l'accomplissement de cela?

Répondre

0

C'est possible, mais seulement fiable si vous pouvez être sûr qu'aucun autre code ne pourrait fonctionner parallèlement au vôtre, ce qui pourrait annuler la décision "ne pas le laisser fermer".

L'application Word comporte des événements, parmi lesquels DocumentBeforeClose. Cela déclenche pour chaque document qui obtient une commande "close" tant que l'événement est actif. L'événement vous permet de faire tout ce qui doit être fait avant la fermeture réelle. Il inclut un argument qui vous permet d'ANNULER la fermeture. La raison pour laquelle je mentionne que vous devez avoir un contrôle total est que plusieurs conteneurs de code peuvent utiliser l'événement, donc si l'annulation se produit réellement lorsque vous dites que cela dépend du code exécuté en dernier. Tant que vous pouvez être sûr qu'il n'y a pas de conflit, l'événement devrait faire ce dont vous avez besoin.

Voici un lien vers la documentation sur l'événement: https://msdn.microsoft.com/en-us/library/office/ff834271.aspx. Il contient un exemple de code qui montre comment l'événement fonctionne, y compris l'annulation. Il y a aussi un lien sur cette page qui explique comment configurer les événements de niveau Application au cas où vous ne les connaissez pas.

Quelques questions de conception, vous devez considérer:

  • Où placer le code: Le mieux serait probablement dans le modèle à partir duquel les documents sont générés, mais il y a d'autres options
  • Lorsque/Comment lancer l'événement: Probablement dans l'événement NewDocument du modèle ou dans la macro AutoNew. (L'événement s'arrêtera lorsque le dernier document créé à partir du modèle sera fermé. Il est donc inutile de s'inquiéter à ce sujet.)
  • Comment distinguer si un document doit être "piégé" par cet événement: Si vous utilisez un modèle, le mieux est probablement de vérifier sa propriété AttachedTemplate et continuer seulement si le AttachedTemplate est le modèle avec le code.
  • Quelles conditions doivent être vérifiées dans l'événement: Vous avez besoin d'un moyen de déterminer si c'est la première fois ... Que fait la sélection dans les listes? Cela aura-t-il un effet que ce code peut vérifier? Ou serait-il préférable d'écrire quelque chose sur le document la première fois?
  • Vous pouvez également vérifier la propriété Document.Saved pour déterminer si des modifications ont été effectuées et doivent être enregistrées.