wie erfahre ich, ob ein Wert in einer Zelle verändert wurde?
Folgender Sachverhalt: Ich habe in der Routine Worksheet_Change gewisse
Logiken hinterlegt, die nur dann ziehen sollen, wenn in dem entsprechenden
Tabellenblatt eine von zwei Zellen einer Spalten verändert werden. Über
Target.column weiß ich um welche Spalte es sich handelt. Mein Problem ist
aber, dass die routine auch aufgerufen wird, wenn ich ein paar Zeilen
entferne bzw. einen Wert eingebe, der zuvor auch schon enthalten ist.
Meine Probleme sind nun, wie weiß ich, welcher Wert zuvor in der Zelle
stand, ohne eine Kopie des Wertes in eine andere zelle schieben zu müssen,
und wie schaffe ich es, die Routine nur nach manueller Eingabe und evtl. noch
Betätigen der ENTER-Taste aufzurufen.
Wäre sehr dankbar für den ein oder anderen Tip.
Viele Grüße & Danke
Andreas
> wie erfahre ich, ob ein Wert in einer Zelle verändert wurde?
> Folgender Sachverhalt: Ich habe in der Routine Worksheet_Change gewisse
> Logiken hinterlegt, die nur dann ziehen sollen, wenn in dem entsprechenden
> Tabellenblatt eine von zwei Zellen einer Spalten verändert werden. Über
...
> und wie schaffe ich es, die Routine nur nach manueller Eingabe und evtl. noch
> Betätigen der ENTER-Taste aufzurufen.
Du weißt doch wann Deine Makro's laufen und wenn jedes Makro einen
globalen Zähler am Anfang +1 und am Ende -1 setzt, dann kannst Du im
Change-Ereignis diesen prüfen und wenn <> 0 dann "Exit Sub" ausführen.
Wenn Du allerdings Deine "Logik" nur ausführen möchtest wenn sich der
Wert der Zelle tatsächlich unterscheidet, dann bleibt nichts anderes
als sich den Wert vorher zu merken. Für Deinen Fall würde es nun
ausreichen wenn Du im Selection_Change-Ereignis Target in einer
globalen Variablen abspeicherst und im Change-Ereignis diese wiederrum
mit Target in einer FOR EACH-Schleife prüfst.
Andreas.
> wie erfahre ich, ob ein Wert in einer Zelle ver�ndert wurde?
>
> Meine Probleme sind nun, wie wei� ich, welcher Wert zuvor in der Zelle
> stand, ohne eine Kopie des Wertes in eine andere zelle schieben zu m�ssen,
Hallo Andreas,
so etwas �hnliches hatten wir hier vor ein paar Tagen.
Deine beiden Zellen sind B2 und B4.
In das Modul des betreffenden Tabellenblattes:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2", "B4")) Is Nothing Then
Application.EnableEvents = False
On Error GoTo fixit
Application.Undo
Gedaechtnis = Target.Address & " " & Target.Value
Application.Undo
MsgBox Gedaechtnis
End If
fixit:
Application.EnableEvents = True
End Sub
In ein ungebundenes Modul:
Public Gedaechtnis
--
Mit freundlichen Gr�ssen Eberhard
XP home XL 2000
Eberhard Funke´s Idee hat mir die Lösung gebracht. Auf die
Rückgängig-Funktion hätte ich auch selber kommen können. ;)
Viele Grüße
Andreas