Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1772to1776
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

Application.UnDo

Application.UnDo
17.07.2020 16:44:59
Michael
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

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

Betreff
Datum
Anwender
Anzeige
Gegenfrage...
17.07.2020 17:05:43
Oberschlumpf
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
Nachtrag ;)
17.07.2020 17:06:48
Oberschlumpf
Die Zellen schützen, die Formeln enthalten...
Die Zellen freigeben, in denen Werte "per Hand" eingetragen werden sollen...
natürlich Blattschutz aktivieren (mit Passwort)
AW: Nachtrag ;)
17.07.2020 17:23:56
Michael
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
Anzeige
AW: Application.UnDo
17.07.2020 17:13:50
onur
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.
AW: Application.UnDo
17.07.2020 17:26:03
Michael
Danke für die Antwort. Manchmal sollte man doch auf der Microsoft Seite nachlesen.
Grüße Michael
Gerne !
17.07.2020 18:37:02
onur

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige