Excel VBA Zeilenumbruch einfügen

Guten Tag,
Ich muss eine ziemlich große Excel Datei für einen Import in SAP vorbereiten. Deshalb möchte ich gerne ein kleines Makro erstellen, welches mir die lässtige Arbeit abnimmt und folgendes tut.

Gehe alle Zeilen des Dokumentes durch:
WENN in einer Zeile Text steht DANN:
Gehe den Text in Blöcken aus 62 Zeichen durch:
Ermittle das letzte Leerzeichen in jedem Block und ersetze es durch einen Zeilenumbruch.

Gut, vielleicht noch mal kurz in normallem Deutsch, worum es allgemein geht. In diesem Excel Dokument gibt es viele Zellen mit Fließtext, nach maximal 62 Zeichen soll es einen Zeilenumbruch geben, dieser soll aber keine Wörter in der Mitte trennen. Deshalb die Regel mit dem „Ermittle das letzte Leerzeichen“. Ich kenne mich in VBA nur sehr dürftig aus und komme einfach nicht mehr weiter. Vielleicht könnte jemand meinen Quelltext verfolgständigen. Mir fällt z.B nicht ein wie ich das gesamte Dokument nach Zeilen und Spalten durchgehen kann und wie ich das Leerzeichen durch den Zeilenumbruch ersetzen kann.

Hoffe jemand kann helfen. Schon mal danke an alle die diesen langen Post gelesen haben :smile:

Viele Grüße

Informatics

Hier mein Quelltext:

Dim i As Integer
Dim j As Integer
Dim c As Integer
Dim r As Integer

Dim Buffer As String

c = 1

For i = 1 To 10

For j = 1 To 620 Step 62

Buffer = Mid(Worksheets(„Tabelle1“).Cells(i, 1).Value, j, 62)
While InStr(c, Buffer, " ") > 1
c = InStr(c, Buffer, " ")
Wend
r = c ’ Gebe die Position des letzten Leerzeichens in dem 62 Zeichen Block zurück
c = 1
'Leerzeichen gegen Zeilenumbruch austauschen
Next j

Next i

Hallo,
Habe an dem Programm weitergearbeitet. In der Zeile vor der MessageBox tritt aber noch ein Fehler auf.

Viele Grüße

Inforamtics

Hier der Code:

Dim i As Integer
Dim j As Integer
Dim c As Integer
Dim r As Integer

Dim Buffer As String

c = 1

For i = 1 To 1

For j = 1 To 620 Step 62

Buffer = Mid(Worksheets(„Tabelle1“).Cells(i, 1).Value, j, 62)
While InStr(c, Buffer, " ") > 1
c = InStr(c, Buffer, " ")
Wend
r = c ’ Gebe die Position des letzten Leerzeichens in dem 62 Zeichen Block zurück
c = 1
'Leerzeichen gegen Zeilenumbruch austauschen
Next j
Buffer = Mid(Worksheets(„Tabelle1“).Cells(i, 1).Value, 1, ((j - 62) + r) - 1) & Chr(10) & Mid(Worksheets(„Tabelle1“).Cells(i, 1).Value, ((j - 62) + r) + 2, Len(Worksheets(„Tabelle1“).Cells(i, 1).Value) - ((j - 62) - r) + 2)
MsgBox Buffer

Next i

Hallo Informatics,
vielleicht hilft dir die folgende Sub weiter:

Sub UmbruchText()
 Const Sollbreite = 62

 Dim zz As Range, ii%, pp%
 For Each zz In ActiveSheet.UsedRange
 pp = 1
 Do While pp + Sollbreite 0 And \_
 InStr(pp, zz, Chr(10)) Grüße aus Kamp-Lintfort
Erich Gier

Oder das hier

Sub Makro1()
Dim myCell As Range
Dim start As Integer
Dim ende As Integer
Dim i As Integer
Dim suche As String
Dim inhalt As String
Dim leerzeichen As Integer
start = 1
ende = 62
For Each myCell In Worksheets("Mappe2").UsedRange
 inhalt = myCell.Value
 For i = 1 To Int(Len(inhalt) / 62) + 1
 suche = Mid(inhalt, start, ende)
 leerzeichen = InStrRev(suche, " ")
 If leerzeichen 0 Then
 myCell.Value = Left(myCell.Value, start - 1) & Left(suche, leerzeichen - 1) & Chr(10) & Mid(suche, leerzeichen + 1) & Mid(myCell.Value, ende)
 start = leerzeichen + 1
 ende = start + 62
 Else
 start = start + 63
 ende = start + 62
 End If
 Next
Next
End Sub

Grüße,

Anwar

Hallo Informatics,
eine kleine Korrektur musste ich in meiner Sub noch anbringen. Sie unterbricht jetzt die Arbeit an einer Zelle, wenn darin ein zu langes Wort vorkommt, also kein Leerzeichen für den Umbruch gefunden wird.

Sub UmbruchText()
 Const Sollbreite = 61

 Dim zz As Range, ii%, pp%, ppa%
 For Each zz In ActiveSheet.UsedRange
 pp = 1
 Do While pp + Sollbreite 0 And \_
 InStr(pp, zz, Chr(10)) Grüße aus Kamp-Lintfort
Erich Gier

Buffer = Mid(Worksheets(„Tabelle1“).Cells(i, 1).Value, 1,
((j - 62) + r) - 1) & Chr(10) &
Mid(Worksheets(„Tabelle1“).Cells(i, 1).Value, ((j - 62) + r) +
2, Len(Worksheets(„Tabelle1“).Cells(i, 1).Value) - ((j - 62) -
r) + 2)

Hi
wenn ich das richtig lese (super wurst) hast du bei dem teil

… -((j-62)-r) +2 [ende der zeile] den fehler drinn. dürfte einen negativen wert liefern. versuche es mal mit dem +r

ciao

Hallo Informatics,
ich habe die Lösung noch etwas ausgebaut. Jetzt kann man (per Inputbox) die max. Zeichenzahl pro Zeile eingeben und auch ale Umbrüche wieder beseitigen.

Bisher haben wir zu lange Zeilen innerhalb der jeweiligen Zelle umgebrochen. Eine andere Möglichkeit, die auch praktisch sein kann, besteht darin, für die Fortsetzungstexte neue Excelzeilen zu erzeugen.

Beide Makros sind (mit zwei Beispieltabellen) enthalten in der Mappe
http://www.egier.de/w-w-w/Zeilenumbruch1.xls

Grüße aus Kamp-Lintfort
Erich Gier

Hallo,
Hab eure VBA-Markros eben ausprobiert! Funktzioniert einfach klasse :smile:
Danke für die schnelle Hilfe.

Viele Grüße

Informatics