Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1912to1916
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Len kommt bei CR/LF in schleudern

Len kommt bei CR/LF in schleudern
12.01.2023 12:38:16
Eddie
Hallo,
ich bin gerade etwas ratlos.
Ich habe das Ziel, in einen vorhandenen Text, an der Cursor-Position einer Textbox, ein Wort einzufügen.
Meine Funktion funktioniert problemlos, bis im vorderen Textfeld ein (Alt-Enter bzw. Strg-Enter) gemacht wird.
Ich habe gesehen, dass durch Alt-Enter bzw. Strg-Enter ein chr(10) und chr(13) eingefügt wird.
Ein Strg-Enter führt bei meiner Funktion dazu, das der eingefügte Text, ein Zeichen zu früh landet. Bei zwei Strg-Enter zwei Zeichen zu früh.
Ich würde das schon irgendwie hin-gebastelt bekommen, aber vielleicht hat jemand eine elegante Lösung parat.
CursorPosi = TextboxObject.SelStart
TextVorne = Left(TextboxObject, CursorPosi)
TextHinten = Right(TextboxObject, Len(TextboxObject) - CursorPosi)
TextboxObject = TextVorne & TextAdd & TextHinten
Der Einsatz von Alt-Enter (in der Excel-Quell-Zelle) bzw. Strg-Enter(in der Textbox) sollen beliebig möglich sein
Grüße

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Len kommt bei CR/LF in schleudern
12.01.2023 12:50:40
Rudi
Hallo,
versuchs mal mit
TextHinten = MID(TextboxObject, CursorPosi+1)
Gruß
Rudi
AW: Len kommt bei CR/LF in schleudern
12.01.2023 13:58:04
Eddie
Dabei kommt exakt das gleiche heraus.
Geht wenn kein CR/LF
Wenn CR/LF vorher steht, wird der Text um 1 nach links versetzt eingefügt
AW: Len kommt bei CR/LF in schleudern
12.01.2023 13:48:55
Der
Hallo,
warum ermittelst Du nicht die Anzahl der Zeichen 10 und 13 im Text und addierst die einfach dazu?

anz = Len(Textobject) - Len(Replace(Replace(Textobject, vbCr, ""), vbLf, ""))
CursorPosi = TextboxObject.SelStart + anz
Gruß
Michael
AW: Len kommt bei CR/LF in schleudern
12.01.2023 14:12:40
onur
Und wenn der Text aus 3 Zeilen besteht und er am Anfang der zweiten landen will?
Anzeige
AW: Len kommt bei CR/LF in schleudern
12.01.2023 14:26:26
Eddie
Hallo Michael,
diese Lösung ist nicht ganz richtig, aber es ist eine gute Grundlage um weiter zu kommen.
Vorher wurde mit jedem Zeilenvorschub, der eingesetzte Text um 1 nach links verschoben
Jetzt wird, mit jedem Zeilenvorschub, der eingesetzte Text um 1 nach rechts verschoben
AW: Len kommt bei CR/LF in schleudern
12.01.2023 15:07:10
Der
Hallo,
hm, ja, onur hatte schon recht. Aber ich glaube der Ansatz war schon ganz gut. Nachdem es immer zeichen 10 und 13 zusammen sind könnte man es so machen:

CursorPosi = TextboxObject.SelStart
anz = (Len(Left(TextboxObject.Text, CursorPosi)) - Len(Replace(Left(TextboxObject.Text, CursorPosi), vbCrLf, ""))) / 2
TextVorne = Left(TextboxObject.Text, CursorPosi + anz)
TextHinten = Mid(TextboxObject.Text, CursorPosi + anz + 1)
TextboxObject.Text = TextVorne & TextAdd & TextHinten

Anzeige
AW: Noch 'ne Idee
12.01.2023 14:22:43
volti
Hallo Eddie,
ich habe es nicht ausprobiert, aber ersetz doch einfach mal den Textumbruch. Ggf. reicht zum Umbruch ja auch nur der Linefeed.
Nur Positionsermittlung:
CursorPosi = Replace(TextboxObject.SelStart, vbCrLf, vbLf)
oder
Code:


