Datum in Zelle darf nicht Zukünftiges Datum enthalten und muss im Aktuellen Jahr sein?
Hallo,
verzweifelt wende ich mich an das Internet da ich leider nicht weiss wie ich dieses Problem lösen kann. Folgende Idee... / Ich möchte in der Lage sein Spalte A1-A30 ein Datum zu geben das sich nur im Aktuellen Jahr befindet und nicht in der Zukunft liegen kann. Sollte dies der Fall sein soll eine Fehlermeldung Erscheinen mit einem von mir angegebenen Text... Ich habe bereits einen Code mit verschiedenen Funktionen wie Z.B das Zelle A1-A30 die Heute Funktion anwenden jedoch editierbar ist. Leider weiss ich nicht wie ich die o.g. 2 Sachen noch in den code einbinden kann oder wie dies Funktioniert. Ich hoffe ihr könnt mir helfen mit evtl den vollständigen Code? :)
Anbei der Code:
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
4 Antworten
Für deine Problemstellung ideal ist die Datenüberprüfung.
- Markiere A1:A30
- Daten → Datentools → Datenüberprüfung → Datenüberprüfung...
- Einstellungen → Zulassen: Datum, Daten: zwischen, Anfangsdatum: =DATUM(JAHR(HEUTEU());1;1), Enddatum: =HEUTE()
- Fehlermeldung: "Das Datum liegt nicht zwischen dem 01.01. diesen Jahres und heute."
Das stimmt, dennoch hat es mich verwirrt. Der Fehlertext ist bei der Gültigkeit ja auch flexibel gestaltbar.
Vielleicht dachte der Fragesteller, dass dies nur mit VBA ginge.
Man kann niemandem vorwerfen, dass er eine Funktionalität nicht kennt.
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
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.
Doch Cursor könnte in D3:D30 sein
Du meist, wenn ein Bereich über 4 oder mehr Spalten markiert wird?
ok. aber dann macht Target.value überhaupt keinen Sinn und diese Zeile hätte mit Not intersect(... als Sicherung dagegen schon einleitend kommen müssen. ich hab mich übrigens gegen versehentliche Mehrzellen-Auswahl immer so abgesichert:
if selection.cells().count >1 then MSG-Box("Mehrere Zellen !"): end sub geht auch mit .rows().count oder columns.count
Oder wie meinst Du das sonst?
Überseh ich da was oder weiß ich was dsbzgl. nicht?
Ich schließe nie aus, dass ich etwas übersehen könnte, aber der Ablauf müsste so sein:
http://img5.fotos-hochladen.net/uploads/worksheetchang3mo91h2cb6.png
Ich sehe keinen Widerspruch, was nicht heißen mag, dass ich einen Sinn sehe.
*"Target nicht in D3:D30". Hier müsste entweder das "nicht" gestrichen werden oder ja-nein vertauscht werden.
Hast nochmal recht. Eimal Not, einmal kein Not schafft Verwirrung.
aus welchem Programm hast Du den Ablauf-Planer? Gibts sowas kostenlos? Hab das bisher immer in xl mühsam als Objekte eingefügt, aber auch seltenst genutzt..
Bezüglich D3:D30: Ich dachte, ich hätte den Kommentar wieder entfernt? Am Ende hielt ich den Kommentar wieder für falsch, also das Diagramm für richtig. Ich wage nicht eine erneute Korrektur. Soll jeder selber schauen. ^^
Tool für den PAP: http://live.yworks.com/graphity/ → Flowchart
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?
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
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.
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?