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

TextBox in UserForm

Forumthread: TextBox in UserForm

TextBox in UserForm
23.11.2024 10:26:16
Daniel Eberhard
Guten Tag Forum

Ich habe eine Textbox in einer Userform. Multiline habe ich auf true, EnterKeyBehavior ist auch auf true.

In der TextBox dürfen max. 8 Zeilen zum schreiben zur Verfügung stehen. Danach sollte die Eingabe blockieren.
Bei der letzten Zeile (also Zeile 8), darf der Text nur so lange sein, bis das Ende der Textbox erreicht ist. Danach sollten keine weiteren Eingaben mehr möglich sein.

Hat da jemand eine Lösung?

Freundliche Grüsse
Daniel Eberhard
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: TextBox in UserForm
23.11.2024 11:19:39
Alwin Weisangler
Hallo Daniel,

eine Möglichkeit wäre so:


Private Sub TextBox1_Change()
Dim tmp, i&
tmp = Split(TextBox1, vbCrLf)
If UBound(tmp) > 7 Then MsgBox "Zu viele Zeilenumbrüche": TextBox1.Locked = True
End Sub


Gruß Uwe
Anzeige
AW: TextBox in UserForm
23.11.2024 11:55:50
Onur
" bis das Ende der Textbox erreicht ist"?
Wiele Zeichen das wären, hängt von vielen Faktoren ab (z.B. Schriftart, -größe, Fett oder nicht ....) - das musst du schon selber einstellen.
AW: TextBox in UserForm
23.11.2024 15:53:44
Daniel Eberhard
Hallo Uwe
Danke für Dein Vorschlag. Das funktioniert fast. Jedoch soll die Textbox nicht gleich blockiert werden. Der Text sowie die letzte Zeile sollte weiterhin bearbeitbar sein.


Freundliche Grüsse
Daniel Eberhard
Anzeige
AW: TextBox in UserForm
23.11.2024 16:55:21
Alwin Weisangler
Hallo Daniel,

das wäre dann so:


Private Sub TextBox1_Change()
Dim tmp, i&
tmp = Split(TextBox1, vbCrLf)
If UBound(tmp) > 7 Then MsgBox "Zu viele Zeilenumbrüche": TextBox1 = Left(TextBox1, Len(TextBox1) - 2)
End Sub

da schmeist es die nicht gewollte neue Zeile raus.

Gruß Uwe
Anzeige
AW: TextBox in UserForm
23.11.2024 17:17:46
Daniel Eberhard
Hallo Uwe
Super das funktioniert fast perfekt. Wenn ich jedoch einen Text ohne Enter Taste einfach so schreibe und es automatisch eine neue Zeile schreibt, erkennt dies leider Dein Code nicht. Gibt es da auch noch eine Lösung?

Besten Dank für Deine Hilfe.

Gruss Daniel Eberhard
AW: TextBox in UserForm
23.11.2024 17:45:20
Kuwer
Hallo Daniel Eberhard,

teste es mal damit:
Private Sub TextBox1_Change()

With TextBox1
If .CurLine = 8 Then
.Text = Left(.Text, Len(.Text) - 1)
Beep
End If
End With
End Sub

Gruß, Uwe
Anzeige
AW: TextBox in UserForm
23.11.2024 17:58:55
Daniel Eberhard
Das funktioniert jetzt. Nur wenn ich in der letzten Zeile die Enter Taste drücke, springt er auf eine neue Zeile. Da sollte die Eingabe inkl. Enter Taste irgendwie blockiert werden.

