Hin Dirk,
diese Variante funktioniert nur, wenn in A1 eine Formel steht und eine der Ausgangszellen der Formel verändert wird. Ohne Formel die auf anderen Zellen basiert, führt Precedents zu einem Fehler.
Wenn A1 per Code verändert wird, dann kann man doch auch gleich im selben Code den Blattnamen ändern. Da braucht es kein Event.
Wenn in A1 wahlweise eine Formel mit anderen Zellen oder ein händischer Eintrag vorkommen sollte, dann muss man vorher prüfen, ob es sich um eine Formel handelt und entsprechend reagieren.
Oder man macht es so:
Code:
...
Dim Bereich As Range
...
Set Bereich = Range("A1")
On Error Resume Next
Set Bereich = Union(Bereich, Bereich.Precedents)
On Error Goto 0
If Not Intersect(Target, Bereich) Is Nothing Then
...
Hi Dirk,
(22.12.2022, 11:10)DIZA schrieb: Die anderen Varianten funktionieren, sind halt nur bedingt besser, bringen eben den Mehrwert nicht mit.
Das stimmt so auch nicht ganz. Mal abgesehen davon, dass die Variante
Code:
TN = ActiveSheet.Name
unnötigerweise eine Variable benötigt und einige überflüssige Zugriffe auf Excel.Objekte benötigt (die langsam sind), steckt tief versteckt eine Fehlermöglichkeit, auf die ich selbst schon mal reingefallen bin.
Ich habe damals ewig gebraucht den Fehler zu finden. Und es ist mir erst gelungen, als ich dem Anwender über die Schulter geschaut habe. Dieser Anwender hatte die Angewohnheit etwas in Zelle einzutragen und dies nicht mit Enter zu bestätigen, sondern einfach mit der Maus die nächste Eingabezelle auszuwählen. Selbst das funktioniert normalerweise. Nur wenn die nächste Eingabe auf einem anderen Blatt stattfinden sollte, dann hat er einfach direkt das nächste Blatt ausgewählt. Somit war ActiveSheet eben nicht mehr das Blatt, in dem das Event lieg, sondern ein anderes. In deinem Fall würde also das neue Blatt den Namen der Zelle A1 im alten Blatt bekommen.
Seither weiß ich, dass alles was ActiveXXX heißt, gefährlich ist. Ich zitiere mal sinngemäß einen bekannten Satz aus einem Film: "ActiveIrgendswas ist wie eine Schachtel Pralinen, man weiß nie, was man bekommt."