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

Code generierte Textboxen in Frames bekommen keinen Focus

Forumthread: Code generierte Textboxen in Frames bekommen keinen Focus

Code generierte Textboxen in Frames bekommen keinen Focus
25.04.2025 12:46:43
evilscytheman
Hallo zusammen,

ich generiere Textboxen in Frames zur Laufzeit in der Initialisierung einer Userform:


Private TextBoxEvents() As New clsTextBoxEvents

Private Sub UserForm_Initialize()
...
Set Frame_DV = Me.Controls.Add("Forms.Frame.1", "Frame_DV")
With Frame_DV
.Top = topPosition
.Left = 10
.width = (controlWidth + controlSpacing) * numControls + tbwidth + 35
.Height = 3 * controlHeight + 60
.Caption = "Design Validation"
.Font.name = "Tahoma"
.Font.Size = 11
.TabStop = False
End With

' Create Frame_DV_Env inside Frame_DV
Set Frame_DV_Env = Frame_DV.Controls.Add("Forms.Frame.1", "Frame_DV_Env")
With Frame_DV_Env
.Top = 10
.Left = 10
.width = (controlWidth + controlSpacing) * numControls + tbwidth + 20
.Height = 1 * controlHeight + 50
.Caption = "Environmental"
.Font.name = "Tahoma"
.Font.Size = 11
.TabStop = False
End With
...
For i = 1 To numControls
Set tb = Frame_DV_Env.Controls.Add("Forms.TextBox.1", "DV_Env_" & i)
With tb
.Top = lblClimate.Top
.Left = startPosition
.width = controlWidth
.Height = controlHeight
.Font.name = "Tahoma"
.Font.Size = 9
.TextAlign = fmTextAlignCenter
End With
startPosition = startPosition + tb.width + controlSpacing

' Initialize and assign the TextBox to the event handler
Set TextBoxEvents(i) = New clsTextBoxEvents
Set TextBoxEvents(i).TextBox = tb
Next i
End Sub


In einem Klassenmodul ("clsTextBoxEvents")definiere ich das Verhalten der Textbox:


Public WithEvents TextBox As MSForms.TextBox

Private Sub TextBox_AfterUpdate()
Call ReplaceDecimalPointWithComma(Me.TextBox)
End Sub

Private Sub TextBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call ReplaceDecimalPointWithComma(Me.TextBox)
End Sub

Private Sub TextBox_Change()
Me.TextBox.SetFocus
DoEvents
Debug.Print "Aktuelle ActiveControl: "; UF_AutoSource.ActiveControl.name
Debug.Print Me.TextBox.name
End Sub

Private Sub TextBox_Enter()
Debug.Print "Fokus erlangt: "; Me.TextBox.name
End Sub


Nur die Change Routine wird gestartet, der Rest wird ignoriert. Ich kann aber selbst mit SetFocus in der Change Routine nicht den Focus auf die Textbox legen.

Wie bekommen die Textboxen einen Focus, den ich nutzen kann zur Kontrolle der Eingabe?

Vielen Dank und Grüße
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code generierte Textboxen in Frames bekommen keinen Focus
25.04.2025 14:55:36
Mullit
Hallo,

Enter-, Exit- und Before-/Afterupdate-Events stehen in Automatisierungsklassen nicht ( so ohne weiteres...) zur Verfügung....

Gruß, Mullit
AW: Code generierte Textboxen in Frames bekommen keinen Focus
26.04.2025 09:16:06
Alwin Weisangler
Hallo,

ändere im Userform paar Sachen so:
Private TextBoxEvents() As New clsTextBoxEvents --> Private TextBoxEvents() As clsTextBoxEvents

um das Ganze auch ressourcenschonend zu nutzen definiere das Datenfeld so:
ReDim TextBoxEvents(1 To numControls)

Wenn du das Enter Event in einer Klasse verarbeiten willst, geht das nur über API Functions.

Als kleine Krücke kann man dies natürlich auch über TextBox_KeyUp + erreichen:
If KeyCode = vbKey...
und wenn man den Textboxinhalt manipulieren will dann via TextBox MouseUp

SetFocus machst du in Schleife:


With tb
.Top = 10
.Left = startPosition
.Width = controlWidth
.Height = controlHeight
.Font.Name = "Tahoma"
.Font.Size = 9
.TextAlign = fmTextAlignCenter
.Value = "Test " & i
If i = 1 Then .SetFocus
End With

Das Ganze sieht so ein bisschen nach halbes Zeug von der KI aus.

In der Datei befinden sich noch weitere Hinweise zu sinnvollen Parametrisierung statischer Vorgaben via Call Aufruf.
https://www.herber.de/bbs/user/177281.xlsm

Gruß Uwe

Anzeige
AW: Code generierte Textboxen in Frames bekommen keinen Focus
25.04.2025 15:06:31
evilscytheman
OK, das ist sehr schade. Gibt es andere Möglichkeiten, direkt bei Eingabe die Eingabe zu prüfen?
AW: Code generierte Textboxen in Frames bekommen keinen Focus
25.04.2025 16:43:18
Onur
"ich generiere Textboxen in Frames zur Laufzeit in der Initialisierung einer Userform" ??? Auch noch in der Initialisierung ?
Wozu? Willst du auch noch das Programmieren automatisieren?
Anzeige
AW: Code generierte Textboxen in Frames bekommen keinen Focus
26.04.2025 00:30:34
Daniel
Welche Events wären denn möglich?
AW: Code generierte Textboxen in Frames bekommen keinen Focus
26.04.2025 02:38:21
Mullit
Hallo,

bei mir (xl2016) gingen folgende Events:

Userbild

Gruß, Mullit
AW: Code generierte Textboxen in Frames bekommen keinen Focus
25.04.2025 16:01:51
daniel
Hi
Klassenprogrammierung ist nicht so mein Ding.
Das erste, was ich mir daher überlegen würde, wäre, ob es wirklich zur Laufzeit erstellte Textboxen sein müssen oder ob man das mit händisch erstellten nicht auch irgendwie hinbekommt (überzählige Ausblenden).
wenn das keine Option ist, wäre die nächste Frage, was genau du denn prüfen willst. Deinem Beispielcode nach willst du ja nur erreichen, dass ein eingetippter Punkt zum Komma wird.
das sollte auch im Change-Event funktionieren (Punkt durch Komma ersetzen), hierbei musst du lediglich die durch Selbstaufruf mögliche Endlosschleife unterbinden.

Private Sub TextBox_Change()

With TextBox
if Instr(.text, ".") > 0 Then .Text = Replace(.Text, ".", ",")
end with
End Sub


oder du musst mal prüfen, ob die Events KeyPress oder KeyDown zur Verfügung stehen. Hierbei könntest du ebenfalls einen eingetippten Punkt durch ein Komma austauschen.

generell wäre ich auch mit Frames vorsichtig. Diese sind nicht nur Rahmenlinien, sondern schaffen quasi eine neue Userform innerhalb der eigentlichen Userform (was beispielsweise Auswirkungen auf das Exit-Event haben kann.).
Wenn man nur eine Rahmenlinie braucht, ist es daher oft besser, einfach nur ein Label mit Rahmenlinie und transparentem Hintergrund zu erzeugen.

Gruß Daniel
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18