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

Textbox Cusor immer in die letzte Zeile setzen

Forumthread: Textbox Cusor immer in die letzte Zeile setzen

Textbox Cusor immer in die letzte Zeile setzen
Horst
Hey!
Ich habe eine Textbox (Multiline)
Die protokolliert mir die Ergebnisse verschiedener Makros.
Nun möchte ich aber das der Cursor immer automatisch an die letzte Zeile gesetzt wird.
Um immer gleich die aktuellste Textausgabe mitlesen zu können.
Aber wie erreiche ich das:
Hier das Makro da mir den Text Zusammenstellt.
--------------------------------------------------

Public Sub changeAndConcateTextAndRepaint(displayText As String)
Ueberschrif1.Caption = "Fortschritt Tabelle " & ActiveSheet.Name & " " & Time
TextBoxForschritt.Text = TextBoxForschritt.Text & vbCr & displayText
TextBoxForschritt.SelStart = TextBoxForschritt.TextLength
Repaint
TextBoxForschritt.SelStart = TextBoxForschritt.TextLength
End Sub

------------------------------------------------------
Der Cursor bleibt irgendwie immer in mittendrin stehen und ich muss scrollen.
Wer kann hier helfen
Gruß Horst
Anzeige
AW: Textbox Cusor immer in die letzte Zeile setzen
31.03.2010 09:59:49
xr8k2
Hallo Horst,
setze mal noch den Focus auf deine Textbox:
'...
TextBoxForschritt.setfocus
'...
Gruß,
xr8k2
AW: Textbox Cusor immer in die letzte Zeile setzen
31.03.2010 10:16:35
Horst
Hey!
habe ich gemacht.
-----------------------------------
Ueberschrif1.Caption = "Fortschritt Tabelle " & ActiveSheet.Name & " " & Time
TextBoxForschritt.Text = TextBoxForschritt.Text & vbCr & displayText
TextBoxForschritt.SetFocus
'TextBoxForschritt.CurLine = TextBoxForschritt.LineCount
TextBoxForschritt.SelStart = TextBoxForschritt.TextLength
Repaint
TextBoxForschritt.SelStart = TextBoxForschritt.TextLength
TextBoxForschritt.SetFocus
------------------------------------
Macht keinen Unterschied, kann da vielleicht an den vbcrs liegen?
Horst
Anzeige
MsgBox lässt Textbox Cusor einfrieren
31.03.2010 10:32:55
Horst
Hey!
Also das mit dem SetFocus war wohl doch richtig.
Es bleibt auch in der letzten Zeile.
Wenn aber eine MsgBox aufpoppt (also dazischen kommt) bleibt der Cusor in der Textbox an der Stelle wo er vor der dem auslösen der MsgBox war. Und bewegt sich nicht mehr weiter.
Jemand ne Idee?
Horst
Anzeige
nicht nachvollziehbar owT
31.03.2010 10:59:02
Rudi
AW: MsgBox lässt Textbox Cusor einfrieren
31.03.2010 11:06:17
xr8k2
Hallo Horst,
also ich hab das jetzt mal mit einem Aufruf der Prozedur in einer einfachen Schleife probiert ... in meinem Excel2003 funktionierts (auch mit dazwischengeschalteten MsgBoxes).
Wie rufst du denn denn das Makro auf, ist das eine Textbox in einer Userform? Wenn ja, wird diese gebunden oder ungebunden angezeigt? Und warum hast du die Zeile
TextBoxForschritt.SelStart = TextBoxForschritt.TextLength
doppelt?
Gruß,
xr8k2
Anzeige
AW: MsgBox lässt Textbox Cusor einfrieren
31.03.2010 11:25:32
Horst
Hey !
ja das ist eine Textbox in einer userForm
Was bedeuted gebunden oder nicht gebunden? (Modal?)
Wenn ja zeige ich diese Modal an.
Ich rufe
TextBoxForschritt.SelStart = TextBoxForschritt.TextLength
zweimal auf, aus Verzweiflung!
Vielleicht vergisst er bei Repaint ja was, dachte ich.
Was mir noch aufgefallen ist:
TextBoxForschritt.SelStart = TextBoxForschritt.TextLength
Das SelStart bliebt auch nach der Zuweisung auf die Testlänge auf den alten Stand, und wir nicht aktualisiert auf die Textlänge . Ebenfalls erst nach der MsgBox.
Wat kann das den sein?
Anzeige
AW: MsgBox lässt Textbox Cusor einfrieren
31.03.2010 11:26:50
xr8k2
Hallo Horst, ich nochmal ...
genau das wird das Problem sein ... bei ungebundenen Úserforms tritt das Problem auf, das die Textbox den Fokus nicht wieder zurück erhält.
Wie man´s lösen kann weiß ich aber grad eben leider auch nicht (außer eben die Userform gebunden darzustellen) :-(
Gruß,
xr8k2
Anzeige
AW: MsgBox lässt Textbox Cusor einfrieren
31.03.2010 11:38:02
Horst
Wie stelle ich diese denn gebunden (ungebunden) dar?
Horst
ShowModal=True/ False owT
31.03.2010 11:39:57
Rudi
AW: MsgBox lässt Textbox Cusor einfrieren
31.03.2010 11:44:17
Horst
Hallo !
habe ich getan,
Ergebnis ist das selbe ob ShowModal True oder False.
mmh...
Horst
Anzeige
mmh...
31.03.2010 11:49:01
Rudi
Hallo,
du solltest die Mappe mal hochladen.
Gruß
Rudi
AW: mmh...
31.03.2010 11:51:16
xr8k2
Hallo Horst ... aber wenn du ja schreibst deine UF ist schon modal ?!
Hab mal noch ein bissl weiterprobiert ... so funktionierts nun bei mir gebunden und ungebunden
(den Senf mit TextBoxForschritt.SelStart = TextBoxForschritt.TextLength kannst du auch getrost noch weglassen):
Public Sub changeAndConcateTextAndRepaint(displayText As String)
Ueberschrif1.Caption = "Fortschritt Tabelle " & ActiveSheet.Name & " " & Time
TextBoxForschritt.Text = TextBoxForschritt.Text & vbCr & displayText
TextBoxForschritt.SetFocus
Repaint
End Sub
'Wichtig: Eigenschaft .Hideselection der Textbox muss =false sein!
Gruß,
xr8k2
PS: ... damit getestet:
Sub TBfuellen()
Dim wertx As Long
wertx = 1
Do
changeAndConcateTextAndRepaint ("Textzeile " & wertx)
wertx = wertx + 1
If wertx = 10 Then MsgBox "Hallo Zeile"
Application.Wait (Now + TimeSerial(0, 0, 1))
Loop Until wertx >= 50
End Sub

Anzeige
AW: mmh...
31.03.2010 12:21:44
Horst
Hey
Danke, vielen Dank!
Das war es, dass ist die Lösung !!!!!!!!!!!
Horst
mmh... ändert mal die Reihenfolge!
31.03.2010 12:50:06
Renee
Hi zusammen,
Das ist wohl der Super-Overkill, für eine so simple Sache ein Application.Wait einzufügen!!
Public Sub changeAndConcateTextAndRepaint(displayText As String)
Ueberschrif1.Caption = "Fortschritt Tabelle " & ActiveSheet.Name & " " & Time
TextBoxForschritt.Text = TextBoxForschritt.Text & vbCr & displayText
TextBoxForschritt.SetFocus
TextBoxForschritt.SelStart = TextBoxForschritt.TextLength
End Sub
GreetZ Renée
Anzeige
AW: mmh... ändert mal die Reihenfolge!
31.03.2010 13:07:18
xr8k2
Tach auch ... Renée,
was hast du denn jetzt noch an der Reihenfolge geändert ?
Und wie schon erwähnt, das
TextBoxForschritt.SelStart = TextBoxForschritt.TextLength
kan mann getrost weglassen, da der Cursor automatisch ans ende der TB gesetzt wird.
Hey ... und was hast du gegen mein Application.Wait ...
steht doch nur in der TestProzedur ... weil meine Augen sind nicht mehr ganz so schnell ;-)
Gruß,
xr8k2
Anzeige
AW: mmh... ändert mal die Reihenfolge!
31.03.2010 13:10:53
Renee
Hi xr8k2,
.SetFocus muss vor .SelStart ;-)
Kein Modal/Nonmodal
Kein Repaint
Kein Wait
Kein gar nichts!
That's all folks!
GreetZ Renée
AW: mmh... ändert mal die Reihenfolge!
31.03.2010 13:17:00
xr8k2
... und eben das läuft ohne.Repaint unter vbmodeless nicht sauber ... zumindest in meinem Excel2003.
Die Aktualisierung der TB bricht irgendwann ab!
Gruß,
xr8k2
Anzeige
AW: mmh... ändert mal die Reihenfolge!
01.04.2010 07:38:16
Horst
Hey alle zusammen!
xr8k2 hatte die Lösung für meine Problem. Da mit Application wait war nur zum testen, und ist von mir auch so verstanden worden.
Danke allen zusammen!
Horst
AW: mmh...
31.03.2010 12:07:51
Horst
Die ganze Mappe wäre glaube ich zu viel, ungepack 15MB. Die Anwendung besteht dann auch aus drei Mappen. Wäre dann auch zu verwirrend.
Müsste ich zu Testzwecken erst noch umbauen.
Ich habe mal die UserForm exportiert, vielleicht kann man ja schon da sehen was ich falsch gemacht habe.
https://www.herber.de/bbs/user/68896.zip
Danke
Horst
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Textbox-Cursor in Excel immer an die letzte Zeile setzen


