Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
624to628
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
624to628
624to628
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Zeilenumbruch nach 100 Zeichen
21.06.2005 08:11:39
Gregor
Hallo zusammen
Aus diesem Forum habe ich von Galenzo folgende nützliche Prozedur erhalten.
In dieser Schleife wird in einem Text jeweils nach einer bestimmten Anzahl Zeichen (100) ein Zeilenwechseln mit zwei Tabs eingefügt.
Das funktioniert auch bestens. Wie kann ich nun noch erreichen, dass der Zeilenwechsel nach ca. 100 Zeichen nur bei einem Leerschlag vorgenommen wird, damit nicht ganze Wörter getrennt werden?
(Bemerkung = Text)
Const CUT As Integer = 100
Dim i As Integer
For i = 1 To (Len(Bemerkung) \ CUT)
Bemerkung = Left(Bemerkung, (i - 1) + i * CUT) & vbLf & vbTab & vbTab & vbTab & Right(Bemerkung, Len(Bemerkung) - ((i - 1) + i * CUT))
Next i
Danke für eure Unterstützung.
Gregor

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilenumbruch nach 100 Zeichen
21.06.2005 09:19:57
bst
Morgen Gregor,
hier eine etwas ungewöhnliche Lösung mit Regular Expressions ;-)
Ersetzt nach max. 20 Zeichen ein Blank durch einen Excel-Zeilenumbruch (vbLF).
".{1,20} " ist ein beliebiges Zeichen, mindestens 1 Zeichen lang, max. 20 Zeichen lang,
so lang (so viele) wie möglich gefolgt von einem Leerzeichen.
"(.{1,20}) " speichert das Gesuchte (ohne dem Leerzeichen) fürs Ersetzen in $1.

cu, Bernd
--
Option Explicit

Sub x()
    Cells(2, 1) = strREReplace(Cells(1, 1), "(.{1,20}) ", "$1" & vbLf, False, True)
End Sub

Function strREReplace(src As String, pattern As String, ReplaceString As String, _
    Optional IgnoreCase As Boolean = False, _
    Optional GlobalReplace As Boolean = False)

    Dim re As Object
    Set re = CreateObject("vbscript.regexp")
    re.pattern = pattern
    re.IgnoreCase = IgnoreCase
    re.Global = GlobalReplace
    strREReplace = re.replace(src, ReplaceString)
    Set re = Nothing
End Function

Anzeige
AW: Zeilenumbruch nach 100 Zeichen
21.06.2005 09:47:20
MichaV
Hallo Bernd,
na das war ja knapp, was?
Hier mal ein Vergleich der 3 von uns zur Verfügung gestellten Möglichkeiten:

Galenzo
"Die Schwierigkeit li
egt darin, daß wir a
ls Menschen nicht nu
r Probleme lösen, so
ndern auch Probleme
schaffen. (Edward Te
ller)"
bst
"Die Schwierigkeit
liegt darin, daß wir
als Menschen nicht
nur Probleme lösen,
sondern auch
Probleme schaffen.
(Edward
Teller)"
MichaV- trennen davor
"Die Schwierigkeit
liegt darin, daß wir
als Menschen nicht
nur Probleme lösen,
sondern auch Probleme
schaffen. (Edward
Teller)"
MichaV- trennen dahinter
"Die Schwierigkeit liegt
darin, daß wir als Menschen
nicht nur Probleme lösen,
sondern auch Probleme
schaffen. (Edward Teller)"

