Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Pfeiltasten in Userforms

Pfeiltasten in Userforms
30.12.2008 02:37:00
Chris
Hallo VBA-Profis :-)
mein Problem ist das ich in einer Userform nur bedingt mit den Pfeiltasten navigieren kann. Tabulator funktioniert immer, aber Pfeiltasten nur an einigen Stellen und nur auf und ab (zwischen Textboxen). Nun möchte ich aber zwischen den Textboxen auch links und rechts springen können. (z.B. um zur vorigen zurückzukommen wenn ein Eingabefehler passiert ist).
Die Textboxen sind nebeneinander und übereinander angeordnet.. teilweise unterbrochen von OptionButtons und Labels. Nur die einzutragenden Felder besitzen die Einstellung TabStop=True und nur zwischen diesen möchte ich mit Pfeiltasten navigieren können.
Gibt es da eine Einstellung in den Eigenschaften (Textbox oder Userform), oder eine andere Lösung?
Vielen Dank schonmal für die Hilfe :-)
Chris
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pfeiltasten in Userforms
30.12.2008 09:03:00
Yusuf
Hi,
mit Shift + Tab kannst du rueckwaerts die Textboxen "ablaufen", falls du das noch nicht wusstest und hier keine andere Lösung kommen sollte.
Gruß
Yusuf
sind Pfeiltasten trotzdem möglich?
30.12.2008 13:57:00
Chris
Danke Yusuf,
das mit dem shift+Tab wusste ich .. leider ist das für den Endbenutzer etwas unpraktisch.. Pfeiltasten wären mir lieber.
Gibt es evtl noch eine andere Lösung?
Schonmal Guten Rutsch für alle :-)
Anzeige
AW: sind Pfeiltasten trotzdem möglich?
30.12.2008 16:07:58
Nepumuk
Hallo Chris,
versuch es mal so:
' **********************************************************************
' Modul: clsTextBox Typ: Klassenmodul
' **********************************************************************

Option Explicit

Private WithEvents mobjTextBox As MSForms.TextBox

Friend Property Set prpSetTextBox(objTextBox As MSForms.TextBox)
    Set mobjTextBox = objTextBox
End Property

Private Sub mobjTextBox_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 39 Then SendKeys "{TAB}"
    If KeyCode = 37 Then SendKeys "+{TAB}"
End Sub

' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Private objTextBoxClass() As clsTextBox

Private Sub UserForm_Activate()
    Dim intIndex As Integer
    Dim objControl As Control
    For Each objControl In Controls
        If TypeOf objControl Is MSForms.TextBox Then
            intIndex = intIndex + 1
            Redim Preserve objTextBoxClass(1 To intIndex)
            Set objTextBoxClass(intIndex) = New clsTextBox
            Set objTextBoxClass(intIndex).prpSetTextBox = objControl
        End If
    Next
End Sub

Private Sub UserForm_Terminate()
    Dim intIndex As Integer
    For intIndex = LBound(objTextBoxClass) To UBound(objTextBoxClass)
        Set objTextBoxClass(intIndex) = Nothing
    Next
End Sub

Gruß
Nepumuk
Anzeige
AW: sind Pfeiltasten trotzdem möglich? - Danke :-)
30.12.2008 16:38:00
Chris
Vielen Dank Nepumuk,
das funktioniert erstmal prima !! (Witzigerweise zeigt mein Logitech Tastaturprogramm jedesmal beim Benutzen der Funktion "Num ein" auf dem Bildschirm an.. aber das ist nicht weiter schlimm :-))
Einen Guten Rutsch ins neue Jahr wünscht
Chris
AW: sind Pfeiltasten trotzdem möglich? - Danke :-)
31.12.2008 12:44:50
Ramses
Hallo
Als Anmerkung:
So genial Nepumuks Code auch ist,... das kann nicht der Sinn sein, dass sinnvole Basis-Funktionen verbogen werden, nur weil die Anwender diese nicht kennen oder nicht lernen wollen.
Die Pfeiltasten dienen zur einfachen Cursorpositionierung bzw. Bewegung in einer Textbox.
Die Tabulatortaste zum wechseln zwischen den einzelnen Objekten.
Ist der Code von Nepumuk aktiv, muss ich jedesmal die Maus nehmen wenn ich in einer Textbox einen Schreibfehler entdecke um den Cursor korrekt zu positionieren und ein Zeichen zu ändern, ... und ob das eleganter ist wage ich zu bezweifeln.
Gruss Rainer
Anzeige
AW: sind Pfeiltasten trotzdem möglich? - Danke :-)
31.12.2008 14:54:48
Chris
Hallo
Rainer, da muss ich dir sogar Recht geben... so Genial das ist mit den Pfeiltasten zu springen.. so Schade ist es nun auch nicht mehr innerhalb der Boxen "wandern" zu können... so weit hatte ich Anfangs noch gar nicht gedacht.... Nun werde ich mir überlegen müssen was Einfacher ist :(
Viele Grüsse Chris
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Pfeiltasten in Userforms nutzen


Schritt-für-Schritt-Anleitung

  1. Öffne die Userform in deinem VBA-Projekt.

  2. Füge ein Klassenmodul hinzu:

    • Klicke mit der rechten Maustaste auf dein Projekt im VBA-Editor.
    • Wähle "Einfügen" > "Klassenmodul".
    • Benenne das Klassenmodul in clsTextBox.
  3. Füge den folgenden Code in das Klassenmodul ein:

    Option Explicit
    
    Private WithEvents mobjTextBox As MSForms.TextBox
    
    Friend Property Set prpSetTextBox(objTextBox As MSForms.TextBox)
       Set mobjTextBox = objTextBox
    End Property
    
    Private Sub mobjTextBox_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
       If KeyCode = 39 Then SendKeys "{TAB}"
       If KeyCode = 37 Then SendKeys "+{TAB}"
    End Sub
  4. Füge den folgenden Code in das Userform-Modul ein:

    Option Explicit
    
    Private objTextBoxClass() As clsTextBox
    
    Private Sub UserForm_Activate()
       Dim intIndex As Integer
       Dim objControl As Control
       For Each objControl In Controls
           If TypeOf objControl Is MSForms.TextBox Then
               intIndex = intIndex + 1
               ReDim Preserve objTextBoxClass(1 To intIndex)
               Set objTextBoxClass(intIndex) = New clsTextBox
               Set objTextBoxClass(intIndex).prpSetTextBox = objControl
           End If
       Next
    End Sub
    
    Private Sub UserForm_Terminate()
       Dim intIndex As Integer
       For intIndex = LBound(objTextBoxClass) To UBound(objTextBoxClass)
           Set objTextBoxClass(intIndex) = Nothing
       Next
    End Sub
  5. Teste die Userform, um zu sehen, ob die Pfeiltasten jetzt wie gewünscht funktionieren.


Häufige Fehler und Lösungen

  • Problem: Pfeiltasten funktionieren nicht in Textboxen. Lösung: Stelle sicher, dass der Code korrekt in die Klassen- und Userform-Module eingefügt wurde.

  • Problem: Die Benutzer können nicht zwischen Textboxen navigieren. Lösung: Überprüfe, ob die TabStop-Eigenschaft der Textboxen auf True gesetzt ist.


Alternative Methoden

Eine alternative Methode könnte sein, die KeyDown-Ereignisse der Textboxen zu verwenden, um die Navigation mit den Pfeiltasten zu steuern. Anstelle von SendKeys kannst du den Fokus direkt auf die nächste oder vorherige Textbox setzen.

Private Sub mobjTextBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 39 Then ' Rechts
        ' Fokus auf die nächste Textbox setzen
    ElseIf KeyCode = 37 Then ' Links
        ' Fokus auf die vorherige Textbox setzen
    End If
End Sub

Praktische Beispiele

Angenommen, du hast drei Textboxen (TextBox1, TextBox2, TextBox3). Mit dem oben beschriebenen Code kannst du wie folgt zwischen ihnen navigieren:

  • Drücke die Pfeiltaste nach rechts: Der Fokus springt von TextBox1 zu TextBox2.
  • Drücke die Pfeiltaste nach links: Der Fokus springt von TextBox2 zu TextBox1.

So kannst du ganz einfach in Excel mit Pfeiltasten navigieren, was das Benutzererlebnis deutlich verbessert.


Tipps für Profis

  • Nutze Shift + Tab, um rückwärts durch die Textboxen zu navigieren.
  • Berücksichtige die Verwendung von OptionButtons und Labels in deiner Userform, um die Benutzerführung zu verbessern.
  • Teste verschiedene Tastatur-Layouts und stelle sicher, dass dein Code auch auf anderen Tastaturen (z. B. Laptops) funktioniert.

FAQ: Häufige Fragen

1. Warum kann ich in Excel nicht mehr mit Pfeiltasten navigieren?
Das Problem könnte an den Eigenschaften der Textbox oder an fehlendem Code liegen. Stelle sicher, dass du die oben beschriebenen Schritte befolgst.

2. Gibt es eine Möglichkeit, die Pfeiltasten für andere Steuerelemente zu verwenden?
Ja, du kannst ähnliche Methoden auch für andere Steuerelemente wie Listenfelder oder Kombinationsfelder anwenden, indem du die entsprechenden Ereignisse anpasst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige