Zelle bei Veränderung Rückgängig machen

Guten Morgen

Probiere gerade ein Programm zu basteln, dass veränderte Zellen mit Hilfe einer Variablen wieder ihren Ursprungswert bekommen.

Mein Ansatz:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim a

a = ActiveCell.Value

If Not Intersect(Target, Range(„A:A“)) Is Nothing Then
Target.Value = a
End If

End Sub

Der Fehler, die Variable wird von der neu angeklickten Zelle ausgelesen… was eigentlich richtig ist mit dem Befehl „ActiveCell“. Wie könnte ich es schaffen den richtigen Zellenwert einzulesen.

Vielen Dank
Snetto

Guten Morgen

Zellen mit Hilfe einer Variablen wieder ihren Ursprungswert

Mein Ansatz:

Dim a
a = ActiveCell.Value

Hallo Snetto

Eine Statische Variable könnte Dir wahrscheinlich helfen:

Statische Variable: Static statt Dim:
Static a = ActiveCell.Value
Mit Static bleibt der Wert der Variablen unverändert erhalten bis Excel beendet wird. Die Variable steht nur der betr. Prozedur zur Verfügung.
Oder: Die Variable wird (mit Dim) ganz am Anfang des Moduls definiert, also vor Sub …
Die Variable steht dann für alle Prozeduren in diesem Modul zur Verfügung.

Ich habe keinen Test für Dein Makro gemacht. Ich hoffe trotzdem, diese Angaben helfen Dir.

Viele Grüsse
Niclaus

Hallo Snetto,

Probiere gerade ein Programm zu basteln, dass veränderte
Zellen mit Hilfe einer Variablen wieder ihren Ursprungswert
bekommen.

warum sperrst du nicht diese Zellen gegen Veränderungen über Blattschutz?

Der Fehler, die Variable wird von der neu angeklickten Zelle
ausgelesen… was eigentlich richtig ist mit dem Befehl
„ActiveCell“. Wie könnte ich es schaffen den richtigen
Zellenwert einzulesen.

Der Unterschied zwischen Target.Address und Activecell.Address wird in Extras–Optionen festgelegt, wo man festlegt wohin gehüpft wird nach Zelländerung.

Wenn ich dich recht verstehe, müßtest du in diesem Ereigniscode:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

den Inhalt der jeweiligen Zelle entweder in eine globale variable oder eine feste Hilfszelle abspeichern.

Dies fügst du dann bei deinem Change-Erignis-Code anstatt a ein.

Gruß
Reinhard

Eine Statische Variable könnte Dir wahrscheinlich helfen:

Statische Variable: Static statt Dim:
Static a = ActiveCell.Value

Grüezie Niclaus,

ich glaube du irrst. Wenn z.B. A6 geändert wird dann ist im Worksheet_Change-Ereignis die Zelle A6 das/der target. Aber activecell ist dann eine andere.
In meinen Optionseinstellungen halt A7.

Gruß
Reinhard

allo Reinhard

Danke für die Info.

warum sperrst du nicht diese Zellen gegen Veränderungen über

Blattschutz?
Starte per Zellenclick eine Prozedur. Möchte aber nicht, dass mir jemand den Zelleninhalt verändert.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Stimmt, will ja nicht immer das Ereignis laufen lassen.

Den Inhalt der jeweiligen Zelle entweder in eine globale

Meinst Du so:
Option Explicit
Public a

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

a = ActiveCell.Value

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range(„A:A“)) Is Nothing Then
Target.Value = a
End If

End Sub

Das klappt, aber ob das die eleganteste Lösung ist :smile:

Danke & Gruss