Schritt-für-Schritt-Anleitung

Um sicherzustellen, dass der Cursor in einer Multiline-Textbox in Excel immer an der letzten Zeile positioniert ist, kannst du das folgende VBA-Makro verwenden:

  1. Öffne den VBA-Editor (Alt + F11).
  2. Füge ein neues Modul ein oder öffne das bestehende Modul, in dem du dein Makro speichern möchtest.
  3. Verwende den folgenden Code:
Public Sub changeAndConcateTextAndRepaint(displayText As String)
    Ueberschrif1.Caption = "Fortschritt Tabelle " & ActiveSheet.Name & " " & Time
    TextBoxForschritt.Text = TextBoxForschritt.Text & vbCr & displayText
    TextBoxForschritt.SetFocus
    Repaint
End Sub
  1. Rufe dieses Makro auf, um Text an die Textbox zu übergeben.

Stelle sicher, dass die Eigenschaft HideSelection der Textbox auf False gesetzt ist, damit der Cursor korrekt angezeigt wird.


Häufige Fehler und Lösungen

  • Cursor bleibt im Textfeld stehen: Wenn der Cursor nicht an die letzte Zeile springt, vergewissere dich, dass du TextBoxForschritt.SetFocus vor der Zeile Repaint aufrufst.

  • MsgBox blockiert den Cursor: Wenn eine MsgBox angezeigt wird, kann dies den Fokus von der Textbox nehmen. Eine Möglichkeit, dies zu umgehen, ist die Verwendung von ungebundenen UserForms. Überlege, die UserForm modal zu gestalten, um den Fokus zu halten.


