2009-05-19 5 views
5

Ich habe ein ziemlich einfaches Stück VBA in Word 2003, das die Schrift des Dokuments in eine 'Öko-Schriftart' (lange Geschichte) ändert und den Druckdialog öffnet.Lesen Sie Verlauf in VBA rückgängig

Wenn ein Benutzer Abbrechen oder OK drückt, führt der Code ein Rückgängigmachen durch, um die Änderung rückgängig zu machen.

Das Problem ist, manchmal, wenn ich "OK" drücke, um das Dokument zu drucken, müssen zwei Aktionen rückgängig gemacht werden ('font change' und 'Felder aktualisieren'). Ich kann nicht vorhersagen, wann das passieren wird.

Gibt es eine Möglichkeit, das letzte Element in Word's Rückgängig-Puffer zu lesen? Auf diese Weise kann ich einfach die Rückgängig-Taste drücken, bis der Schriftwechsel abgeschlossen ist.

Edit: Schlusscode (abgeholzt):

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

Und natürlich kann ich nicht nur die Schrift wieder ändern, weil sie mehrere Schriftarten in einem Dokument verwendet werden könnten. – ChristianLinnell

Antwort

4

können Sie einen Trick verwenden, um eine ‚transactional' artigen rückgängig machen in Word haben: Zu Beginn des Makro Ort ein spezielles Lesezeichen auf Ihrem gesamten Dokument. Sie sollten dieses Lesezeichen wieder entfernen, wenn Sie mit Ihrem Makro fertig sind. Wenn Sie jetzt den Befehl "Rückgängig" aufrufen, wiederholen Sie das Rückgängigmachen, während sich Ihr spezielles Lesezeichen im Dokument befindet.

Die folgende weitere Frage hat die Details:

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

+0

Schön! Danke dafür! – ChristianLinnell

0

habe ich nicht getestet, aber vielleicht können Sie UndoClear vor Ihrer Aktionen, und eine Zählung auf Undo nach benutzen?

ActiveDocument.UndoClear 
ActiveDocument.Undo 2 
+0

Wahrscheinlich, ja, und ich muss vielleicht. Aber es ist nicht besonders angenehm, mit einem Benutzer zu tun :-( – ChristianLinnell