Datum bei Zellwertänderung

Bild

Betrifft: Datum bei Zellwertänderung
von: Harald E
Geschrieben am: 09.03.2005 13:30:54
Hallo Forum,
da sich die Recherche bei mir nach 1 Sekunde ausblendet (warum auch immer),
komm ich nur per neuem Beitrag weiter.
Mit unten stehendem Code (Danke Hajo) wird in Spalte C das Datum eingetragen, sobald in Spalte D eine Eingabe erfolgt. Das funktioniert nicht, wenn in Spalte D ein Formelergebnis steht (z.B. =Tabelle2!AJ16) und dort eine Änderung erfolgt.


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim RaBereich As Range, RaZelle As Range
    Set RaBereich = Range("D:D")
    Application.EnableEvents = False
    For Each RaZelle In Range(Target.Address)
        If Not Intersect(RaZelle, RaBereich) Is Nothing Then RaZelle.Offset(0, -1) = Date
    Next RaZelle
    Application.EnableEvents = True
    Set RaBereich = Nothing
End Sub

Es soll also in Spalte C das Datum eingetragen werden, sobald sich der Wert in D ändert. Egal wie der Wert dort geändert wird.
Ich weiß, es steht in der Recherche. Aber wie gesagt...1 Sekunde...und wech.
Vielen Dank schonmal für Tipps
Harald
Bild

Betrifft: AW: Datum bei Zellwertänderung
von: Matthias G
Geschrieben am: 09.03.2005 14:07:50
Hallo Harald,
du kannst auch mit Google suchen, indem du dort z.B. eingibst:
Änderung protokollieren site:www.herber.de
Aber zum Thema:
du musst das Worksheet_Calculate-Ereignis nutzen, welches aber kein Argument hat (wie das Change-Ereignis "Target"). Das heißt, man weiß erstmal nicht, welcher Wert sich geändert hat.
Eine Möglichkeit ist, eine Kopie der Werte von Spalte D in einer Hilfsspalte zu halten, und bei jeder Neuberechnung zu überprüfen, ob der Wert von der Kopie abweicht. Wenn ja, wird die Zeit (Datum) in Spalte C aktualisiert und die Hilfsspalte mit dem neuen Wert beschrieben:
Private Sub Worksheet_Calculate()
Const HS = 1
Dim z As Range
For Each z In Intersect(Range("D:D"), ActiveSheet.UsedRange)
    If z.Value <> z.Offset(0, HS).Value Then 'Vergleich mit Kopie
    'Wert hat sich geändert:
        z.Offset(0, -1).Value = Now()
        z.Offset(0, HS).Value = z.Value 'Kopie aktualisieren
    End If
Next z
End Sub
Die Konstante HS ist der Abstand der Hilfsspalte zur Spalte D nach rechts. d.h. bei 1 ist es Spalte E, bei 3 Spalte G, bei -2 Spalte B.
Gruß Matthias
Bild

Betrifft: AW: Datum bei Zellwertänderung
von: Harald E
Geschrieben am: 09.03.2005 14:35:11
Hallo Matthias,
das ist ja prima, läuft soweit und bringt mich auf einen zweiten Ansatz.
Diese Formelergebnisse die bei Änderung das Datum benötigen, stehen grundsätzlich in D2:D15 im Blatt 1 (als Ergebnis einer Tabelle auf Blatt 2)
Ab D16 (Blatt1) abwärts wird nur noch manuell eingetragen, somit könnte ich den intersect-Bereich für das Selection_Change Ereignis ändern (D16:D350) und deine Lösung für den Bereich D2:D15 anpassen.
Statt der Hilfsspalte könnte ich doch den Abgleich direkt über die Ergebnispalte in Tabelle 2 (AJ2:AJ15) durchführen.
Da stosse ich dann wieder auf mein Syntaxproblem. ;-/
Wie auch immer. Da ich gleich wieder Feierabend habe, werd ich diesen Ansatz morgen weiterverfolgen (vielleicht mit einem hilfreichen Tipp von dir).
Selbst wenn es für dieses Projekt nicht zur Anwendung kommt, da dein Calculate-Ereignis schon seinen Dienst tut, habe ich noch gaaanz viele Anwendungsmöglichkeiten hier.
Vielen Dank auf alle Fälle für die Super-Hilfe
Harald
 Bild

Beiträge aus den Excel-Beispielen zum Thema "Code Zwischenablage"