Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1776to1780
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Undo / Rückgängig nach Makroausführung

Undo / Rückgängig nach Makroausführung
18.08.2020 11:47:04
Sabrina
Hallo,
ich nutze ein "Lineal" um meine enorm großen Listen leichter optisch durchgehen zu können. Wenn ich nun aber in einer Zelle etwas ändere und mit Enter oder Mausklick in eine andere Zelle gehe, wird das Lineal-Makro durch das Bewegen in eine andere Zelle ausgeführt und dadurch kann ich die Änderung nicht mehr rückgängig machen.
Es wäre wichtig, dass ich das was zuvor in der Zelle stand wiederherstellen kann, da ich manchmal nur teste, ob sich die berechneten Werte ändern durch eine andere Eingabe.
Mir sind auch schon Lösungen dazu eingefallen, aber es scheitert an der Ausführung, bzw. dem Code.
Variante 1: Man ändert das Makro so, dass durch Enter keine neue Zelle ausgewählt wird, aber die weiterführenden Berechnungen durch die Zelländerung stattfinden können. Man könnte dann das Markieren einer Zelle nur durch Mausklick und Pfeiltasten erlauben, damit das Makro wieder ausgeführt werden kann.
Variante 2: Exel merkt sich den letzten ausgeführten Schritt (was immer unterschiedlich sein kann) bevor das Makro ausgeführt wird und man schreibt dann ein Makro, um den Zustand vor Makroausführung wiederherzustellen.
Variante 3: Man erzeugt vor der Ausführung des Makros ein Backup, das vor jeder erneuten Anwendung des Makros überspeichert wird. Das wird das Programm wahnsinnig verlangsamen. Alleine um die Datei normal abzuspeichern dauert es mehrere Sekunden, da die Datei aufgrund vieler Berechnungen und dem Lineal Makro sehr groß ist (127 MB)
Hier das Lineal-Makro:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Unprotect ("1")
If Target.Cells.Count > 1 Then Exit Sub
Application.ScreenUpdating = False
' Clear the color of all the cells
Cells.Interior.ColorIndex = 0
With Target
' Highlight the entire row and column that contain the active cell
.EntireRow.Interior.ColorIndex = 38
.EntireColumn.Interior.ColorIndex = 38
End With
Application.ScreenUpdating = True
ActiveSheet.Protect ("1")
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Undo / Rückgängig nach Makroausführung
18.08.2020 11:59:24
EtoPHG
Hallo Sabrina,
Das ist nun mal so und nur mit Riesenaufwand wäre eine eigene Buffer-Verwaltung von Änderungen realisierbar.
Aufgrund deines Zitats:Es wäre wichtig, dass ich das was zuvor in der Zelle stand wiederherstellen kann, da ich manchmal nur teste, ob sich die berechneten Werte ändern durch eine andere Eingabe.
würde ich dir vorschlagen, dass du ein Makro schreibst, dass die Events AUS- bzw. wiederEIN-schaltet. Damit kannst du dein Lineal ausschalten, die Tests durchführen und ev. Unddo's durchführen und dann die Events wieder einschalten.
AUS
Application.EnableEvents = False

EIN
Application.EnableEvents = True
Gruess Hansueli
Anzeige
AW: Undo / Rückgängig nach Makroausführung
18.08.2020 13:20:00
Sabrina
Das ist eine super Lösung für mein Problem und dazu so simpel! Vielen lieben Dank!
AW: ein Versuch
18.08.2020 12:42:20
Fennek
Hallo,
ungeprüft, also zum Testen:

'in allgemeinem Modul
dim RR as string
dim VL as variant
sub Retten
' mit strg-r verbinden
range(RR) = VL
end sub
'in Code des Sheets
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Unprotect ("1")
If Target.Cells.Count > 1 Then Exit Sub
RR = target.address
VL = target.value
Application.ScreenUpdating = False
' Clear the color of all the cells
Cells.Interior.ColorIndex = 0
With Target
' Highlight the entire row and column that contain the active cell
.EntireRow.Interior.ColorIndex = 38
.EntireColumn.Interior.ColorIndex = 38
End With
Application.ScreenUpdating = True
ActiveSheet.Protect ("1")
End Sub
mfg
Anzeige
AW: Undo / Rückgängig nach Makroausführung
18.08.2020 14:43:46
fcs
Hallo Sabrina,
deine Variante1 lässt sich nicht umsetzen, denn auch dann, wenn bei "ENTER" keine andere Zelle selektiert wird, wird das Selection_Change-Ereignis ausgelöst - warum auch immer?
Die Variante 2 hab ich jetzt mal umgesetzt.
Dazu wird im Selection_Change-Ereignis der Wert der selektierten Zelle gespeichert.
Wird eine Zelle geändert, dann wird die Zelle in einer Variablen gespeichert und der alte Wert in eine 2. Variable geschrieben + ein Merker auf True gesetzt, dass geändert wurde.
Jetzt kann man beliebig andere Zellen selektieren.
Mit dem aaRueckgaengig-Makro wird der gemerkte Wert wieder in die gemerkte Zelle geschrieben.
Es kann nur die letzte Änderung rückgängig gemacht werden.
In meiner Beispiel-Datei kann dieses Makro mit der Tasten-Kombination &ltStrg&gt+r gestartet werden.
LG
Franz
https://www.herber.de/bbs/user/139691.xlsm
Anzeige
AW: Undo / Rückgängig nach Makroausführung
18.08.2020 16:22:17
Daniel
Hi
noch ne Variante, hierbei wird die aktive Zeile markiert, ohne dass die UNDO-Funktion beeinträchtigt ist:
1. Code im allgemeinen Modul:
Function x()
Application.Volatile
x = ActiveCell.Row
End Function
2. Code im Modul des Tabellenblatts:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Me.Calculate
Application.ScreenUpdating = True
End Sub
3. lege für den den relevanten Bereich eine Bedingte Formatierung mit der Formel als Regel an:
=Zeile()=x()

und formatiere entsprechend.
dabei bleibt nicht nur der Rückgängigspeicher erhalten, sondern auch reguläre Formatierungen in den Zellen erscheinen wieder, wenn du eine andere Zelle markierst.
Gruß Daniel
Anzeige
AW: Undo / Rückgängig nach Makroausführung
19.08.2020 06:39:12
Sabrina
Das scheint leider nicht zu funktionieren. Dann bleibe ich besser bei EtoPHG's Lösung. Dennoch vielen Dank!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige