2.2k Aufrufe
Gefragt in Tabellenkalkulation von florian1010 Mitglied (751 Punkte)
Hallo Zusammen,

ich versuche gerade, in einer TextBox (Excel 2010), mit einem Tastendruck ein Datum eintragen zu lassen.

Das sieht momentan folgender Maßen aus und funktioniert auch:

Private Sub TextBox8_Change()
If TextBox8 = "h" Then TextBox8 = Date
If TextBox8 = "n" Then TextBox8 = Date + 1
If TextBox8 = "v" Then TextBox8 = Date - 1
End Sub


"h" steht für heutiges Datum
"n" für den folgenden Tag
"v" für den Vortag

Nun möchte ich aber, dass:

1. wenn der heutige Tag ein Montag ist, mit der Taste "v" das Datum vom Freitag erscheint. (Wochentage beginnend mit Montag)
2. wenn ich mehrmals "v" drücke, das Datum jeweils ein Tag weiter zurück geht, bei "n" jeweils einen Tag weiter.

Ich hab es schon mit WorkDay / WorkDate versucht, aber das funktioniert scheinbar nicht.

Kann mir hier bei meiner Frage weiterhelfen?

Vielen Dank schon mal im Voraus.

VG
Florian

7 Antworten

0 Punkte
Beantwortet von florian1010 Mitglied (751 Punkte)
Noch kurz als zusätzliche Information:

Ich habe für diese TextBox noch folgendes VBA laufen:


Private Sub TextBox8_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With TextBox8
If IsDate(.Text) Then 'Datum
.Text = CDate(.Text) 'Format korrigieren
If .Text Like "##.##.####" Then
Exit Sub
End If
End If
.SetFocus: .SelStart = 0: .SelLength = Len(.Text)
End With
MsgBox "Datumseingabe nicht korrekt! TT.MM.JJJJ"
Cancel = True
End Sub
0 Punkte
Beantwortet von m-o Profi (20.3k Punkte)
Hallo Florian,

ich würde das ganze mit Hilfe eines Drehfeldes (SpinButton) lösen.

Die Datumsberechnung mit SpinButton könnte dann so aussehen:

Private Sub SpinButton1_SpinDown()
altDatum = CDate(TextBox8.Value)
neuDatum = altDatum - 1

If Weekday(neuDatum, vbUseSystemDayOfWeek) = 7 Then neuDatum = neuDatum - 2

TextBox8 = neuDatum

End Sub

Private Sub SpinButton1_SpinUp()
altDatum = CDate(TextBox8.Value)
neuDatum = altDatum + 1

If Weekday(neuDatum, vbUseSystemDayOfWeek) = 6 Then neuDatum = neuDatum + 2

TextBox8 = neuDatum

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Florian,

ich würde es mit folgendem Gesamtcode für die TextBox lösen, wobei ich das heutige Datum bereits beim Aktivieren der TextBox eintragen würde:


Private Sub TextBox8_Enter()
TextBox8 = Date
End Sub

Private Sub TextBox8_Change()
' immer nur 10 Zeichen in der TextBox belassen.
' Ist allerdings problematisch wenn das Datum von Hand so
' verändert wird, dass es kein Daum mehr ist
If Len(TextBox8) > 10 Then TextBox8 = Left(TextBox8, 10)
End Sub

Private Sub TextBox8_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim datDatum As Date
datDatum = CDate(Left(TextBox8, 10))
If TextBox8 = "" Then TextBox8 = Date
Select Case KeyAscii
Case 104 ' h
TextBox8 = Date
Case 110 ' n
TextBox8 = ""
If Weekday(datDatum, 2) = 5 Then datDatum = datDatum + 2
TextBox8 = datDatum + 1
Me.Repaint
Case 118 ' v
TextBox8 = ""
If Weekday(datDatum, 2) = 1 Then datDatum = datDatum - 2
TextBox8 = datDatum - 1
Me.Repaint
End Select
End Sub

Private Sub TextBox8_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With TextBox8
If IsDate(.Text) Then 'Datum
.Text = CDate(.Text) 'Format korrigieren
If .Text Like "##.##.####" Then
Exit Sub
End If
End If
.SetFocus: .SelStart = 0: .SelLength = Len(.Text)
End With
MsgBox "Datumseingabe nicht korrekt! TT.MM.JJJJ"
Cancel = True
End Sub


Du müsstest eventuell weitere Fehlerabfragen einbauen, falls jemand vom Datum einen Teil löscht.

Allerdings wäre es vielleicht generell besser, wenn du das nicht in der TextBox selbst realisieren würdest, weil da eben zu viele Fehleingaben berücksichtigt werden müssen - weshalb verwendest du nicht z.B. stattdessen z.B. einen SpinButton?

Bis später,
Karin
0 Punkte
Beantwortet von nighty Experte (6.3k Punkte)
hi all ^^

oder einen zaehler auf >5 und 1 pruefen(Tag Index) bzw die
if abfrage hingehend ergaenzen :-)

mit (wie schon einige sagten) Weekday() oder auch Day(Date) zum auslesen des index

gruss nighty)
0 Punkte
Beantwortet von florian1010 Mitglied (751 Punkte)
Hallo M.O., Karin und nighty),

vielen Dank für eure Hilfe.

Da es aus einer UserForm raus ist und ich mich mit SpinButton leider nicht wirklich auskenne, hab ich den Code von Karin ausprobiert und es funktioniert.

Lediglich mit der automatischen Eintragung des Datums hab ich ein Problem, da es sein kann, das schon ein Datum hinterlegt ist, was dann überschrieben wird.

Was muss ich noch abändern, dass das Datum nicht auf das heutige geändert wird, sollte schon eines eingetragen sein?

Ihr habt mir schon richtig weitergeholfen.

VG Florian
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Florian,

dann müsstest du im Enter-Ereignis prüfen, ob die TextBox nicht leer ist und ein Datum enthält, welches aus 10 Zeichen besteht - andernfalls das aktuelle Datum eintragen (ungetestet):

Private Sub TextBox8_Enter()
If TextBox8 <> "" then
If Not IsDate(TextBox8) And Len(TextBox8) <> 10 then TextBox8 = Date
End If
End Sub


Bis später,
Karin

PS: da ich in diesem Forum leider keine Mailbenachrichtigung erhalte, ob ein Beitrag in den Threads eingegangen ist, an denen ich beteiligt bin, kann es durchaus passieren, das ich erst sehr spät oder gar nicht antworten kann.
0 Punkte
Beantwortet von florian1010 Mitglied (751 Punkte)
Hallo Karin,

vielen Dank.

Ich bin immer wieder begeistert, wie gut die Leute sind, die hier im Forum antworten geben.

Respekt.

VG Florian
...