Textbox; MultiLine begrenzen

15/05/2010 - 09:37 von Jürgen Stadermann | Report spam
Hallo,
im Eigenschaftsfenster einer Textbox, kann man die Eigenschaft MultiLine
auf True setzen und somit mehrzeilig in die Textbox schreiben.
Nun möchte ich gern diese Mehrzeiligkeit auf 3 Zeilen begrenzen.
D.h. ich ziehe eine Textbox einer bestimmten Lànge und Höhe auf.
Schreibe ich in diese Textbox, so findet (bekannter Weise) am Ende der
Textbox ein Zeilenumbruch statt und es wird in die nàchste Zeile
geschrieben. Die Höhe der Textbox habe ich so bestimmt, dass 3 Zeilen
sichtbar sind und so soll es bleiben.
Mit der Bitte um Hilfe, wie und wo und ob überhaupt kann man da etwas
per VBA erreichen.
Danke schon mal für Antworten.
Jürgen
 

Lesen sie die antworten

#1 Andreas Killer
15/05/2010 - 10:21 | Warnen spam
Jürgen Stadermann schrieb:

im Eigenschaftsfenster einer Textbox, kann man die Eigenschaft MultiLine
auf True setzen und somit mehrzeilig in die Textbox schreiben.
Nun möchte ich gern diese Mehrzeiligkeit auf 3 Zeilen begrenzen.


Ist relativ einfach, ich gehe davon aus das die Textbox mit Strg-Enter
die nàchste Zeile erzeugt (siehe Hilfe zu EnterKeyBehavior).

Überwache die Eingaben in die Textbox im TextBox_KeyDown-Ereignis und
bei Strg-Enter zàhle dort die Anzahl der Zeilenumbrüche in der
Textbox. Sind bereits 2 vorhanden, sind schon 3 Zeilen da und nun
unterdrückst Du ganz einfach das Strg-Enter.

Du solltest aber ggf. in LostFocus oder GotFocus den Inhalt trimmen
und so überzàhlige vbCr und Blanks entfernen. Oder den umgekehrten Weg
und den Inhalt generell auf 2 Zeilenumbrüche erweitern, so braucht
der User nie Strg-Enter drücken und kann immer mit Cursor-Down in die
nàchste Zeile.

Andreas.

Private Function ChrCount(ByVal S As String, ByVal SubStr As _
String, Optional ByVal ConsecutiveSubStr As Boolean = True, _
Optional ByVal Compare As VbCompareMethod = vbTextCompare) As _
Long
'Zàhlt die Anzahl von SubStr in S
Dim Cnt As Long, I As Long
Cnt = 0
If ConsecutiveSubStr Then
I = InStr(1, S, SubStr, Compare)
Do While I > 0
Cnt = Cnt + 1
I = InStr(I + Len(SubStr), S, SubStr, Compare)
Loop
Else
For I = 1 To Len(S)
If InStr(1, SubStr, Mid$(S, I, 1), Compare) > 0 Then Cnt _
= Cnt + 1
Next
End If
ChrCount = Cnt
End Function

Private Sub TextBox1_KeyDown( _
ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
'Strg-Enter gedrückt?
If Shift = 2 And KeyCode = vbCr Then
'Mehr als 2 Zeilenumbrüche?
If ChrCount(TextBox1.Value, vbCr) >= 2 Then
'Dann Taste unterdrücken
KeyCode = 0
Shift = 0
End If
End If
End Sub

Ähnliche fragen