Sorry das ewige hin und her! :-(

Gruss
Daniel Eberhard
AW: TextBox in UserForm
23.11.2024 20:32:31
Kuwer
Hallo Daniel Eberhardt,

so sollte es klappen:
Private Sub TextBox1_Change()

With TextBox1
If .CurLine > 7 Then
.Text = Left(.Text, Len(.Text) - 1)
Beep
End If
End With
End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 And TextBox1.CurLine > 6 Then
KeyCode = 0
Beep
End If
End Sub

Gruß, Uwe
Anzeige
AW: TextBox in UserForm
24.11.2024 09:51:59
Daniel Eberhard
Guten Morgen Uwe

Das funktioniert schon fast perfekt. Jedoch habe ich festgestellt, wenn ich zum Beispiel in der Mitte etwas ergänze, sei es mit schreiben oder der Enter Taste, so geht es über die 8 Zeilen hinaus. Kann man das auch noch irgendwie Programiren, das dies nicht passiert?

Vielen, vielen Dank für Deine Bemühungen.

Gruss
Daniel Eberhard
Anzeige
AW: TextBox in UserForm
24.11.2024 13:03:11
Kuwer
Hallo Daniel Eberhard,

lösche den KeyDown-Code wieder und ersetze den Change-Code mit folgendem:
Private Sub TextBox1_Change()

Static blnGesperrt As Boolean
Dim lngP As Long
If Not blnGesperrt Then
blnGesperrt = True
With TextBox1
Do While .LineCount > 8
lngP = .SelStart
.Text = Left(.Text, Len(.Text) - 1 + (Asc(Right(.Text, 1)) = 10))
.SelStart = lngP
Loop
End With
blnGesperrt = False
End If
End Sub

Gruß, Uwe
Anzeige
AW: TextBox in UserForm
25.11.2024 19:53:28
Daniel Eberhard
Hallo Uwe

Vielen, vielen Dank. Das funktioniert ja wunderbar und wie gewünscht.
Nun habe ich noch das Problem, ich fülle mit einem Button ein Textfeld 2 wie folgt:



Private Sub CommandButton1_Click()
Worksheets("Tabelle1").Shapes("Textfeld 2").DrawingObject.Text = TextBox1.Text
End Sub


Wie kann ich nun die Textbox1 beim aufrufen der Userform mit dem Inhalt des Textfeld 2 befüllen?

Hast Du mir da auch noch eine Lösung?

Freundliche Grüsse
Daniel Eberhard
Anzeige
AW: TextBox in UserForm
25.11.2024 23:10:35
Kuwer
Hallo Daniel Eberhard,

Private Sub UserForm_Activate()

TextBox1.Text = Worksheets("Tabelle1").Shapes("Textfeld 1").DrawingObject.Text
End Sub

Gruß, Uwe
AW: TextBox in UserForm
25.11.2024 23:25:04
Daniel Eberhard
Vielen Dank. Habe vieles versucht. Aber auf das bin ich jetzt nicht gekommen. DANKE
Anzeige
AW: TextBox in UserForm
26.11.2024 12:34:49
Daniel Eberhard
Hallo Uwe
Leider war meine Freude vergebens. Nun habe ich unterstehender Code erweitert. Das heisst, ich habe Deinen Code für 2 weitere Textboxen und Listboxen angewendet.
Nun krieg ich die Fehlermeldung Laufzeitfehler '2185 Eigenschaft LineCount konnte nicht abgerufen werden. Markiert wird die Zeile



do while .linecount > 6


Was mache ich jetzt wieder falsch?

Hier noch mein Code:


Private Sub TextBox1_Change()
Static blnGesperrt As Boolean
Dim lngP As Long

If Not blnGesperrt Then
blnGesperrt = True
With TextBox1
Do While .LineCount > 8
lngP = .SelStart
.Text = Left(.Text, Len(.Text) - 1 + (Asc(Right(.Text, 1)) = 10))
.SelStart = lngP
Loop
End With
blnGesperrt = False
End If

Klick = "OK"

End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Klick = "OK" Then
Select Case MsgBox("Sollen Ihre Änderungen gespeichert werden?", vbYesNoCancel + vbQuestion, "Warnung")
Case vbYes
Worksheets("Tabelle1").Shapes("Textfeld 2").DrawingObject.Text = TextBox1.Text
Case Cancel
Cancel = True
End Select
End If
End Sub

Private Sub TextBox2_Change()
Static blnGesperrt As Boolean
Dim lngP As Long

If Not blnGesperrt Then
blnGesperrt = True
With TextBox2
Do While .LineCount > 6
lngP = .SelStart
.Text = Left(.Text, Len(.Text) - 1 + (Asc(Right(.Text, 1)) = 10))
.SelStart = lngP
Loop
End With
blnGesperrt = False
End If
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Klick = "OK" Then
Select Case MsgBox("Sollen Ihre Änderungen gespeichert werden?", vbYesNoCancel + vbQuestion, "Warnung")
Case vbYes
Worksheets("Tabelle1").Shapes("Textfeld 3").DrawingObject.Text = TextBox2.Text
Case Cancel
Cancel = True
End Select
End If
End Sub

Private Sub TextBox3_Change()
Static blnGesperrt As Boolean
Dim lngP As Long

If Not blnGesperrt Then
blnGesperrt = True
With TextBox3
Do While .LineCount > 7
lngP = .SelStart
.Text = Left(.Text, Len(.Text) - 1 + (Asc(Right(.Text, 1)) = 10))
.SelStart = lngP
Loop
End With
blnGesperrt = False
End If
End Sub

Private Sub UserForm_Activate()
TextBox1.Text = Worksheets("Tabelle1").Shapes("Textfeld 2").DrawingObject.Text
TextBox2.Text = Worksheets("Tabelle1").Shapes("Textfeld 3").DrawingObject.Text
TextBox3.Text = Worksheets("Tabelle1").Shapes("Textfeld 4").DrawingObject.Text
End Sub


Ich hoffe das ich Dich dann in Ruhe lassen kann.

Freundliche Grüsse
Daniel Eberhard
Anzeige
AW: TextBox in UserForm
26.11.2024 13:29:38
Kuwer
Hallo Daniel Eberhard,

in der Fehlermeldung steht doch, was Du machen sollst. ;-)
Private Sub UserForm_Activate()

TextBox1.SetFocus
TextBox1.Text = Worksheets("Tabelle1").Shapes("Textfeld 2").DrawingObject.Text
TextBox2.SetFocus
TextBox2.Text = Worksheets("Tabelle1").Shapes("Textfeld 3").DrawingObject.Text
TextBox3.SetFocus
TextBox3.Text = Worksheets("Tabelle1").Shapes("Textfeld 4").DrawingObject.Text
End Sub

Gruß, Uwe
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