2009-05-19 8 views
5

J'ai un bit assez simple de VBA dans Word 2003 qui change la police du document en une "police eco" (long story) et affiche la boîte de dialogue Imprimer.Lecture de l'historique des annulations dans VBA

Lorsqu'un utilisateur clique sur Annuler ou OK, le code annule la modification.

Le problème est, parfois, quand je presse le bouton « OK » pour imprimer le document, deux actions doivent être annulées (« changement de police » et « champs de mise à jour »). Je n'arrive pas à prédire quand cela arrivera.

Est-il possible de lire le dernier élément dans le tampon d'annulation de Word? De cette façon, je peux continuer à appuyer sur Annuler jusqu'à ce que le changement de police soit terminé.

Edit: code final (coupé vers le bas):

ActiveDocument.Range.Bookmarks.Add ("_tempEcoUndoStart_") 
ActiveDocument.Content.Font.Name = "Nanonymus Eco Sans" 
Dialogs(wdDialogFilePrint).Show 
While ActiveDocument.Bookmarks.Exists("_tempEcoUndoStart_") 
    ActiveDocument.Undo 
Wend 
+0

Et, évidemment, je ne peux pas changer la police de retour, car ils pourraient utiliser plusieurs polices dans un document. – ChristianLinnell

Répondre

4

Vous pouvez utiliser une astuce pour avoir un « transactional' comme défaire dans Word: Au début du lieu macro un signet spécial sur votre document. Vous devez supprimer ce signet à nouveau lorsque vous avez terminé avec votre macro. Maintenant, lorsque vous appelez la commande Annuler, répétez l'annulation tant qu'il y a votre signet spécial dans le document.

La question connexe suivante présente les détails:

Can I create an undo transaction in Word or Excel? (VSTO)

+0

Beautiful! Merci pour cela! – ChristianLinnell

0

Je ne l'ai pas testé, mais peut-être que vous pouvez utiliser UndoClear avant vos actions, et un compte sur undo après?

ActiveDocument.UndoClear 
ActiveDocument.Undo 2 
+0

Probablement, ouais, et je devrais le faire. Mais ce n'est pas une chose particulièrement agréable à faire pour un utilisateur :-( – ChristianLinnell

Questions connexes