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

VBA SetFocus ???? wieso geht das nicht

Forumthread: VBA SetFocus ? wieso geht das nicht

VBA SetFocus ? wieso geht das nicht
15.06.2005 15:26:06
Sylvio
Hallo
ich habe ein sub:

Private Sub A_b2TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
if keycode = vbreturn then
bla bla bla
A_b2TextBox1.Text = ""
A_b2TextBox1.SetFocus
end if
End Sub

Jetzt meine Frage wieso blinkt der Zeiger nicht wieder in der A_b2Textbox1?
Sondern der focus ist auf dem nächsten element einen command-button
Wer weiß warum?
Danke Sylvio
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA SetFocus ? wieso geht das nicht
15.06.2005 15:43:18
MichaV
Hi Sylio,
1.) Enter Taste runter
2.) KeyDown- Ereignis wird ausgelöst
3.) Dein Code setzt den Fokus auf TextBox1
4.) KeyDown- Ereignis abgearbeitet
5.) Der Tastencode wird an das derzeitig fokussierte Element geschickt, also an TextBox1
6.) Bei Eingabe von Enter in einer TextBox wird der Focus an das Nächste Element abgegeben
Tricky, was?
Gruss- Micha
Anzeige
AW: VBA SetFocus ? wieso geht das nicht
15.06.2005 15:51:50
Sylvio
Hallo Micha,
hab mir Punkt 6 auch irgendwann gedacht.
Schlau wie man ist neues sub

Private Sub A_b2ÜbergabeButton_Enter()
A_b2TextBox1.SetFocus
End Sub

aber was macht er setzt den Focus wieder auf den nächsten button
wie bekomm ich ihn verdammt nochmal zurück in die Textbox?
Gruß Sylvio
Anzeige
AW: VBA SetFocus ? wieso geht das nicht
15.06.2005 22:01:54
MichaV
Hi Sylvio,
kein Plan. Kanns bei mir auch nicht (mehr) nachvollziehen, klappt alles ohne Probleme.
Sorry, wahrscheinlich war meine 1. Antwort Schwachsinn.
Machts Dir was aus, eine Beispielmappe reinzustellen?
Gruß- Micha
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

VBA SetFocus: Probleme und Lösungen


Schritt-für-Schritt-Anleitung

  1. Ereignis erstellen: Definiere ein Ereignis für das Steuerelement, z.B. eine TextBox oder einen Button.

    Private Sub A_b2TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbReturn Then
       ' Dein Code hier
    End If
    End Sub
  2. SetFocus verwenden: Verwende die Methode .SetFocus, um den Fokus auf das gewünschte Steuerelement zu setzen.

    A_b2TextBox1.SetFocus
  3. Fokussierung sicherstellen: Manchmal wird der Fokus an das nächste Steuerelement abgegeben. Um dies zu vermeiden, kannst Du das Enter-Ereignis eines Buttons nutzen:

    Private Sub A_b2ÜbergabeButton_Enter()
       A_b2TextBox1.SetFocus
    End Sub

Häufige Fehler und Lösungen

  • Fokus wird nicht gesetzt: Wenn der Fokus nicht auf der TextBox bleibt, kann dies an der Verarbeitung des KeyDown-Ereignisses liegen. Stelle sicher, dass Du den Fokus erst nach der Verarbeitung des Ereignisses setzt.

  • Fokus geht verloren: Verwende Application.SendKeys in Kombination mit .SetFocus, um sicherzustellen, dass der Fokus gesetzt bleibt:

    Application.SendKeys "{TAB}"
    A_b2TextBox1.SetFocus
  • SetFocus in einer anderen Subroutine: Achte darauf, dass Du den Fokus immer im richtigen Kontext setzt. Wenn Du dies in einer anderen Subroutine machst, stelle sicher, dass die TextBox bereits existiert.


Alternative Methoden

  • VBA GotFocus verwenden: Du kannst das GotFocus-Ereignis nutzen, um den Fokus zu setzen. Dies kann nützlich sein, um den Fokus zurückzusetzen, wenn ein anderes Steuerelement aktiviert wird.

    Private Sub A_b2TextBox1_GotFocus()
      ' Aktionen, wenn die TextBox den Fokus erhält
    End Sub
  • Verwendung von SetFocus in Schleifen: Wenn Du mehrere TextBoxen in einer Schleife hast, kannst Du eine Funktion erstellen, die den Fokus entsprechend setzt:

    Sub SetFocusToTextbox(textBox As MSForms.TextBox)
      textBox.SetFocus
    End Sub

Praktische Beispiele

  1. Einfaches Beispiel mit SetFocus:

    Private Sub A_b2TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbReturn Then
       A_b2TextBox1.SetFocus
    End If
    End Sub
  2. Mehrere TextBoxen verwalten:

    Private Sub A_b2NextButton_Click()
       If A_b2TextBox1.Text = "" Then
           A_b2TextBox1.SetFocus
       Else
           A_b2TextBox2.SetFocus
       End If
    End Sub

Tipps für Profis

  • Verwende .SetFocus nur, wenn es notwendig ist. Übermäßiger Einsatz kann die Benutzererfahrung stören.

  • Teste Deine Formulare gründlich, um sicherzustellen, dass der Fokus immer auf dem richtigen Steuerelement liegt.

  • Nutze das Debugging-Tool von VBA, um zu überprüfen, wo der Fokus während der Ausführung Deines Codes tatsächlich liegt.


FAQ: Häufige Fragen

1. Warum funktioniert SetFocus nicht wie erwartet? Es kann sein, dass das Steuerelement, auf das Du den Fokus setzen möchtest, nicht aktiv ist oder von einem anderen Steuerelement überlagert wird.

2. Wie kann ich sicherstellen, dass der Fokus in einer TextBox bleibt? Verwende die .SetFocus-Methode im richtigen Ereignis, und stelle sicher, dass keine anderen Steuerelemente den Fokus übernehmen, z.B. durch das Drücken der Enter-Taste.

3. Was ist der Unterschied zwischen GotFocus und SetFocus? GotFocus ist ein Ereignis, das ausgelöst wird, wenn ein Steuerelement den Fokus erhält, während SetFocus eine Methode ist, die den Fokus auf ein bestimmtes Steuerelement setzt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige