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

Cursor-Positon in Textbox ermitteln mit Zeilenumbrüchen

Forumthread: Cursor-Positon in Textbox ermitteln mit Zeilenumbrüchen

Cursor-Positon in Textbox ermitteln mit Zeilenumbrüchen
05.04.2025 03:47:36
Mr.PT
Guten Abend in die Expertenrunde,

ich versuche mein Anliegen so kurz wie möglich zu beschreiben:

In einer Standard TextBox (MultiLine = True) stehen diese Zeilen:
1AAA (dazwischen vbCrLf Zeilenumbrüche)
2BBB (vbCrLf)
3CCC (vbCrLf)
4DDD (vbCrLf)


Wenn ich mit TextBox1.SelStart die aktuelle Cursor-Position ermitteln möchte, funktioniert das nur bis zum Ende der ersten Zeile. Bereits ab der zweiten Zeile stimmt die Position mit '5' schon nicht mehr, da der Zeilenumbruch vbCrLf (bestehend aus zwei Zeichen ASCII(13) und ASCII(10) offenbar nicht mitgezählt wird. Eigentlich hätte ich ganz links in Zeile2 die Position '7' erwartet.
Diese verkürzte Positionsberechnung zieht sich dann durch den gesamten Text und verschiebt sich bei jedem Zeilenumbruch erneut um 1.

Userbild

Finales Ziel ist es, zu jeder Cursor-Position, den Anfang und das Ende der aktuellen Zeile zu ermitteln, um diese dann komplett auszulesen. Ohne die tatsächliche Cursor-Position gelingt das jedoch nicht.

Weiß jemand, wie man die korrekte Cursor-Position (inclusive Zeilenumbrüche) ermitteln kann?

Vielen Dank im Voraus
Mr.PT
Anzeige

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Cursor-Positon in Textbox ermitteln mit Zeilenumbrüchen
05.04.2025 09:59:41
Oberschlumpf
Hi,

so ausm Bauch raus, ungetestet, ohne Bsp-Datei von dir, vielleicht so:


Dim liTxtPos As Integer
With TextBox1
If Mid(.Text, .SelStart + 1, 1) = vbCrLf Then
liTxtPos = .SelStart + 2
End If
End With


Ciao
Thorsten
Anzeige
AW: Cursor-Positon in Textbox ermitteln mit Zeilenumbrüchen
05.04.2025 16:36:13
Mr.PT
Moin Thorsten,

danke für Deine Nachricht.

Das Ergebnis Deines Vorschlags zeigt jedoch, dass der Fall
If Mid(.Text, .SelStart + 1, 1) = vbCrLf
an keiner Position eintritt, so dass liTxtPos dauerhaft 0 bleibt.

Ich versuche mal die Beispiel-XL-Mappe hier hochzuladen
https://www.herber.de/bbs/user/176614.xls

Deinen Code findest Du im CodeBereich der UserForm1. Pos testen mit {F5}, Ergebnis per Debug.Print im Direktbereich VBA-Editor

Wenn Du das Problem lösen kannst, wäre das genial.
Ich hab's bislang nicht geschafft und ChatGPT war nach 14 Versuchen bereits in der Schleife seiner Vorschläge.

VG PT
[Sa.05.Apr.2025 14:33]
Anzeige
AW: Cursor-Positon in Textbox ermitteln mit Zeilenumbrüchen
05.04.2025 10:35:14
RPP63
Moin!
Arr = Split(Textbox1.Text, vbCrLf)

liefert ein 0-basiertes Array.
Zeile 1 ist Arr(0)
Zeile 3 ist Arr(2)

Gruß Ralf
(der das jetzt aber gleich mal testet)
Eventuell...
05.04.2025 12:33:22
Case
Moin, :-)

... ein Ansatz für dich: ;-)
https://www.herber.de/bbs/user/176611.xlsb

Das lässt sich in jeder Richtung anpassen (auch aktuelle Zeile auslesen). ;-)

Servus
Case
Anzeige
AW: Cursor-Positon in Textbox ermitteln mit Zeilenumbrüchen
06.04.2025 18:40:25
Mr.PT
Guten Tag in die Expertenrunde,

wie versprochen melde ich mich nach ausgiebigem Test mit den zusammengefassten Ergebnissen dieses Threads.
Aufgabe: Korrekte Berechnung der aktuellen Cursorposition, sowie der aktuellen Zeile in einer mehrzeiligen Textbox mit Zeilenumbrüchen (vbCrLf)
Problem: TextBox1.SelStart berücksichtigt nicht die Zeilenumbrüche und liefert ab der 2. Zeile eine falsche Cursor-Position

Lösung: (Danke an Case und Karl-Heinz (volti) und andere)

'======================================================================
'Aktuelle Cursor-Position einer mehrzeiligen Textbox korrekt berechnen:

Private Function fncKorrekt(txtBox As MSForms.TextBox) As Long
Dim lngCount As Long
Dim lngTMP As Long
lngCount = 1
Do While lngCount txtBox.SelStart + lngTMP + 1
If Mid(txtBox.Text, lngCount, 2) = vbCrLf Then
lngTMP = lngTMP + 1
lngCount = lngCount + 1
End If
lngCount = lngCount + 1
Loop
fncKorrekt = txtBox.SelStart + lngTMP
End Function


'======================================================================
'Aktuelle Textzeile einer mehrzeiligen Textbox korrekt ermitteln und ausgeben:

Private Sub CommandButton1_Click()
Dim strRows() As String
strRows = Split(TextBox1.Text, vbCrLf)
MsgBox "Zeile " & TextBox1.CurLine + 1 & ": " & strRows(TextBox1.CurLine)
End Sub


Mit Rücksendung dieser Lösungen geht mein Dank nochmals an alle fleißigen Unterstützer aus dem Herber-Excel-Forum und ich hoffe, dass das Ergebnis anderen Interessenten bei ihren VB/VBA-Projekten nützlich sein kann.

Viele Grüße in die Runde und euch allen noch einen schönen Restsonntag
Mr.PT [So.06.Apr.2025 16:36]
Anzeige
AW: Eventuell...
05.04.2025 18:18:49
Mr.PT
+++ Deine Nachricht vom Sa.05.Apr.2025 10:33

Hallo Case,

danke für Deine Nachricht.

Der Link führt zu einer Datei: 176611.xlsb

Kannst Du mir sagen, wie ich diese öffnen bzw. verwenden kann?
Ich habe derzeit nur Excel 2003, soweit das überhaupt kompatibel wäre..

VG Mr.PT
Anzeige
AW: Ohh Mann -...
05.04.2025 20:10:46
Mr.PT
Hi Case,

viele gute Ansätze für weitere Erforschungen dieses Themas - Klasse!

Update .xlsb Datei:
Ich hab einfach mal so eine xxx.xlsb Datei per Doppelklick geöffnet: Funktioniert offenbar auch mit Excel 2003, aber .xlsb kannte ich bislang gar nicht und dachte, es wäre irgend eine Art AddIn oder so.

Die geposteten Ansätze von Dir werde ich in Ruhe durcharbeiten und auch Rückmeldungen dazu posten, soweit dies im Forum von Interesse ist.

Fazit: Eure Antworten und Vorschläge haben mir neue Erkenntnisse und Möglichkeiten eröffent und damit aus einer stagnierenden Sackgasse geholfen. Wenn mit den Ansätzen am Ende die Cursor-Position an jeder Stelle ermittelt werden kann, werde ich die Lösung auch nochmal rückposten. Die Zweit-Aufgabe (aktuelle Zeile extrahieren) konnte ja mit dem Code von Karl-Heinz (volti) bereits jetzt schon gelöst werden.

Herzlichen Dank und Lob an alle fleißigen Supporter.
Cooles Forum hier...

Userbild

Bis hier zunächst mit besten Grüßen
Mr.PT [Sa.05.Apr.2025 18:10]
Anzeige
Sehr schön!
05.04.2025 18:07:25
RPP63
Die CurLine-Eigenschaft war mir neu! ;-)
Nur ergänzend:
Der CommandButton muss .TakeFocusOnClick = False haben (wie bei Dir).
Es würde aber auch ein Einzeiler reichen:
With TextBox1

MsgBox Split(.Text, vbCrLf)(.CurLine)
End With
Testergebnis
05.04.2025 10:42:11
RPP63
Userbild
Userbild
Anzeige
AW: Testergebnis
05.04.2025 17:00:42
Mr.PT
Moin Ralf,

vielen Dank für für Deine Antwort und Deinen Vorschlag.

Das Zerlegen des Textbox-Textes per Split-Funktion ist naheliegend, wenn man die Zeilen separat vorliegend haben möchte. Damit weiß ich jedoch immer noch nicht, in welcher der Zeilen sich der Cursor aktuell befindet.

Falls Du eine Methode kennst, um die Zeilennummer aus JEDER Cursor-Position heraus (auch Anfang und Ende der Zeilen) zuverlässig zu ermitteln, lass es mich gerne wissen.

Ich vermute jedoch, dass dies ohne die tatsächliche (Umbruchkorrigierte) Cursorposition zu kennen, nicht zuverlässig gelingt.

Ich arbeite weiter die Vorschläge durch, vielleicht ist ja eine Lösung dabei.
Vielen Dank an alle für so viele Antworten.

VG PT
Anzeige
AW: Cursor-Positon in Textbox ermitteln mit Zeilenumbrüchen
05.04.2025 11:25:40
volti
Hallo,

um den Text der Zeile zu ermitteln, in dem der Cursor steht habe ich folgenden Vorschlag...

Private Sub CommandButton1_Click()

Dim sArr() As String, sTxt As String, i As Long

sArr = Split(Me.TextBox1.Value, vbCrLf)
For i = 0 To UBound(sArr)
sTxt = sTxt & sArr(i) & vbLf
If TextBox1.SelStart Len(sTxt) Then
MsgBox sArr(i)
Exit Sub
End If
Next i
End Sub

