Clever-Excel-Forum

Normale Version: Inputbox so oft anzeigen, bis richtiger Wert
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo!

Ich habe folgendes Problem. Ich gebe in einer Inputbox ein Datum ein, was nicht in der Zukunft liegen darf. Nun möchte ich, dass diese Inputbox solange kommt, bis ich das korrekte Datum (sprich, keines in der Zukunft) eingegeben habe.

Code:
Anmeldedatum = InputBox("Bitte das Anmeldedatum eingeben: ")
    If Anmeldedatum = "" Then
    Exit Sub
    End If
   
    If CDate(Anmeldedatum) > Date Then
        MsgBox "Das von dir soeben eingegebene Anmeldedatum (" & Format(Anmeldedatum, "DD.MM.YYYY") & ") darf zeitlich nicht in der Zukunft liegen."
        Anmeldedatum = InputBox("Bitte gib das Anmeldedatum erneut ein: ")
            If Anmeldedatum = "" Then
            Exit Sub
            End If
    End If

Ich hoffe, dass mir jemand helfen kann.

LG
Thomas
Hallöchen,

im Prinzip etwas in der Art
Do While Anmeldedatum <> "irgendeine Eingabe"
Anmeldename = ...
Loop
Hallo!

Danke für die schnelle Antwort. Ehrlich gesagt, nein. Wo genau baue ich das ein?

LG
Thomas
Hallöchen,

das ersetzt Deinen Code. Du musst nur noch das verlassen und die Zukunftsprüfung verarbeiten


Code:
Do While Anmeldedatum <> "irgendeine Eingabe"
Anmeldename = InputBox ...
If Anmeldedatum = "" Then Exit Sub
If CDate(Anmeldedatum) > Date Then
MsgBox "Das von dir ... "
End If
Loop
danke sehr, aber was meinst du mit "irgendeine Eingabe"?
Moin!
Ich würde die Application.InputBox-Methode statt der InputBox-Funktion nehmen.
Hat den Vorteil, dass ich bereits einen Datentyp (hier Type:=1 also Zahl) vorgeben kann und mir das Debugging erleichtere.

Schnell zusammengeklöppelt so:
Sub Date_Past()
Dim Datum
Do
  Datum = CDate(Application.InputBox("Datum:", Type:=1))
  If Datum = False Then Exit Sub 'beim Klick auf Abbrechen oder Esc
Loop Until CDate(Datum) < Date And Year(CDate(Datum)) > 2000
MsgBox CDate(Datum)
End Sub


Gruß Ralf

Wobei Du Dir schon die Frage nach dem Sinn des Ganzen stellen lassen musst!
So etwas geht doch sehr viel leichter mit der Datengültigkeit:
A
105.03.2021

ZelleGültigkeitstypOperatorWert1Wert2
A1Datumkleiner=HEUTE()
Hallöchen,

Zitat:was meinst du mit "irgendeine Eingabe"?
das kam noch von der ersten Antwort Smile

Wenn Du Do While nimmst, müsstest Du die Variable vorher schon mit irgendwas belegen. Das müsste in der Schleife dann auch wieder gesetzt werden, damit diese weiter läuft. Wenn Du es machst wie bei Ralf, also oben nur Do und unten die Prüfung erst bei Loop, ersparst Du Dir die Vorbelegung.
Hallo!

Danke allen, ihr habt mir sehr weiter geholfen.

Anbei der Lösungcode:

Code:
Dim Anmeldedatum

Anmeldedatum = CDate(Application.InputBox("Bitte das Anmeldedatum eingeben:", Type:=1))
If Anmeldedatum = False Then Exit Sub 'beim Klick auf Abbrechen oder Esc
       
Do
       
If CDate(Anmeldedatum) > Date Then
  MsgBox "Das von dir soeben eingegebene Anmeldedatum (" & Format(Anmeldedatum, "DD.MM.YYYY") & ") darf zeitlich nicht in der Zukunft liegen."
  Anmeldedatum = CDate(Application.InputBox("Bitte das Anmeldedatum erneut eingeben:", Type:=1))
  If Anmeldedatum = False Then Exit Sub 'beim Klick auf Abbrechen oder Esc

End If

Loop Until CDate(Anmeldedatum) <= Date


LG
Thomas
Und warum nicht die einfache Datengültigkeit?
ich will die Lösung via VBA und nicht via Formel