Sahanya

Montag, 18. 04. 2005

Makro in Word rückgängig machen

Filed under: — Sahanya @ 20:01

Rückgängig 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

TextmarkeNach 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

  1. 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

  2. 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

  3. Vielen Dank für die schnelle Antwort -> Super Service :wink:

    :razz: Es hat super geklappt!!! :grin:

    …und jetz versteh ich sogar den Code…

    Kommentar by Thompstone — Donnerstag, 30. 03. 2006 @ 09:46

RSS Feed für Kommentare zu diesem Artikel.

Entschuldige, das Kommentarformular ist zurzeit geschlossen.

 

Powered by WordPress | Angepasst von: www.vlad-design.de