Microsoft Excel

Herbers Excel/VBA-Archiv

Application.UnDo

Betrifft: Application.UnDo von: Michael Gilbert
Geschrieben am: 17.07.2020 16:44:59

Hallo zusammen,

ich habe folgendes Problem:
Ich benutze den Worksheet_Change Trigger um verschieden Bereiche, in denen eigentlich Formeln stehen, auf die Eingabe von Werten zu überprüfen. Damit der Trigger nicht in eine Schleife läuft wird Application.EnableEvents am Anfang auf False gesetzt und am Ende der Prozedur wieder auf True. Mittels Application.undo hole ich kurz die alte Formel der Zelle zurück, um diese abzuspeichern und, nachdem die Prozedur gemacht hat was sie machen soll, wieder statt dem Eingabewert einzusetzen.

Dies funktioniert alles prima. Jetzt komme ich aber zu einer bestimmten Ausnahme.

Unter einer besonderen Bedingung möchte ich, dass der Worksheet_Change Trigger nochmal ausgeführt wird. Genauer gesagt schreibe ich per Code in die Zelle unterhalb der Eingabezelle einen Wert (dort steht auch eine Formel) und jetzt möchte ich, dass der Worksheet_Change Trigger so durchlaufen wird, als hätte der User den Wert per Hand eingegeben. Damit dies geschieht habe ich erst einmal Application.EnableEvents wieder auf true gesetzt. Danach schreibe ich den Wert in die entsprechende Zelle (habe auch schon probiert die Zelle vorher zu selektieren, hat aber nichts gebracht). Als Ergebnis der Eingabe wird der Trigger, so wie ich es erwartet habe, auch ausgeführt, aber wenn der Code an die Stelle mit Application.undo kommt steigt die Prozedur aus. Application.undo kann nicht ausgeführt werden.

Was muss ich machen, damit meine Wertzuweisung (Zelle.value = neuer Wert) wie eine händische Eingabe von Excel gesehen wird und ich die Formel, die vorher in der Zelle stand, mit Application.undo wieder hervorholen kann?

Danke für Eure Tipps

Michael

Betrifft: Gegenfrage...
von: Oberschlumpf
Geschrieben am: 17.07.2020 17:05:43

Hi Michael,

du willst vermeiden, dass in den Zellen, in denen Formeln stehen, "per Hand" Werte eingegeben werden können, oder?

Wieso steuerst du das nicht mit einem passwortgeschützten Blattschutz?!

Die Zellen schützen, die Formeln enthalten...
Die Zellen freigeben, in denen Werte "per Hand" eingetragen werden sollen...

Fertig

Hilfts?

Ciao
Thorsten

Betrifft: Nachtrag ;)
von: Oberschlumpf
Geschrieben am: 17.07.2020 17:06:48

Die Zellen schützen, die Formeln enthalten...
Die Zellen freigeben, in denen Werte "per Hand" eingetragen werden sollen...

natürlich Blattschutz aktivieren (mit Passwort)

Betrifft: AW: Nachtrag ;)
von: Michael Gilbert
Geschrieben am: 17.07.2020 17:23:56

Hallo Thorsten,

nein, du hast mich falsch verstanden. Ich möchte, dass in den Zellen in denen Formeln stehen Werte eingegeben werden können. Diese Werte werden dann weiterverarbeite und in eine Datenbank geschrieben. Danach wird das Ergebnis (dafür ist die Formel) wieder angezeigt (in Kurzform geschrieben).

Es geht wirklich nur darum, dass ich Application.UnDo brauche, um die alten Formel wieder "hervorzuholen". In dem Moment in dem Worksheet.Change ausgeführt wird, ist ja nur noch Target, bzw. Target.Value vorhanden. Nur über Application.UnDo komme ich wieder zur Formel. Ein Durchlauf funktioniert ja auch prima. Nur wenn ich per Code eine Eingabe mache und damit ja die Formel überschreibe geht es nicht mehr. Ich kann natürliche die Formel vor dem schreiben zwischenspeichern. Wenn ich keine Lösung finde werde ich es auch so machen. Aber ich verstehe nicht, warum im Trigger Code beim zweiten Durchlauf das Application.UnDo nicht mehr funktioniert.

Grüße Michael

Betrifft: AW: Application.UnDo
von: onur
Geschrieben am: 17.07.2020 17:13:50

Microsoft:
Application.Undo

Diese Methode macht nur die letzte Aktion, die der Benutzer vor dem Ausführen des Makros vorgenommen hat, und muss die erste Textseite des Makros sein. Es kann nicht verwendet werden, um Visual Basic-Befehle rückgängig zu machen.
Da du aber Application.undo 2x ausführst, geht das 2. Mal in die Hose.
Nimm eine Globale Variable, setze sie auf True, bevor du Change nochmal ausführst und mache Application.undo davon abhängig.

Betrifft: AW: Application.UnDo
von: Michael Gilbert
Geschrieben am: 17.07.2020 17:26:03

Danke für die Antwort. Manchmal sollte man doch auf der Microsoft Seite nachlesen.

Grüße Michael

Betrifft: Gerne !
von: onur
Geschrieben am: 17.07.2020 18:37:02