Alternative Methoden

Eine andere Möglichkeit, das Problem zu lösen, besteht darin, die Benutzeroberfläche zu optimieren. Du kannst die Textbox in einem gebundenen Zustand verwenden, was bedeutet, dass die Textbox immer im Vordergrund bleibt. Hier ist ein Beispiel:

Public Sub TBfuellen()
    Dim wertx As Long
    wertx = 1
    Do
        changeAndConcateTextAndRepaint ("Textzeile " & wertx)
        wertx = wertx + 1
        If wertx = 10 Then MsgBox "Hallo Zeile"
        Application.Wait (Now + TimeSerial(0, 0, 1))
    Loop Until wertx >= 50
End Sub

Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du das Makro in einer UserForm verwenden kannst:

Private Sub CommandButton1_Click()
    changeAndConcateTextAndRepaint "Dies ist ein neuer Eintrag."
End Sub

Wenn du auf den Button klickst, wird die neue Zeile in die Textbox eingefügt, und der Cursor wird automatisch an das Ende gesetzt.


Tipps für Profis

  • Vermeide überflüssige Zeilen: Entferne überflüssige Zeilen wie TextBoxForschritt.SelStart = TextBoxForschritt.TextLength, da der Cursor bereits automatisch ans Ende gesetzt wird.
  • Optimierung der Benutzeroberfläche: Teste verschiedene Eigenschaften der Textbox, um sicherzustellen, dass die Benutzererfahrung so reibungslos wie möglich ist.

FAQ: Häufige Fragen

1. Wie kann ich die Textbox an einen bestimmten Bereich binden? Um eine Textbox an einen bestimmten Bereich zu binden, kannst du die Eigenschaften der UserForm anpassen. Stelle sicher, dass die UserForm als modal angezeigt wird.

2. Was ist der Unterschied zwischen gebundenen und ungebundenen UserForms? Eine gebundene UserForm bietet eine direkte Verbindung zu den Daten und bleibt im Vordergrund, während eine ungebundene UserForm mehr Flexibilität bietet, aber möglicherweise den Fokus verliert.

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