Herbers Excel-Forum - das Archiv

SetFocus bringt Fehler

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Frame TextBox UserForm
Bild

Betrifft: SetFocus bringt Fehler
von: René

Geschrieben am: 05.01.2007 22:16:21
Hallo Leutz
Ich habe auf einer UserForm mehrere Frames, die wiederrum Textboxen enthalten.
Wenn ich jetzt, in Frame1/Textbox1 eine Eingabe tätige.
In der Textbox1 gebe ich einen Wert ein (in dem Fall ein Datum) und prüfe dieses in der Private Sub Textbox1_Change() mit IsDate auf Gültigkeit.
Bei Wert True möchte ich dann in Textbox2 mit SetFocus.
Diese Textbox2 ist aber in Frame2, was dann einen Fehler verursacht.
Laufzeitfehler '2110':
Fokus kann nicht auf das Steuerelement gesetzt werden. Es ist unsichtbar, nicht aktiviert oder von einem Typ, der keinen Fokus akzeptiert.
Mir ist schon klar, das dieses verursacht wird, weil ich mich nicht in dem selben aktiven Frame befinde.
Nur soweit reicht mein Wissen nicht, um dafür eine Lösung zu finden, das eben der Sprung in die Textbox2 doch gelingt.
Gibt es irgendein Befehl, mit dem ich den Frame2 bzw. Textbox2 aktiviere, und den Fokus setzen kann?
In dem Zusammenhang noch eine Unterfrage.
Gibt es eine Möglichkeit, den Coursor dem User bei Benutzung der Userform in den Textboxen dicker dar zu stellen?
Statt dem dünnen Strich einen dicken Strich.
Gruß René
Bild

Betrifft: AW: SetFocus bringt Fehler
von: Ramses
Geschrieben am: 06.01.2007 00:22:49
Hallo
Habe das gerade nachgebaut,... und es ist kein Problem.
Ist die Textbox Aktiv, d.h. wenn du von Hand den Cursor reinsetzt, geht das dann ?
Ist das Frame bzw. die Textbox sichtbar ?
Gruss Rainer
Bild

Betrifft: Korrektur
von: Ramses