Gruß
Karl-Heinz
Anzeige
AW: Cursor-Positon in Textbox ermitteln mit Zeilenumbrüchen
05.04.2025 11:30:28
Oberschlumpf
Hi Karl-Heinz,

ich glaub, es wird nicht der Text gesucht, sondern die Position des Cursors in der Textbox...mit eben der Schwierigkeit, dass die Zeilenumbrüche z Bsp in LEN(var) nicht mitgezählt werden, deren Positionen aber für den Fragenden wohl nicht unwichtig sind.

Ciao
Thorsten
Anzeige
AW: Cursor-Positon in Textbox ermitteln mit Zeilenumbrüchen
05.04.2025 17:21:40
Mr.PT
+++ Deine Nachricht vom Sa.05.Apr.2025 09:25

Hallo Karl-Heinz,

vielen Dank für Deine Antwort.
Ich habe eben Deinen Lösungsansatz getestet.

Ergebnis:
Alle Zeilen werden aus jeder Cursor-Position heraus korrekt ermittelt und ausgegeben.
Nach so vielen Versuchen, es über die Cursor-Position zu schaffen, scheint diese Lösung
tatsächlich zu funktionieren.

Ich bin begeistert und werde dies umgehend mit verschiedenen Texten und Zeilenlängen ausprobieren.

Soweit das dann auch bei längeren Texten (ggf. auch mit Zeilenumbrüchen aufgrund der Länge) funktioniert, wäre das die bislang beste und schnellste Lösung.

Ich melde mich mit dem Ergebnis zurück und bedanke mich schon mal jetzt auf das herzlichste bei Dir.

Beste Grüße und bis in Kürze
Mr.PT
Anzeige
AW: Cursor-Positon in Textbox ermitteln mit Zeilenumbrüchen
05.04.2025 11:36:55
Volti
Moin Torsten,

Ja das war die Frage, aber zum Ermitteln des entsprechenden Textes.
So habe ich es verstanden.
Falls dem nicht so sein sollte, kann das mit diesem Ansatz leicht umprogrammiert werden.
Da sollte sich aber der TE zu äußern.

Einen sonnigen Samstag wünscht Dir und allen Lesenden aus Hessen
Karl-Heinz
Anzeige
AW: Cursor-Positon in Textbox ermitteln mit Zeilenumbrüchen
05.04.2025 17:59:39
Mr.PT
Moin an Karl-Heinz (volti) und Thorsten (Oberschlumpf),

nicht ganz so einfach zwischen den Beiträgen hin und herzuspringen und die Antworten zu koordinieren ;)

Der Formuns-Stand ist aktuell: [Sa.05.Apr.2025 15:55]
Durch die Lösung von Karl-Heinz (Beitrag von Sa.05.Apr.2025 09:25) konnte die dahinterliegende Aufgabe (Export der aktuellen Textboxzeile) mit großer Wahrscheinlichkeit gelöst werden. Das hilft mir in der Tat für diesen (zweiten) Teil weiter. Ich würde die Kernanfrage jedoch trotzdem gerne weiter verfolgen, da man die exakte Cursorposition ja durchaus für andere Anwendungsfälle benötigt.

Soweit wieder herzlichen Dank für Euren engagierten Einsatz.
Mal schauen, ob wir die Kernfrage vielleicht auch noch in den Griff bekommen.

Vg Mr.PT
[Sa.05.Apr.2025 15:55]
Anzeige
AW: Cursor-Positon in Textbox ermitteln mit Zeilenumbrüchen
05.04.2025 17:40:02
Mr.PT
+++ Deine Nachricht vom Sa.05.Apr.2025 09:30

Hallo Thorsten,

Zit:
"ich glaub, es wird nicht der Text gesucht, sondern die Position des Cursors in der Textbox...mit eben der Schwierigkeit, dass die Zeilenumbrüche z Bsp in LEN(var) nicht mitgezählt werden, deren Positionen aber für den Fragenden wohl nicht unwichtig sind."

Das war durchaus die Ausgangsfrage und es wäre auch für andere Anwendungsfälle sicher hilfreich, die korrekte Cursor-Position in einer Textbox ermitteln zu können. Darauf aufbauend wollte ich anschließend die aktuelle Textzeile komplett auslesen, was mir ohne die Cursor-Position bislang nicht gelingt.

Karl-Heinz (Volti) scheint jedoch für die "Zeilen"-Ausgabe eine Lösung gefunden zu haben
(Sein Beitrag von Sa.05.Apr.2025 09:25) welche offenbar ohne die genaue Cursor-Position auskommt.
Das wäre dann sozusagen eine schnelle Lösung, ohne das Ursprungsproblem zu lösen.
Tatsächlich hilft es mir weiter, ich würde die Kernanfrage (die Cursor-Pos) jedoch trotzdem gerne weiter verfolgen.

Zunächst lieben Dank an alle - ich gehe weiter durch die Antworten durch
[Sa.05.Apr.2025 15:33] PT
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