Textauswahl in der TextBox bis zum vorigen und nächsten Leerzeichen ergänzen
#1
Liebes Forum,

ich habe mich gestern reichlich abgemüht einen Code zu schreiben, der mir die Textauswahl in einer Textbox erleichtern soll. Meine Idee ist dabei, das der ausgewählte und markierte
Text in einer auf Mulitline eingestellten Textbox jeweils links und rechts dieser Auswahl bis zum vorigen bzw. nächsten Leerzeichen der betreffenden Wörter ergänzt wird.

Hier mein funktionierender viel zu stümperhafter Code:


Code:
Sub CommandButton1_Click()
'Wortmarkierung ergänzen bis zum vorigen und nächsten Leerzeichen
Dim str As String, start As Integer, ende As Integer, zeile As Integer, länge As Integer

With TextBox1
.SetFocus
str = .Text
zeile = .CurLine
start = .selstart + zeile
länge = .sellength
ende = start + länge
End With

'Ersetzen
str = Replace(str, " vbNewline", " µ ")

'Markierungsende berechnen
Do While Not Mid(str, ende, 1) = " " And Not Mid(str, ende, 1) = Chr(10) And Not Mid(str, ende, 1) = Chr(13)
ende = ende + 1
If ende > Len(str) - 1 Then Exit Do
Loop

'Markierungsanfang berechnen
Do While Not Mid(str, start, 1) = " " And Not Mid(str, start, 1) = Chr(10) And Not Mid(str, start, 1) = Chr(13)
start = start - 1
If start = 0 Then Exit Do
Loop

With TextBox1
.SetFocus
.selstart = start - zeile
.sellength = ende - start - 1
End With

End Sub


Wie bekommt man so etwas besser hin?
Antwortento top
#2
Hallöchen,

Du könntest die Exit Do Bedingungen noch im Schleifenstart verarbeiten. Entweder anders rum mit AND oder mit OR und dann um die bisherigen Bedingungen Klammern.
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
Antwortento top
#3
Code:
Private Sub UserForm_Click()
  With TextBox1
    c00 = .Text + " "
    y = InStr(Mid(c00, .SelStart), " ") + .SelStart - 2
    .SelStart = InStrRev(Left(c00, .SelStart), " ")
    .SelLength = y - .SelStart
  End With
End Sub
Antwortento top
#4
@snb Hallo snb,

danke für Deine Bemühungen, aber der Code von Dir funktioniert leider noch nicht. Ich habe vergessen zu erwähnen, dass der in der TextBox stehende Text im Multiline-Modus vorliegt und sich über mehrere Zeilen erstreckt.
Daraus resultiert für die Programmierung folgendes:

1. Am Anfang muss immer folgendes stehen

With TextBox1.
.SetFocus  'ohne den Focus geht gar nichts
 Code
End With

2. die Schwierigkeiten mit vbNewline, bestehend aus Chr(13) & Chr(10), d.h. links von dem ersten Wort in einer neuen Zeile und rechts vom letzten Wort in dieser Zeile steht kein Leerzeichen.
Du hattest ja schon richtigerweise ein Leerzeichen an den Text angehängt. Diese Fälle müssen alle berücksichtigt werden. Um diese Leerzeichen zu finden habe ich in meinem geposteten Code die Replace Funktion

Code:
str = Replace(str, " vbNewline", " µ ")
angwandt. Wie gesagt, mein geposteter Code funktioniert perfekt, ist leider aber sehr lang. Dann habe ich ebenfalls wie du, mit InStr Alternativcode entwickelt. Der ist zwar wesentlich kürzer, funktioniert aber
nicht so gut und liefert an der einen oder anderen Stelle falsche Ergebnisse.  Vielleicht bekommst du dass ja besser hin.
Antwortento top
#5
Hallo,
(04.07.2016, 10:14)VBATartar schrieb: Hier mein funktionierender viel zu stümperhafter Code:
...
Wie bekommt man so etwas besser hin?

Profis schützen sowas, damit es keiner sehen kann. Big Grin

Gruß Uwe
Antwortento top
#6
Es gibt nur ein .selstart wenn Textbox1 die Focus hat. 'Setfocus' ist darum völlig redundant.

Meine Code gibt das erwünschte Ergebnis.

Zeig mal ein Beispiel wo das nicht so ist.
Antwortento top
#7
@Danke Uwe
für Deinen Kommentar, wenn du das als VBA Profi sagst bedeutet mir das was.
Antwortento top
#8
@SNB
anbei die Beispieldateien mit Beispielsätzen.
Wähle doch bitte einfach mal mit dem Cursor   VBA-Excel  aus und klicke dann die entsprechenden Schalter / Userform. Dann wirst
du den Unterschied sehen.


Angehängte Dateien
.xls   Single SNB.xls (Größe: 32,5 KB / Downloads: 0)
.xls   Single VBA Tartar.xls (Größe: 33,5 KB / Downloads: 1)
.xls   SNB + VBATartar.xls (Größe: 34,5 KB / Downloads: 2)
Antwortento top
#9
Hallo Leute,
mich interessiert diese Textauswahl ebenfalls. Doch leider hat der Code einen sehr starken Mangel. Habe ich einen sehr langen
Satz der innerhalb der TextBox gebrochen wird, ist der Code völlig unbrauchbar. Schwierig dabei ist, dass sich bei dem Satzumbruch
alle Parameter verschieben. Es gibt mehr Zeilen in der Textbox, man verliert die Orientierungspunkte. Hat jemand eine Idee wie
man so etwas dennoch hinbekommt?
Antwortento top
#10
Hallöchen,

Welcher Code?
Wie lang ist Dein Satz? Kannst ihn ja mal posten.
Welche Parameter verschieben sich?
Welche Orientierungspunkte?
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste