2009-05-19 12 views
5

Ho un VBA piuttosto semplice in Word 2003 che cambia il carattere del documento in un "carattere eco" (lunga storia) e apre la finestra di dialogo Stampa.Leggere la cronologia degli annullamenti in VBA

Quando un utente fa clic su Annulla o OK, il codice esegue un "annullamento" per annullare la modifica.

Il problema è che a volte quando si preme "OK" per stampare il documento, è necessario annullare due azioni ("modifica carattere" e "campi aggiornamento"). Non riesco a prevedere quando succederà.

C'è un modo per leggere l'ultimo elemento nel buffer di annullamento di Word? In questo modo posso semplicemente continuare a premere annulla fino a quando il cambiamento di carattere è stato completato.

Edit: codice finale (ridurre):

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

E ovviamente non può semplicemente cambiare il tipo di carattere indietro, perché essi potrebbero utilizzare più tipi di carattere in un documento. – ChristianLinnell

risposta

4

si può usare un trucco per avere un 'transactional' simile annullare in Word: All'inizio del luogo macro un segnalibro speciale su tutto il documento. Dovresti rimuovere di nuovo questo segnalibro quando hai finito con la tua macro. Ora, quando si chiama il comando Annulla, ripetere l'annullamento mentre è presente il segnalibro speciale nel documento.

Il seguente quesito, ha i dettagli:

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

+0

Bella! Grazie per quello! – ChristianLinnell

0

non ho ancora testato, ma forse è possibile utilizzare UndoClear prima le vostre azioni, e un conteggio sulla undo dopo?

ActiveDocument.UndoClear 
ActiveDocument.Undo 2 
+0

Probabilmente, sì, e potrei doverlo fare. Ma non è una cosa particolarmente carina da fare a un utente :-( – ChristianLinnell