Sub Test() TextboxObject = Replace(TextboxObject, vbCr, vbLf) CursorPosi = TextboxObject.SelStart TextVorne = Left(TextboxObject, CursorPosi) TextHinten = Right(TextboxObject, Len(TextboxObject) - CursorPosi) TextboxObject = TextVorne & TextAdd & TextHinten ' TextboxObject = replace(TextVorne & TextAdd & TextHinten, vblf,vbcrlf) End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Noch 'ne Idee
12.01.2023 14:39:46
Eddie
Hallo Karl-Heinz,
ich hätte das noch deutlicher schreiben sollen.
Ein setzen von Alt-Enter oder Strg-Enter fügt jeweils ein chr(13) UND ein chr(10) ein.
Ich kann darüber nicht entscheiden, nur das eine oder andere einzusetzen.
Ich hätte auch erwartet, das nur eines von beiden gesetzt wird.
Auch ist zu berücksichtigen, dass CR/LF den Fehler nur dann produziert, wenn der CR/LF im TextVorn steht. Steht er im TextHinten, entsteht der Fehler nicht
LG
AW: Noch 'ne Idee
12.01.2023 15:07:42
volti
Hallo Eddie,
das Setzen der Textbox bleibt hier unbenommen. Es geht hier nur um die Umwandlung zweier Zeichen in ein Zeichen zwecks Positionsprüfung und/oder Verarbeitung.
Daniels Ausführung zum Thema ist daher auch meine Empfehlung.
Gruß
KH
Anzeige
AW: Noch 'ne Idee
12.01.2023 14:42:23
Daniel
Gleiche Idee hatte ich auch, nur darfst du den Text nicht in die Textbox zurückschreiben, nachdem du die CR entfernt hast, weil VBA diese dann in der Textbox automatisch wieder hinzufügt.
Mach das in einer Variablen, dann sollte es gehen
Gruß Daniel
AW: Len kommt bei CR/LF in schleudern
12.01.2023 14:37:47
Daniel
Hi
Das Problem ist, dass im Text der Zeilenumbruch aus zwei Zeichen besteht (CR + LF), die Funktion SelPos diesen jedoch nur als ein Zeichen zählt.
dadurch kommt dann das Missverhältnis von SelPos und tatsächlicher Textposition und das wird immer größer, je weiter unten die Zeile ist, in der du einfügen willst.
ein möglicher Workaround:
1. lies den Textboxtext in eine Stringvariable
2. ersetze hier vbCR durch nichts, so dass nur vbLF stehen bleibt
3. teile jetzt die Textvariable an dem SelPos-Wert, den du in der Textbox ermittelt hast und füge dort den neuen Text ein.
4. schreibe dann den Gesamttext wieder in die Textbox.
VBA wird beim Einfügen in die Textbox die fehlenden CR wieder automatisch vor den LF ergänzen.

txt = Replace(TextboxObject.Text, vbCr, "")
CursorPosi = TextboxObject.SelStart
TextVorne = Left(txt, CursorPosi)
TextHinten = Mid(txt, CursorPosi + 1)
TextboxObject = TextVorne & TextAdd & TextHinten
Gruß Daniel
Anzeige
AW: Len kommt bei CR/LF in schleudern
12.01.2023 15:46:19
onur
Du musst die Anzahl der CR´s im text VOR dem Cursor (also VorText) zählen und diese zur Cursorposition addieren. Und anhand dessen TextVor neu berechnen:

    CursorPosi = TextBox1.SelStart
TextVorne = Left(TextBox1, CursorPosi)
CursorPosi = CursorPosi + Len(TextVorne) - Len(Replace(TextVorne, vbCr, ""))
TextVorne = Left(TextBox1, CursorPosi)

AW: Len kommt bei CR/LF in schleudern
12.01.2023 16:05:07
Daniel
Idee ist richtig, hat aber einen kleinen Fehler.
SelPos ist prinzipiell zu klein, weil es jeden Umbruch nur als ein Zeichen zählt und nichtvalszwei, damit liegt es zu weit vorne.
Wenn du jetzt direkt vor einem Umbruch einfügen willst kann es also passieren, dass dieser Umbruch nicht berücksichtigt wird, weil der SelPos-Wert davor liegt.
Gruß Daniel
Anzeige
AW: Len kommt bei CR/LF in schleudern
12.01.2023 16:25:11
Rudi
Hallo,

Private Sub CommandButton1_Click()
'XX an SelPosi
Dim t As String
With TextBox1
t = Replace(.Value, vbCr, "")
.Value = Left(t, .SelStart) & "XX" & Mid(t, .SelStart + 1)
End With
End Sub
Gruß
Rudi

15 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige