Datum in Zelle darf nicht Zukünftiges Datum enthalten und muss im Aktuellen Jahr sein?

... komplette Frage anzeigen

4 Antworten

Für deine Problemstellung ideal ist die Datenüberprüfung.

  1. Markiere A1:A30
  2. Daten → Datentools → Datenüberprüfung → Datenüberprüfung...
  3. Einstellungen → Zulassen: Datum, Daten: zwischen, Anfangsdatum: =DATUM(JAHR(HEUTEU());1;1), Enddatum: =HEUTE()
  4. Fehlermeldung: "Das Datum liegt nicht zwischen dem 01.01. diesen Jahres und heute."
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von augsburgchris
31.08.2016, 12:39

Das war auch mein Gedanke aber der Code hat mich irritiert.

0
Kommentar von augsburgchris
31.08.2016, 12:41

Das stimmt, dennoch hat es mich verwirrt. Der Fehlertext ist bei der Gültigkeit ja auch flexibel gestaltbar.

0
Kommentar von N3rox123
31.08.2016, 12:44

Hallo Suboptimierer,

vielen Dank für deine Antwort ich denke das dürfte funktionieren leider habe ich noch ein Problem. Nach eingabe der Werte bekomme ich einen Fehler der Angegebene benannte Bereich wurde nicht gefunden?

1

also ich hab mal Dein µ analysiert:

'1.agiert nur, wenn Cursor in A3:A30. Wird durch letztes=einziges Endif abgeschlossen
'2. neues if -(warum kein fehlendes Endif gemeldet?)
'2a. wenn Zelle (in A3:A30!) =leer: =HEUTE() ' soweit so gut
'2b. else: prüfe ob Cursor in D3:D30 ? kann er gar nicht sein, da es nur in A3:A30 weiterging! deshalb: Verlasse Sub (ist einzeilige Variante ohne endif)
'2c. Target.value ist zu diesem Zeitpunkt keinesfalls mehr leer, da oben Heute() gesetzt

Ob ich die Muße finde, das für dich zu schreiben, weiß ich im Moment nicht

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Iamiam
31.08.2016, 13:05

...hat sich durch Soboptimierers AW wohl erledigt.

0
Kommentar von Suboptimierer
31.08.2016, 18:09

2. Bei Einzeilern ist ein End If nicht notwendig.

Hier etwas hübscher:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("A3:A30")) Is Nothing Then
    If Target.Value = "" Then Target.FormulaLocal = "=HEUTE()"
  Else
    If Intersect(Target, Range("D3:D30")) Is Nothing Then Exit Sub
    If Target.Value = "" Then Target.Value = 1 
  End If 
End Sub

2b. Doch Cursor könnte in D3:D30 sein, aber Zelle, außer die in A3:A30 oder D3:D30 auf 1 zu setzen, wenn sie leer sind, erscheint auch mir unlogisch.

1

Warum nicht mit "Wenn "Datum" größer als Datum() dann ..."

als Wenn-Funktion. F20 ist hier das abgefragte Datum:

=WENN(F20>HEUTE();"Ist in der Zukunft"; "ist nicht in der Zukunft")

Müsste evtl. auch mit bedingter Formatierung gehen - zumindest farblich markieren.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von augsburgchris
31.08.2016, 12:39

Und wo fragst du da das Jahr ab?

0

Was soll genau in A1:A30 stehen? Ein beliebiges Datum? Oder stehen dort bereits Daten und du willst eine Messagebox a la "die Daten in A3, A15 und A23 entsprechen nicht den Kriterien?"

Muss es VBA sein? Warum reicht dir Gültigkeit nicht?

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von N3rox123
31.08.2016, 12:48

Hallo Augusburgchris,

VBA brauche ich nicht zwingend insofern es auch über die Gültigkeit geht nehme ich auch diese gerne. Folgenden Hintergrund haben die Zellen.

Die Zellen sollen immer auf dem Aktuellen Datum sein jedoch Editierbar bleiben. Beim löschen mit entf. oder leer sein der Zelle springt die Zelle automatisch wieder auf die =HEUTE Funktion. Nun möchte ich noch dazu zu diesen Funktionen einfach das wenn die Zelle editiert wird nur Daten des Aktuellen Jahres benutzt werden können und es kein Datum in der Zukunft sein darf (mit entsprechender selbstgestaltetetn Fehlermeldung. Anmerken möchte ich noch das dieses Dokument auch noch jahre später benutzt werden soll sprich das das Datum sich natürlich auch auf 2017 anpasst wenn 2017 ist und nicht nur bei 2016 dann hängen bleibt

0

Was möchtest Du wissen?