Wenn "Ja" erfüllt ist, Datum automatisch einsetzen lassen und einfrieren?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("S9:S157")) Is Nothing And _
    Target.Count = 1 Then
      If Target.Value = "Ja" Then Target.Offset(0, 2).Value = Date
      If IsEmpty(Target) Then Target.Offset(0, 2).Value = "Nein"
  End If
End Sub

LJakobovic 
Fragesteller
 13.12.2016, 14:09

Danke ich schau morgen ob es funktioniert hat (Y)

0
LJakobovic 
Fragesteller
 13.12.2016, 14:13

Als ich das Systemdatum auf den 14.12. gerade geändert habe, haben sich die Daten auch auf den 14.12. geändert, genau das wollte ich nicht ;) ich brauche das Datum dann fixiert auf den 13.12. ;)

0
Robsl  15.12.2016, 11:08
@LJakobovic

Statt Date solltest du die Tabellenblatt-Funktion DATUM verwenden. Das sieht dann so aus:

Target.Offset(0, 2).Formula = "=DATE(YEAR(TODAY()),MONTH(TODAY()),DAY(TODAY()))"

Die Formel wird tatsächlich in die Zelle eingetragen.

Aber eben nur in die Zielzelle, die auch wieder mit "Nein" überschrieben wird, wenn das "Ja" in Spalte S verändert wird.

Du könntest die Funktion auch direkt in die Spalte U eintragen und um die WENN-Funktion ergänzen.

Formel für U1:

=WENN(BEREICH.VERSCHIEBEN(U1;0;-2)="Ja";DATUM(JAHR(HEUTE());MONAT(HEUTE());TAG(HEUTE()));"Nein")

Das hat den Nachteil, dass bei jeder Änderung alle Formeln aktualisiert werden. Das hat bei 157 Zeilen noch keine Auswirkung, aber wenn die Liste länger wird, dauert es immer länger.

1
Robsl  15.12.2016, 11:12
@Robsl

Noch eine Anmerkung:

Das Datum verändert sich in beiden Fällen nur, wenn du ein neues "Ja" einträgst. Ich denke, das soll es ja auch :)

2
Suboptimierer  09.01.2017, 09:55
@Robsl

Ich lese jetzt deinen Kommentar erst genauer. Wird das Datum denn wirklich eingefroren? Ich kann es gerade nicht testen, aber eigentlich müsste doch sich das Datum dem aktuellen Tagesdatum anpassen, wenn "Ja" in der Zelle steht.

Ich kenne bislang nur den Weg über VBA oder Iterationen, ein Datum einfrieren zu können. Meine Versuche mit DATUM (und HEUTE in den Parametern) oder HEUTE direkt schlugen bislang fehl.

0
Robsl  09.01.2017, 15:52
@Suboptimierer

Du hast natürlich recht! 😲 Nur mit der Formel geht das nicht. Sonst müsste man die Blattaktualisierung unterdrücken.  Es muss VBA sein. Das Datum sollte sich bei Worksheet_Change-Ereignis verändern, also, wenn die Quellzelle geändert wird. Die Lösung 1 von dir ist die richtige. 

An LJakobic: sorry, du wirst das wahrscheinlich schon bemerkt haben 😉

1
LJakobovic 
Fragesteller
 11.01.2017, 08:00
@Robsl

wie muss dann der code genau aussehen? :)

0

Hallo

Den Code musst du in ein Microsoft Excel Objekt schreiben (also zu der entsprechenden Tabelle, nicht als Modul!!).
Über die Klappliste wählst du links oben "Worksheet" aus und rechts oben "change" (ich glaube. Kann es gerade nicht testen. Deshalb der Code auch ohne Gewähr)

Jetzt kannst du in den Code-Rahmen dein Programm schreiben. Und jedesmal, wenn im Tabellenblatt etwas verändert wird, startet er automatisch dein Programm.
Natürlich musst du jetzt selbst die Rahmenbedingungen festlegen, da das Programm nur starten soll, wenn eben in Spalte Seiten etwas eingetragen wurde.

Zb mit "IF Target.Columns = 19 Then" sollte er den Code nur abarbeiten, wenn Spalte S gerade aktiv war und etwas eingetragen wurde.
Nun kannst du weiter prüfen ob Target.Value ="Ja" ist, dann soll "Cells(Target.Row, Target.Column+2).Value =Date" sein.

Den zweiten Teil mit dem frei lassen, habe ich nicht verstanden


LJakobovic 
Fragesteller
 13.12.2016, 14:08

Mit dem frei lassen, hab ich das so gemeint, wenn ich in Spalte S "Ja" schreibe dann soll das Datum erscheinen

Wenn ich die Zelle in Spalte S frei lasse, soll statt dem Datum ein "Nein" erscheinen

0
LJakobovic 
Fragesteller
 13.12.2016, 14:11

außerdem hab ich es nicht als Modul geschrieben, sondern in das Fenster Visual Basic direkt in das Tabellenblatt, ein Modul hab ich nicht erstellt ;)

0