VBA: Jahreszahl in Combobox verändern

Hi,
mit der Funktion Jahreszahl wird in der cbo nach Eingabe des 2. Punktes (hinter dem Monat) die Jahreszahlt, z.Zt. 2010, ergänzt und gebläut. Ich möchte nun durch Eingabe von „+“ oder „-“ in der Combobox die Jahreszahl um jeweils 1 Jahr vor- oder zurückschalten. Wie könnte das funktionieren?
Dank u. Gruß
Wilhelm

Private Sub cbo_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Set ctr = cbo '***Ergänzt die Jahreszahl nach dem 2. Pkt. im Datum***
Jahreszahl KeyAscii

End Sub
'…

Public Function Jahreszahl(ByVal KeyAscii As MSForms.ReturnInteger)
'*** Ergänzt die Jahreszahl ohne besondere Prüfung

'Funktionsaufruf:
'Set ctr = cboAnnahmefrist '***Ergänzt die Jahreszahl nach dem 2. Pkt. im Da-tum***
'Jahreszahl KeyAscii
Dim a As Date '***Für die Berechnung, ob Eingabetag und -Monat vor oder nach dem aktuellen Datum liegen***
Dim b As Date '***Für die Berechnung, ob Eingabetag und -Monat vor oder nach dem aktuellen Datum liegen***

Dim adat
Dim idat

Rem *** Datum mit Autoergänzung der Jahreszahl (beim Kopieren die cbo ensprechend ä n d e r n!***
Select Case KeyAscii 'Übergebener Asciicode
Case 8, 48 To 57 'Backtaste, Tasten 0 bis 9
KeyAscii = KeyAscii 'Alles klar

Case 46 'Taste Punkt
adat = 0
Select Case InStr(1, ctr.Text, „.“) 'Wenn bereits 1 Punkt vorhanden (Instr > 0)
Case Is > 0 'Mind. 1 Punkt vorhanden
If Right(ctr.Text, 4) = CStr(Year(Now)) Then 'Wenn Jahr schon steht
KeyAscii = 0 'keinen Punkt zulassen
ElseIf Right(ctr.Text, 1) = „.“ Then 'Wenn letzter Punkt vorhanden
KeyAscii = 0 'keinen Punkt mehr zulassen
ctr.Text = ctr.Text & Year(Now) 'und Jahr wieder hinschreiben
ctr.SelStart = Len(ctr.Text) - 4 'und Jahr selektieren
ctr.SelLength = Len(ctr.Text)
Else 'wenn Jahr nicht da steht und auch kein Punkt am Ende
adat = 1 'ein Punkt
For idat = 1 To Len(ctr.Text) 'prüfen, ob der 2. Punkt schon steht
If Mid(ctr.Text, idat, 1) = „.“ Then 'wenn ja
adat = adat + 1 'a um 1 erhöhen
If adat >= 2 Then
ctr.Text = ctr.Text & „.“ & Year(Now)
ctr.SelStart = Len(ctr.Text) - 4
ctr.SelLength = Len(ctr.Text)
KeyAscii = 0
Exit For
End If
End If
Next idat
End If
End Select

Case Else 'Alle anderen Tasten
KeyAscii = 0 'werden nicht zugelassen

End Select
Set ctr = Nothing '***Löscht den Inhalt der Objektvariablen***
End Function

mit der Funktion Jahreszahl wird in der cbo nach Eingabe des
2. Punktes (hinter dem Monat) die Jahreszahlt, z.Zt. 2010,
ergänzt und gebläut. Ich möchte nun durch Eingabe von „+“
oder „-“ in der Combobox die Jahreszahl um jeweils 1 Jahr vor-
oder zurückschalten. Wie könnte das funktionieren?

Hallo Wilhelm,

sorry, da ist noch mehr zu tun.

Schon nach Eingabe von „1.“ und noch einem Punkt kommt „1.2010“ raus.
Bei Eingabe von „.“ oder „.1“ und dann einem Punkt kommt ".2010) bzw. „.1.2010“ heraus.

Ich hab jetzt nicht geschaut, wird 31.2, 31.4 usw. abgefangen?
Diese Problematik ist auch vorhanden wenn du „29.2“ hast und dann ein „+“ eingeben willst um Jahr plus eins zu erreichen.
Okay, jetzt nicht, aber 2012 :smile:

Ähem, konkrete Lösungen für deine eigentliche Anfrage hab ich noch gar nicht :smile:

Gruß
Reinhard

Hallo,

in Deine Frage hast Du Deinen Ansatz schon mit eingebaut.

Mal davon unabhängig gefragt:

Sehe ich das richtig, daß Du dann, wenn da ein gültiges Datum steht, mit + und - jeweils ein Jahr dazuzälen oder abziehen möchtest?
Dann brauchst Du nicht nach Punkten suchen und mit Stringzerlegung arbeiten.

Gruß Rainer

Option Explicit

Private Sub Form\_Load()
 Text1.Text = Date
End Sub

Private Sub Text1\_KeyPress(KeyAscii As Integer)
 If IsDate(Text1.Text) Then
 If KeyAscii = 43 Then
 Text1.Text = DateAdd("YYYY", 1, Text1.Text)
 KeyAscii = 0
 End If
 If KeyAscii = 45 Then
 Text1.Text = DateAdd("YYYY", -1, Text1.Text)
 KeyAscii = 0
 End If
 End If
End Sub