und im Word funktioniert es super. Aber in Excel leider nicht.
Hallo dnbma,
nach meiner Kenntnis geht das in Excel nicht so.
Grundsätzlich mußt du selbst Daten die du per Makro veränderst vorher irgendwie abspeichern mit dem gleichen Makro.
Dann kannst du das mit einem Gegen-makro wieder rückgängig machen.
Geht auch mit Bearbeiten–Rückgängig bzw. Strg+z wenn du im Makro OnUndo benutzt.
Nachstehend ist ein Code von MichV(ypsilon) der OnUndo nicht benutzt sondern einfach nur „merkt“
Gruß
Reinhard
Private Sub CommandButton1\_Click()
If MsgBox("Änderungen des vorherigen Makroaufrufes rückgängig machen?", vbQuestion + vbYesNo, "Frage") = vbYes Then
Sollstunden\_April (True) 'Rückgängig machen
Else
Sollstunden\_April 'normal ausführen
End If
End Sub
Sub Sollstunden\_April(Optional Rückgängig As Boolean)
Static Merke(1 To 8) '8 ggf. anpassen! =Anzahl der Zellen, die Du Dir merken willst
If Not Rückgängig Then
If Not MsgBox("Soll das Makro ausgeführt werden?", vbQuestion + vbYesNo, "Frage") = vbYes Then Exit Sub
Merke(1) = Range("A1")
Range("A1") = Range("A2").Value
Merke(2) = Range("B1")
Range("B1") = Range("B2").Value
'usw.
'diese Zeilen musst Du an Deine Ansprüche anpassen
'wichtig ist, daß Du den Wert der sich ändernden Zelle
'vorher im Feld Merke() ablegst.
Else
If Not MsgBox("Sollen die Änderungen des Makros rückgängig gemacht werden?", vbQuestion + vbYesNo, "Frage") = vbYes Then Exit Sub
Range("A1") = Merke(1)
Range("B1") = Merke(2)
'usw.
'wieder anpassen. Hier werden die Werte aus dem Merke()-Feld
'wieder in die Zellen zurückgeschrieben.
End If
End Sub
Hallo Reinhard,
Danke für die Antwort.
Schade dass es in Excel nicht so leicht is wie in Word. Wäre eigentlich echt praktisch gewesen (z.B. als Addin speichern etc.)
Naja ich mach es mal ganz primitiv. ich habe folgenden Code (kommt den eine oder anderen bestimmt bekannt vor mit einer Textbox und Keyup event hinterlegt)
Dim Zei As Long, Z As Long
Zei = Cells(Rows.Count, 3).End(xlUp).Row
Rows("6:" & Zei).Hidden = True
For Z = 6 To Zei
If Cells(Z, 3) Like "\*" & Cells(3, 3) & "\*" Then Rows(Z).Hidden = False
Next Z
also immer wenn eine Taste „losgeslassen“ wird, führ Excel-VBA diesen Code aus. Funktioniert sehr gut soweit. Aber wenn ich Rücktaste drücke soll es „eignetlich ja rückwärts“ gehen. Und das funktioniert ja nicht so richtig. Und da ich noch andere Zellen filtern muss/will kann ich nicht einfach alles wieder einblenden. Deshalb wäre hier das Rückgängig-machen perfekt.
in Excel ist das tatsächlich nicht so einfach. Erstmal
killt der Aufruf eines Makros die komplette UNDO-Liste.
Wenn man das irgendwie aushebeln könnte, ist es mit
„Boardmitteln“ kaum möglich per Hand da was reinzuschreiben.
Bleiben also nur die bereits angesprochenen Lösungen,
nämlich Deine Änderungen in einer Liste so zu vermerken,
daß ein anderes Makro in der Lage ist, den alten Zustand
wieder herzustellen.
Einfacher wird es wohl sein, bei jedem Makroaufruf eine
Kopie des Arbeitsblattes/der ganzen Mappe mit angehängtem
fortlaufenden Zähler zu erzeugen. Beim Makro rückgängig
machen ersetzt Du das aktuelle Blatt einfach durch die
Version mit dem höchsten Zähler und löscht diese danach.
Bei den heutigen Plattenkapazitäten und Schreib/Lese-Raten
sollte das kein Problem darstellen.