Makros rückgängig machen

  • Sonstige

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Mad Andy.

    Makros rückgängig machen

    Ich habe ein Makro, welches Werte in Excel einträgt.

    Visual Basic-Quellcode

    1. Range("...").Value = "..."
    Jetzt kann man aber nicht auf die Rückgängig-Funktion von Excel klicken (Strg+Z), sodass alles was das Makro eingetragen hat, wieder rückgängig gemacht wird, was ja gehen würde, wenn man es manuell einträgt. Jetzt meine Frage, ob es einen Befehl gibt, mit dem es möglich ist, festzulegen, dass Excel die Makros auch rückgängig macht, entweder alle Makroaktivitäten mit einem Rückgängigschritt oder jede Operation/Zeile einzeln, Hauptsache rückgängig ist möglich...
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    Hi,

    da wirst Du wohl nicht drumherum kommen Dir eine eigene Rückgängig Funktion zu basteln:

    Bsp.
    - Dein Makro legt ein weiteres Sheet "back" an und blendet es aus
    - dort werden die überschriebenen Werte "gesichert"
    - erst denn werden die Werte auf dem "richtigen" Sheet überschrieben

    - mit Beenden von Excel löschst Du das "back" Sheet
    - und Du benötigst ein Makro das die Werte zurück kopiert (Deine Rückgängig Funktion)


    Das sollte relativ schnell zu programmieren sein.


    bye ...

    LaMa5.
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LaMa5“ ()

    Hi,

    @MadAndy
    wenn es sich um viele Werte handelt, dauert die SendKeys-Methode zu lange. Ausserdem ist sie nicht besonders schön anzusehen.

    @Agent
    statt einem neuen Sheet, könntest Du natürlich auch ein Array verwenden.


    bye ...

    LaMa5.
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de
    Ein eigenes Rückgängig-Script wollte ich eigentlich nicht machen. Hätte eigentlich gedacht, dass Excel das auch alleine kann. Aber nun gut, muss man sich halt wieder um alles selber kümmern und das Rad neu erfinden ;)

    Falls sich jemand auch mit dieses Problem rumschlagen muss, hier mein bisheriger Lösungsansatz:

    Visual Basic-Quellcode

    1. Private Type tUndo
    2. iCol As Byte
    3. iRow As Long
    4. sValue As String
    5. End Type
    6. Dim myBackup() As tUndo
    7. Public Sub myWriter()
    8. ReDim myBackup(0)
    9. For i = 1 To 5
    10. ReDim Preserve myBackup(ubound(myBackup)+1)
    11. myBackup(ubound(myBackup)).iCol = 1
    12. myBackup(ubound(myBackup)).iRow = i
    13. myBackup(ubound(myBackup)).sValue = Cells(i, 1).Value
    14. Cells(i, 1).Value = "test" & i
    15. Next i
    16. Application.OnUndo "Makro rückgängig", "myUndo"
    17. End Sub
    18. Public Sub myUndo()
    19. For i = 1 To ubound(myBackup)
    20. Cells(myBackup(i).iRow, myBackup(i).iCol).Value = myBackup(i).sValue
    21. Next i
    22. End Sub


    Da mein Makro nur Werte im Sheet ändert und keine Formate, Farben und Rahmen, ist mein Lösungsansatz noch relativ einfach, da ich nur die Werte sichern brauch. Aber bei umfangreichen Makros die Formate usw ändern, sieht es dann schon schlimmer aus. Also wenn noch jemand eine "elegantere" Lösung kennt, immer her damit...
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Agent“ ()

    Nach dem Logik von M$ und der oop müsste es doch eigentlich einen Typen / eine Klasse geben, die eine Cell darstellt...

    Stellt sich nur die Frage, obs die Klasse nur in C++ (oder womit auch immer excel geschrieben wurde) gibt oder auch in Office Scripts / VBA