VBA Tipp: Im Endlosformular mit den Cursortasten, TAB- und RETURN-Taste bewegen

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

  1. Ich möchte mich im Endlosformular in alle Richtungen mit den Cursortasten, der TAB-Taste, Shift-TAB-Taste und der RETURN- bzw. ENTER-Taste bewegen.
  2. Am Anfang und Ende der Zeile (=Datensatz) soll der Cursor stehen bleiben, und nicht unbeabsichtigt in den nächsten Datensatz springen.

Eine weniger aufwändige Lösungsmöglichkeit gibt es bei Karl Donaubauer unter http://www.donkarl.com?FAQ4.10

Lösung

Das geht mit den folgenden 3 Prozeduren, die in einem globalen Modul hinterlegt werden.
Für Anforderung 1: Die Prozedur CursorAufAb
Für Anforderung 2: Die Prozeduren ErstesFeldEndlos und LetztesFeldEndlos

Public Sub CursorAufAb(Keycode As Integer)
 
 'Nur für Endlosformulare geeignet
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 On Error Resume Next
 
 Select Case Keycode
 
   'vorheriger Datensatz: CursorAuf
   Case vbKeyUp
     'Tastenanschlag abfangen
     Keycode = 0
     DoCmd.GoToRecord , , acPrevious
 
   'nächster Datensatz: CursorAb
   Case vbKeyDown
     'Tastenanschlag abfangen
     Keycode = 0
     DoCmd.GoToRecord , , acNext
 
 End Select
 
End Sub
Public Sub ErstesFeldEndlos(Keycode As Integer, Shift As Integer)
 
 'Nur für Endlosformulare geeignet
 'Quelle: http://www.dbwiki.net/
 
 Dim ShiftDown As Integer
 
 'ShiftDown bildet die Shift-Taste ab
 ShiftDown = (Shift And acShiftMask) > 0
 
 ' Abbruch bei folgenden Tasten:
 Select Case Keycode
 
   'CursorLinks
   Case vbKeyLeft
      Keycode = 0
   'Shift+TAB explizit
   Case (vbKeyTab And ShiftDown)
      Keycode = 0
   'Alle anderen Tasten werden in anderer Funktion behandelt
   Case Else
      Call CursorAufAb(Keycode)
 
 End Select
 
End Sub
Public Sub LetztesFeldEndlos(Keycode As Integer, Shift As Integer)
 
 'Nur für Endlosformulare geeignet
 'Quelle: http://www.dbwiki.net/
 
 Dim ShiftDown As Integer
 
 'ShiftDown bildet die Shift-Taste ab
 ShiftDown = (Shift And acShiftMask) > 0
 
 ' Abbruch bei folgenden Tasten:
 Select Case Keycode
 
   'CursorRechts
   Case vbKeyRight
      Keycode = 0
   'RETURN bzw. ENTER-Taste
   Case vbKeyReturn
      Keycode = 0
   'TAB-Taste explizit
   Case (vbKeyTab And Not ShiftDown)
      Keycode = 0
   'Alle anderen Tasten werden in anderer Funktion behandelt
   Case Else
      Call CursorAufAb(Keycode)
 
 End Select
End Sub

Verwendung

Die Prozedur ErstesFeldEndlos wird im ersten Feld des Endlosformulars im Ereignis "Bei Taste Ab" hinterlegt:

Private Sub MeinErstesFeld_KeyDown(KeyCode As Integer, Shift As Integer)
 
 Call ErstesFeldEndlos(KeyCode, Shift)
 
End Sub

Die Prozedur LetztesFeldEndlos wird im letzten Feld des Endlosformulars im Ereignis "Bei Taste Ab" hinterlegt:

Private Sub MeinLetztesFeld_KeyDown(KeyCode As Integer, Shift As Integer)
 
 Call LetztesFeldEndlos(KeyCode, Shift)
 
End Sub

Die Prozedur CursorAufAb wird in jedem weiteren Feld des Endlosformulars (außer erstem und letztem Feld) im Ereignis "Bei Taste Ab" hinterlegt:

Private Sub MeineSonstigenFelder_KeyDown(KeyCode As Integer, Shift As Integer)
 
 Call CursorAufAb(KeyCode)
 
End Sub

Hinweise

  • Der Code funktioniert nur in Endlosformularen (auch in Unterformularen). Für Einzelformulare ist der Code nicht geeignet.
  • Die Aktivierungsreihenfolge der Steuerelemente im Endlosformulars muß richtig eingestellt ein.
  • Eine weniger aufwändige Lösungsmöglichkeit gibt es bei Karl Donaubauer unter http://www.donkarl.com?FAQ4.10


Der Code wurde in Access 2000 erstellt.