Deine Variante funzt ja nun wieder ganz anders, das Ergebnis sieht auch etwas anders aus als meine entsprechende "Trennen davor"- Variante. Insbesondere Deine letzte Zeile gibt mir zu denken. Wie kommt das? (Keine Ahnung von regexp)
Gruss- Micha
Anzeige
AW: Zeilenumbruch nach 100 Zeichen
21.06.2005 10:20:00
bst
Hi Micha,
ja knapp war es...
das regexp-Teil trennt nach &gt= 20 Zeichen, das Blank selber wird hierbei nicht mitgezählt.
Entspricht also Deinem "Trennen davor" wenn Du cut = 20 setzt und einen klitzekleinen
Bug korrigierst, i.e. das Leerzeichen dazwischen mitzählst:
If Len(Zeile(a)) + Len(Wörter(i + 1)) + 1 &gt Cut Then
Die letzte Zeile ist einfach ein Bug meines Patterns ...
Am Ende kommt halt (leider) einfach kein Blank mehr :-(
So daß er eben das davor zum Trennen nimmt...
Dieses solltet besser sein: "(.{1,20})( |$)"
Einen schönen Tag noch,
Bernd
Anzeige
ist besser! Danke für die Aufklärung! owT
21.06.2005 10:24:51
MichaV
Gruss- Micha
AW: Zeilenumbruch nach 100 Zeichen
21.06.2005 09:20:01
MichaV
Hallo Gregor,
hier 2 Varianten, einmal bleibt das nicht zu trennende Wort in der Zeile stehen, einmal kommt das nicht zu trennende Wort in die nächste Zeile.


      
Option Explicit
Sub TrennenNachXZeichen()
Dim Wort As String
Dim Cut As Integer
Dim i As Integer
Dim Wörter
Dim Zeile()
Dim a
Cut = 10
Wort = "Die Schwierigkeit liegt darin, daß wir als Menschen nicht nur Probleme lösen, sondern auch Probleme schaffen. (Edward Teller)"
If InStr(Wort, " ") = 0 Then Exit Sub
'trennen danach
ReDim Zeile(0)
Wörter = Split(Wort, " ")
Zeile(0) = Wörter(0)
For i = 1 To UBound(Wörter)
  
If Len(Zeile(a)) > Cut Then
    a = a + 1
    
ReDim Preserve Zeile(a)
    Zeile(a) = Wörter(i)
  
Else
    Zeile(a) = Zeile(a) & " " & Wörter(i)
  
End If
Next i
MsgBox Join(Zeile, vbCrLf)
'trennen davor
ReDim Zeile(0)
a = 0
Wörter = Split(Wort, " ")
Zeile(0) = Wörter(0)
For i = 0 To UBound(Wörter) - 1
  
If Len(Zeile(a)) + Len(Wörter(i + 1)) > Cut Then
    a = a + 1
    
ReDim Preserve Zeile(a)
    Zeile(a) = Wörter(i + 1)
  
Else
    Zeile(a) = Zeile(a) & " " & Wörter(i + 1)
  
End If
Next i
MsgBox Join(Zeile, vbCrLf)
End Sub 


Gruss- Micha
PS: Rückmeldung wäre nett.
Anzeige
Anschlussfrage
21.06.2005 11:04:16
Gregor
Hallo
Vielen herzlichen Dank an beide. Habe beide Varianten in meine Prozedur eingebaut, es funktionieren beide (kann jedoch nicht alle Befehle nachvollziehen, aber es klappt!).
Probleme gibt es, wenn der Text in den Zellen bereits mit einem oder mehreren Zeilenumbrüche formatiert ist/sind. Den Text lese ich in die Variable "Bemerkung" ein:
Bemerkung = Cells(Zeile, Spalte_Bemerkung).Value
Ich versuchte es mit
Bemerkung.WrapText = False
aber das geht nicht
Wie kann ich die allfällig gesetzten Zeilenumbrüche vorher entfernen, damit eure Vorschläge klappen?
Vielen Dank Gregor
Anzeige
AW: Anschlussfrage
21.06.2005 11:16:18
MichaV
Hi Gregor
wenn -wie bei Dir- der Text aus einer Excel- Zelle kommt:
Bemerkung= Application.WorksheetFunction.Substitute(Bemerkung, vbLf, " ")
oder wenn er aus einer Textbox oder Datei kommt:
Bemerkung= Application.WorksheetFunction.Substitute(Bemerkung, vbCrLf, " ")
Gruss- Micha
Danke
21.06.2005 11:55:44
Gregor
Micha
Vielen Dank
Freundliche Grüsse
Gregor

28 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige