Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

SetFocus funktioniert nicht

Forumthread: SetFocus funktioniert nicht

SetFocus funktioniert nicht
07.09.2018 10:50:01
Joerg
Guten Tag,
ich habe folgendes Phänomen:
Ich nutze eine VBA Makro um ein Messprogramm abzuarbeiten. Kopfdaten werden auf einem ersten Userform eingegeben. Ich verwende dann in der Abfolge For-Next Schleifen um die jeweiligen Messpunkte abzufragen, der Code liegt auf dieser ersten Userform. Jeder Messpunkt wird abgefragt und die ausführende Person muss den Wert messen und per Fusstaster/ Knopfdruck den Wert übertragen. Zwischen Excel und dem Messgerät hängt noch ein Schnittstellen- Programm, welches den Wert zur Verfügung stellt. Zur Erfassung des Wertes springe ich in eine zweite Userform, welche anzeigt wass ich messen muss und diese UF bekommt den Messwert. Über ein Change Ereignis beendet sich diese Userform der Wert wird verarbeitet und es geht in der Schleife weiter. 2te UF öffnet sich wieder usw....
Dies funktioniert alles soweit.
Jetzt habe ich ein neues Messmittel und möchte die Werte ohne Schnittstellen Programm in eine Textbox einlesen. Das geht auch grundsätzlich. Der Wert wird in eine aktive Zelle oder ein aktives Textfeld eingefügt.
Aber: Ich benötige den Fokus in dem Textfeld. Dazu habe ich in der Schleife bevor das 2te Userform aufgerufen wird ein setfocus drin. Das geht auch beim ersten Aufruf.
Beim zweiten Durchlauf der Schleife geht das aber nicht mehr. Der Fokus wird nicht gesetzt.
Setze ich hier einen Haltepunkt im Code vor dem Aufruf der 2ten UF dann geht es immer. Ich habe eine Wartezeit eingefügt, das bringt aber nichts.
Woran kann das liegen?
Vielen Dank schonmal für die Unterstützung.
Gruß Joerg
Code:
For Bohrung = 1 To 2
For Winkel = 0 To 45 Step 45
For Messpunkt = 200 To 1000 Step 200
ZielSpaltenBerechnung '>> Werte werden in dem Tabellenblatt gespeichert
Textfeldstring_Definition ' >> Werte werden auf der ersten UF angezeigt
UF2.lab_Eingabe.Caption = "B" & Bohrung & "," & Winkel & "," & Messpunkt
UF2.Controls(TexfeldstringMesskanal).Value = ""
UF2.Controls(TexfeldstringMesskanal).SetFocus
UF2.Show
__________
Code Userform2:
<pre>Private Sub txt_Kanal1_change()
If Len(txt_Kanal1.Text) = 8 Then
WertTxtString = txt_Kanal1.Value
...
...
End If
End Sub</pre>
____________
zurück zu UF1 > Wert wird berechnet, etc.
...
...
Diagramm_aktualisieren
Next Messpunkt
Next Winkel
Next Bohrung
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SetFocus funktioniert nicht
07.09.2018 10:54:49
Frank
Hallo Joerg!
Kann es sein, dass du erst die UF2 öffnen musst und dann den Focus setzen kannst?
UF2.Show
UF2.Controls(TexfeldstringMesskanal).SetFocus
Konnte ich helfen?
Gruß Frank H.
AW: SetFocus funktioniert nicht
07.09.2018 11:06:40
Joerg
Hallo Frank,
vielen Dank für die schnelle Antwort.
Nach dem ich UF2 öffne, muss ich erst dieses "abarbeiten", bevor es mit dem Code auf UF1 weitergeht.
Ich habe auch ein "Sub UserForm_Activate" mit der Setfocus Anweisung. Aber auch das bringt keine Lösung.
Ich leere auch das Textfeld vorher, das klappt prima.
Folgendes ist noch auffällig: Wenn ich beim ersten Mal auf das UF2 komme, ist der Fensterrahmen ausgegraut (inaktiv) das Textfeld hat den Fokus und der Wert kann eingegeben werden. Komme ich beim zweiten Durchlauf ist das Fenster blau (aktiv) und selbst wenn ich in das Textfeld mit der Maus klicke bleibt es blau...
Anzeige
AW: SetFocus funktioniert nicht
07.09.2018 11:15:15
Joerg
.
AW: SetFocus funktioniert nicht
10.09.2018 08:52:05
EtoPHG
Hallo,
Wenn es beim ersten Aufruf funktioniert, beim 2ten aber nicht, dann würde ich
In der (nicht funktionierenden) Userform, beim Verlassen dieser, ein Unload Me anstelle eines Me.Hide verwenden.
Gruess Hansueli
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

