Excel Datum einfrieren VBA?
Hallo,
ich muss in meinem Tabellenblatt2 in der Spalte F in Zeile n das aktuelle Datum einfügen, sobald ich in Spalte B, Zeile n etwas einfüge. Dabei sollten aber die vorherigen Einträge der Daten NICHT überschrieben werden.
Mein aktuelles Problem ist, dass das Datum bei jedem Öffnen in jeder Zeile aktualisiert wird.
Danke vorab
lg
2 Antworten
Ganz verstehe ich Dein Problem mit der AW von Subopt nicht, aber vllt hilft dir eine dieser dieser Infos weiter:
- um vom Target Bn nach Fn zu kommen , einfach Range("F"&Target.row) = Date
- Um ganz allgemein vier Spalten nach rechts zu kommen: Target oder Activecell.offset(0, 4) = date
- Um in die erste freie Zelle von F zu kommen (also fürs Anfertigen einer Liste: Range("F65000").end(xlup).offset(1, 0) = date
- und wenn Du eine Liste aller bisherigen Datumseinträge in Fn erstellen willst, ohne dass alte überschrieben werden, dann zB Target.offset(0, 4).value = date & ".." & Target.offset(0, 4).value (vermutlich braucht es das .value gar nicht) (hier wird das letzte Datum zuvorderst geschrieben, umgekehrt ginge es analog). Könnte sein, dass das die Datumszahl schreibt, ggf auf das Format(date;"dd.MM.YY") zurückgreifen beim Neueintrag.
Du siehst, wieviele Verstehensmöglichkeiten sich aus Deiner Frage immer noch ergeben, obwohl sie klar formuliert scheint!
Du fängst das falsche Ereignis ab. Anstelle des Öffnen-Ereignisses müsstest du das OnChange-Ereignis des Worksheets abfangen. Dann prüfst du, ob in Spalte B eine Änderung passiert ist, falls ja liest du die Zeile von Target aus, sicherst den Wert aus Spalte F irgendwo hin und schreibst in der Zeile in Spalte F das aktuelle Datum.
Sieht doch gut aus. Du willst nur noch den alten Wert gesichert haben, wenn ich dich richtig verstanden habe. Dann schreibst du den alten Wert einfach in eine andere Spalte der Zeile oder auf ein verstecktes Tabellenblatt. Das Coole an Excel ist ja, dass man Daten von einfacher Struktur nicht extern auslagern muss.
Ich verstehe die Logik im Moment nicht. Meinst du eine Art Zwischenspeicher oder wie? Kannst du es mir bitte zeigen?
So zum Beispiel:
For i = 5 To 32000
If Target.Offset(0, i).Value = "" Then
Target.Offset(0, i).Value = Target.Offset(0, 4).Value
Exit For
End If
Next
Ich frage mich auch, was an Deinem Code nicht stimmen soll. Was soll denn noch passieren, oder anders?
P.S.:
If Target.Count > 1 Then Exit Sub
brauchst Du beim Change-Ereignis nicht, nur bei SelectionChange.
Habe das Bearbeiten mehrerer Zeilen bereits abgefangen:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B4:B1024")) Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target = "" Then
Target.Offset(0, 4).ClearContents
Else:
Target.Offset(0, 4) = CDate(Format(Now, "dd.mm.yyyy"))
End If
End Sub