Makro in Word rückgängig machen
Gerade bei umfangreichen Makros kann das Rückgängigmachen der einzelnen Schritte recht mühsam werden. Bei der Suche nach einer Lösung, die es ermöglicht ein komplettes Makro oder aber auch mehrere Makros, die in einem Schritt ablaufen, die man aber aus Gründen der Übersichtlichkeit im Code auf mehrere Makros verteilt hat, bin ich auf eine Lösung von Roemer Lievaart gestoßen. Diese ist zwar für Word97 ausgewiesen, funktioniert aber auch in Word2003.
Dazu setzt man die Zeile StartUndoSaver
einfach an den Beginn eines Makros und die Zeile EndUndoSaver
an das Ende, so dass man folgendes erhält:
Sub Irgendwas
StartUndoSaver
Hier kommt der Code.
EndUndoSaver
End Sub
Zusätlich muss man noch folgende Makros haben, die man am Besten in einem eigenen Modul einfügt:
Option Explicit
Sub StartUndoSaver()
On Error Resume Next
ActiveDocument.Bookmarks.Add "_InMacro_"
On Error GoTo 0
End Sub
Sub EndUndoSaver()
On Error Resume Next
ActiveDocument.Bookmarks("_InMacro_").Delete
On Error GoTo 0
End Sub
Sub EditUndo() ' Catches Ctrl-Z
If ActiveDocument.Undo = False Then Exit Sub
While BookMarkExists("_InMacro_")
If ActiveDocument.Undo = False Then Exit Sub
Wend
End Sub
Sub EditRedo() ' Catches Ctrl-Y
If ActiveDocument.Redo = False Then Exit Sub
While BookMarkExists("_InMacro_")
If ActiveDocument.Redo = False Then Exit Sub
Wend
End Sub
Private Function BookMarkExists(Name As String) As Boolean
On Error Resume Next
BookMarkExists = Len(ActiveDocument.Bookmarks(Name).Name) > -1
On Error GoTo 0
End Function
Nach dem Ausführen eines Makros, das mit dem Code (StartUndoSaver
und EndUndoSaver
) umschlossen wurde, kann man jetzt mit Strg+Z das komplette Makro rückgängig machen und mit Strg+Y wieder herstellen.
In der Dropdownliste erkennt man das umschlossene Makro an den „Textmarken”.
So und jetzt bin ich noch auf der Suche nach einer ähnlichen Lösung für Excel-Makros. Eine Möglichkeit habe ich dazu bei J-Walk.com gefunden, werde aber nicht recht schlau daraus.
3 Kommentare
RSS Feed für Kommentare zu diesem Artikel.
Entschuldige, das Kommentarformular ist zurzeit geschlossen.
Hallo,
ich bin ein Newbi, was VBA betrifft und werde aus obigem Code nicht ganz schlau. Da der Code bei mir nicht funktioniert, frage ich mich, ob ich anstelle von “_InMakro_” oder auch “Name” was anderes schreiben muß, damit es klappt.
Für eine Antwort wäre ich superdankbar!
Vielen Dank!
Gruß
Thompstone
Kommentar by Thompstone — Freitag, 24. 03. 2006 @ 14:21
Hallo Thompstone,
der Begriff “_InMakro_” ist willkürlich gewählt und könnte auch anders heißen, er muss aber einheitlich sein. So wird die Textmarke benannt, die erstellt (Start UndoSaver) und später (EndUndoSaver) wieder gelöscht wird. Ein Hilfsmittel, damit die Subs EditUndo und EditRedo “wissen” bis wohin alles gelöscht bzw. wieder hergestellt werden soll.
Im Gegensatz dazu muss “.Name” bleiben.
Kommentar by Sahanya — Freitag, 24. 03. 2006 @ 17:59
Vielen Dank für die schnelle Antwort -> Super Service
Es hat super geklappt!!!
…und jetz versteh ich sogar den Code…
Kommentar by Thompstone — Donnerstag, 30. 03. 2006 @ 09:46