2009-05-19 8 views
5

Mam dość prosty VBA w programie Word 2003, który zmienia czcionkę dokumentu na "eko czcionki" (długa historia) i wyświetla okno dialogowe Drukuj.Przeczytaj historię cofania w języku VBA

Gdy użytkownik uderza Anuluj lub OK, kod wykonuje "cofnij", aby przywrócić zmianę.

Problem polega na tym, że czasami po naciśnięciu przycisku "OK", aby wydrukować dokument, należy anulować dwie czynności: "zmiana czcionki" i "zaktualizuj pola". Nie mogę przewidzieć, kiedy to nastąpi.

Czy istnieje sposób na odczytanie ostatniego elementu z bufora cofania Worda? W ten sposób mogę po prostu naciskać Cofnij, aż zmiana czcionki zostanie zakończona.

Edit: kod końcowy (wycięte):

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

I oczywiście nie mogę po prostu zmienić czcionkę z powrotem, ponieważ mogą być one przy użyciu wielu czcionek w dokumencie. – ChristianLinnell

Odpowiedz

4

Można użyć trick mieć „transactional'-jak cofanie się w słowo: na początku makro miejscu specjalny zakładek na całym dokumencie. Powinieneś usunąć tę zakładkę ponownie, gdy skończysz z makrem. Teraz, wywołując polecenie Cofnij, powtórz cofanie, gdy w dokumencie znajduje się specjalna zakładka.

Poniższy pokrewne pytanie ma szczegółów:

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

+0

Piękne! Dzięki za to! – ChristianLinnell

0

nie testowałem, ale być może można użyć UndoClear przed swoimi działaniami, a także liczyć na cofanie po?

ActiveDocument.UndoClear 
ActiveDocument.Undo 2 
+0

Prawdopodobnie tak, i być może będę musiał. Ale nie jest to szczególnie miłe dla użytkownika :-( – ChristianLinnell