Code von Ehrensberger
Ehrensberger
am 26.7. hast Du mir freundlicherweise den Code unter dem Namen "split35" zukommen lassen.
Bis jetzt hat das auch fast immer funktioniert.
Jetzt habe ich aber folgenden Text bekommen, bei dem unschön die letzten 3 Buchstaben "ren" in die nächste Zelle aufgesplittet werden:
RE 046-011 v. 18.7.2011 Maklergebühren
Da ich den Code immer noch nicht verstehe, kann ich das Problem nicht selbst lösen.
Ich hoffe Du oder jemend anders von den Profis können mir dabei helfen.
Auf jeden Fall vielen Dank im voraus für die Unterstützung.
Hier nochmal die Aufgabenstellung und der Code von J. Ehrensberger:
Ich muss regelmäßig eine Excel-Tabelle mit mehreren Spalten und Zeilen Inhalt in eine CSV-Datei per VBA umwandeln.
Das krieg ich bis auf folgende Herausforderung ohne Probleme hin:
In einer Spalte der Excel-Tabelle darf Text bis zu 140 Stellen eingegeben werden. In der CSV-Datei dürfen aber dafür nur 4 Spalten mit einer maximalen Breite von 35 Stellen vorkommen.
Folgender Beispieltext soll aber so aufgeteilt werden, dass Wörter nicht auseinandergerissen werden, sondern nach einer Leerstelle mit der jeweils neuen Spalte begonnen wird.
"Dies ist ein x-beliebiger Beispieltext, der aus insgesamt 112 Zeichen (inkl. Satzzeichen + Leerstellen) besteht."
In jedem Datensatz steht natürlich jeweils ein anderer Text.
' **********************************************************************
' Modul: Modul3 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit
Sub split35()
Dim rng As Range, rngF As Range
Dim strText As String, strTmp As String
Dim lngPos As Long, lngOffset As Long
Const MAXLENGTH As Long = 35
On Error GoTo ErrExit
Application.ScreenUpdatingfalse
Set rngF = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row) 'Beispiel für Spalte A
For Each rng In rngF
If Len(rng.Text) Then
lngOffset = 0
strText = rng.Text
Do While Len(strText) And lngOffset MAXLENGTH Then
strTmp = Trim$(Left(strText, InStrRev(Left(strText, 35), " ", MAXLENGTH - 1)))
Else
strTmp = Trim(Left(strText, MAXLENGTH))
End If
rng.Offset(0, lngOffset) = strTmp
lngOffset = lngOffset + 1
strText = Trim$(Mid(strText, Len(strTmp) + 1))
Loop
End If
Next
ErrExit:
Application.ScreenUpdating = True
Set rng = Nothing
End Sub