Geschrieben am: 06.01.2007 00:30:54
Hallo
Solange sich nur die beiden Textboxen in der UF befinden geht es, ... bei mehreren jedoch nicht mehr. :-(
Probiers mal so
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = True
If IsDate(TextBox1) Then
Me.Controls("Textbox2").SetFocus
End If
End Sub

So geht es zumindest bei mir ohne Fehler
Gruss Rainer
Bild

Betrifft: AW: Korrektur
von: René

Geschrieben am: 06.01.2007 13:05:18
Hallo Rainer
Wie in deinem Code beschrieben funzt das auch, da sich beide Textboxen auf einer Userform befinden.
Bei mir befinden sich die Textboxen auch auf einer Userform, aber in unterschiedlichen Frames.
Die Aktivierreihenfolge auf der Userform ist Frame1 dann Frame2 .... Framex.
Innerhalb der Frames sind die Textboxen in Reihe aktiviert TB1 ... TBx.
Vielleicht verhält es sich ja dann auch so, wie in deinem Versuch, das ein anderer Frame wie eine andere Userform behandelt wird.
Sichtbar sind die Textboxen jedenfalls alle.
Gruß René
Bild

Betrifft: AW: Korrektur
von: René

Geschrieben am: 06.01.2007 13:34:16
Hallo Rainer
Ja, ich hab das nochmal getestet mit deinem Code.
Allerdings mit [Me.Controls("Textbox").SetFocus] habe ich den selben Fehler.
Mit 2 TB's gehts, mit mehreren nicht.
*Haarerauf*
Gruß René
Bild

Betrifft: AW: SetFocus bringt Fehler
von: Herby

Geschrieben am: 06.01.2007 14:54:29
Hallo Rene,
das Problem liegt m.E. daran, dass du für jedes Frame
definieren kannst, wie der Focus nach dem letzten Element
innerhalb des Frames weitergegeben werden soll, entweder
wieder zurück zum 1. Element oder zum nächsten Element
ausserhalb des Frames:
Frame1.Cycle = fmCycleCurrentForm
Frame1.Cycle = fmCycleAllForms
Beispiel:
Beim Aufruf der Userform:
Private Sub UserForm_Initialize()
Frame1.Cycle = fmCycleCurrentForm
End Sub

und dann beim Verlassen der letzten Textbox im Frame1:
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = True
If Len(TextBox2.Value) = 10 And IsDate(TextBox2.Value) Then
Frame1.Cycle = fmCycleAllForms
End If
End Sub

Damit könnte es doch gehen !
Viele Grüße
Herby
Bild

Betrifft: AW: SetFocus bringt Fehler
von: K.Rola
Geschrieben am: 06.01.2007 15:28:36
Hallo,
einfach den Namen des Frames angeben:
Frame1.TextBox2.SetFocus
Gruß K.Rola
Bild

Betrifft: AW: SetFocus bringt Fehler
von: René

Geschrieben am: 06.01.2007 17:21:38
Hi K.Rola
Nee, das funzt auch nicht :-(
Der bricht auch mit Fehler ab.
Was mich nur stutzig macht, wenn ich die Userform lade, habe ich in der 'Private Sub UserForm_Initialize()' auch den Befehl 'Me.Textbox2.SetFocus'.
Ohne Frameangabe oder anderem, dort klappt das.
Allerdings ist dieser Frame auf der UF in der Aktivierungsfolge auch an erster Stelle.
Also ich weiß mir keinen Rat mehr :-/
Gruß René
Bild

Betrifft: AW: SetFocus bringt Fehler
von: K.Rola
Geschrieben am: 06.01.2007 17:27:16
Hallo,
ich habe das getestet. Außer, dass du die Problemmappe mal hochladen könntest,
fällt mir nix weiter ein.
Gruß K.Rola
Bild

Betrifft: AW: SetFocus bringt Fehler
von: René
Geschrieben am: 06.01.2007 19:13:14
Hi K.Rola
Hab das Ding mal geladen.
Gruß René
https://www.herber.de/bbs/user/39440.xls
Bild

Betrifft: AW: SetFocus bringt Fehler
von: K.Rola

Geschrieben am: 06.01.2007 21:01:34
Hallo,
so wirds klar, du kannst den Focus nicht im Exit-Ereignis auf das selbe control
setzen. Eine mögliche Lösung, prüf den Wert z.B. so:
Private Sub EinEuro_Enter()
Call Test_Verwendung
End Sub

Sub Test_Verwendung()
Dim a As String
a = Verwendung.Value
If a = "" Then
m = MsgBox("Es wurde kein Verwendungszweck eingegeben!", vbInformation, "Eingabe Verwendungszweck")
Verwendung.SetFocus
Else
Range("Zweck").Offset.Value = a
End If
End Sub
Im Übrigen möchte ich dir empfehlen, Option Explicit zu verwenden, was dich zwingt,
alle Variablen zu deklarieren, das hilft, Fehler zu vermeiden.
Gruß K.Rola
Bild

Betrifft: AW: SetFocus bringt Fehler
von: René

Geschrieben am: 06.01.2007 21:23:56
Hallo K.Rola
Danke, ich werd das morgen mal austesten.
Den Tip mit Option Explicit werd ich bherzigen, gelesen hab ich den schon x-mal, aber naja ...
Gruß René
 Bild
Excel-Beispiele zum Thema "SetFocus bringt Fehler"
Fehlermeldung #NV ausblenden Fehlermeldung abfangen
Fehler in Workbook_Open-Prozedur abfangen Fehlermeldung #DIV/0! verhindern
Fehler entfernen Fehlermeldung abfangen und in sequentielle Datei schreiben
Fortlaufende Suche unter Vermeidung eines Laufzeitfehlers VBA-Fehlermeldungen auflisten
Alle Zellen mit der #BEZUG!-Fehlermeldung auswählen Zahlenstring mit Formel auslesen und Fehlermeldung verhindern