SetFocus in VBA UserForms richtig nutzen


Schritt-für-Schritt-Anleitung

Um sicherzustellen, dass der Fokus in einer Textbox innerhalb einer UserForm korrekt gesetzt wird, kannst du folgende Schritte ausführen:

  1. UserForm öffnen: Stelle sicher, dass du die UserForm mit den entsprechenden Werten öffnest. Nutze dazu die Show-Methode.

    UF2.Show
  2. Fokus setzen: Setze den Fokus nach dem Öffnen der UserForm. Dies kann direkt nach dem Show-Aufruf erfolgen.

    UF2.Controls(TexfeldstringMesskanal).SetFocus
  3. Event Handling: Stelle sicher, dass du in der UserForm das Change-Ereignis für die Textbox implementierst. Dadurch kannst du den Wert verarbeiten, sobald der Benutzer diesen eingibt.

    Private Sub txt_Kanal1_Change()
       If Len(txt_Kanal1.Text) = 8 Then
           WertTxtString = txt_Kanal1.Value
           ' Weitere Verarbeitungen hier
       End If
    End Sub

Häufige Fehler und Lösungen

  • SetFocus funktioniert nicht: Wenn der Fokus beim zweiten Aufruf nicht gesetzt wird, kann es an der Art liegen, wie die UserForm behandelt wird. Verwende Unload Me anstelle von Me.Hide, um die UserForm komplett zu schließen.

  • Fensterrahmen ist ausgegraut: Wenn die UserForm beim ersten Aufruf ausgegraut ist, ist sie inaktiv. Dies kann darauf hinweisen, dass die UserForm im Hintergrund oder nicht korrekt aktiviert ist. Achte darauf, dass andere Prozesse nicht die Kontrolle übernehmen.


Alternative Methoden

  • Fokus in der Activate-Ereignis: Du kannst den Fokus auch im UserForm_Activate-Ereignis setzen:

    Private Sub UserForm_Activate()
       Me.Controls(TexfeldstringMesskanal).SetFocus
    End Sub
  • Timer verwenden: Wenn das Setzen des Fokus weiterhin Probleme verursacht, kannst du einen Timer verwenden, um eine Verzögerung einzufügen, bevor der Fokus gesetzt wird.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das die Funktionsweise der UserForms und das Setzen des Fokus demonstriert:

For Bohrung = 1 To 2
    For Winkel = 0 To 45 Step 45
        For Messpunkt = 200 To 1000 Step 200
            ' UserForm anzeigen und Fokus setzen
            UF2.Show
            UF2.Controls(TexfeldstringMesskanal).SetFocus
            ' Weitere Logik hier
        Next Messpunkt
    Next Winkel
Next Bohrung

Tipps für Profis

  • Debugging: Nutze Haltepunkte im Code, um den Ablauf zu überprüfen. Dies kann dir helfen zu erkennen, wo der Fokus verloren geht.

  • Verwende Unload Me: Wenn du die UserForm nicht mehr benötigst, stelle sicher, dass du sie mit Unload Me schließt, um Speicher zu sparen und eventuelle Fehler zu vermeiden.

  • Benutzererfahrung: Achte darauf, dass die UserForms für den Benutzer intuitiv sind. Ein klarer Fokus auf Eingabefelder verbessert die Nutzung.


FAQ: Häufige Fragen

1. Warum funktioniert SetFocus manchmal nicht? Der Fokus könnte verloren gehen, wenn die UserForm nicht korrekt aktiviert ist oder wenn andere Prozesse den Fokus übernehmen.

2. Was ist der Unterschied zwischen Me.Hide und Unload Me? Me.Hide blendet die UserForm nur aus, während Unload Me die UserForm vollständig schließt und aus dem Speicher entfernt. Dies ist oft die bevorzugte Methode, um sicherzustellen, dass keine Ressourcen blockiert werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige