Ich habe ein Feld in bei dem der Zeitraum im Format MM.JJJJ bei den Tasten UP und DOWN hoch bzw. runtergezählt wird, das funktioniert mit folgendem Code super:
Private Sub Zeitraum_KeyUp(KeyCode As Integer, Shift As Integer)
On Error Resume Next
'MsgBox "Tastencode=" & KeyCode
'38 nach oben
'40 nach unten
oldDate = DateValue("1." & Me.Zeitraum)
Debug.Print oldDate
Select Case KeyCode
Case Is = 38
Me.Zeitraum = Format(DateAdd("m", 1, oldDate), "mm.yyyy")
myoldvalue = Null
Me.Zeitraum.SetFocus
Case Is = 40
Me.Zeitraum = Format(DateAdd("m", -1, oldDate), "mm.yyyy")
Me.Zeitraum.SetFocus
myoldvalue = Null
Case Is = 80
myoldvalue = Me.Zeitraum
DoCmd.RunCommand acCmdQuickPrint
'Me.Zeitraum = Me.Zeitraum.OldValue
Case Else
'MsgBox "Sie haben die Taste mit dem Tastencode " & KeyCode & " gedrückt."
End Select
Me.Zeitraum.SetFocus
End SubLeider muss ich immer wieder in das Feld zurückspringen. Die Methode SetFocus bringt leider nichts. Hat jemand eine Idee?
1. Du solltest nur aus wichtigem Grund in das Fokushandling eines Formulars eingreifen und außerdem ist das hier gar nicht notwendig - man "konsumiert" einen Tastendruck, in dem man dem KeyCode eine 0 zuweist. Damit wird die weitere Verarbeitung von Up/Down unterdrückt.
2. Schau dir nochmal die Syntax von Select Case an. Ein "Case is = 38" ist hier ebenfalls nicht notwendig. Es reicht ein einfaches "Case 38".
3. Key-Ereignisroutinen sollten möglichst kurz sein. Deshalb gehört da auch kein Msgbox oder Docmd.RunCommand rein.
Hallo,
Was Ulrich meint ist, in den Cases brauchst du kein .SetFocus, du hast es
ja am Ende der Prozedur.
Dieses ersetzt du aber mit
KeyCode = 0und der Cursor bleibt wo er ist.
gruss ekkehard