Umbruch in Zelle bei Zeichenanzahl...

  • #1
F

freestyler96

Bekanntes Mitglied
Themenersteller
Dabei seit
11.01.2005
Beiträge
114
Reaktionspunkte
0
Ort
Berlin
Hallo an alle,

ich habe wieder mal ein Problem. In einer Excel-Datei erfassen verschiedene Mitarbeiter Bearbeitungsvermerke.
Wie ihr euch sicherlich denken könnt - kümmert es sie reichlich wenig, wie sehr sie die Zelle in der Breite aufblähen (sämtliche Hinweise auf Alt+Enter für einen Umbruch werden fortwährend igonriert). Da die Datei automatisch via Makro ausgelesen wird habe ich pausenlos ewig breite Spalten und muss eine Vielzahl von Zellen manuell nacharbeiten.

--> Ihr ahnt es schon

Kann mir jemand mit einem Code helfen, der die Zeichenlänge einer Zelle abprüft und, wenn der Inhalt länger als 25 Zeichen ist, jeweils nach 25 Zeichen einen Umbruch setzt.

Das Dokument ist nur zur internen Verwendung. Eventualitäten wie Leerzeichen o. ä. müssen nicht berücksichtigt werden.
Eine Prüfung, ob schon eine Umbruch vorliegt und wenn ja das Löschen von Selbigen wäre cool...

Ich bin mit meinem Latein am Ende und dankbar für jeden Vorschlag.


Ciao


Fibo
 
  • #2
Wie soll das Makro die Spalte finden ?

- feste Spaltennummer
- Selektion
- anders

Oder kann es auch einfacher sein ?

- bestimmte Spaltenbreite festlegen
- Zelle formatieren -> Reiter Ausrichtung -> Häkchen in Zeilenumbruch

Gruß Matjes :)
 
  • #3
Hallo Matjes,

wiederum vielen Dank für deine Hilfe. Die einfach Einstellung Umbruch deckt leider nicht alle Eventualitäten ab.

In diesem Fall handelt es sich um die konstante Spalte T (20) ab der 3. Zeile. Der Zeilenumfang ist dynamisch - aber das bekomme ich via ActiveSheet.UsedRange.Rows.Count verarbeitet.

Nochmals Danke


Ciao


Fibo
 
  • #4
Hallo Fibonacci,

zu
ActiveSheet.UsedRange.Rows.Count
Normalerweise gibt dieser Befehl  die Anzahl der Zeilen korrekt zurück. Aber wehe dem, der z.B. die ersten beiden Zeilen nicht befüllt also freiläßt. Dann kommen 2 Zeilen zuwenig heraus.
Korrekt wäre:
ActiveSheet.UsedRange.Row -1 + ActiveSheet.UsedRange.Rows.Count

Und nun noch der Makro entsprechend deinen Angaben.
Code:
Option Explicit

Sub SpalteT_ZeilenumbruchNach25Zeichen()

  Const c_SPALTE_T = 20
  Const c_Z_EERSTEZEILE = 3
  Const c_LF_NACH_X_ZEICHEN = 25
  
  Dim ws As Worksheet
  Dim s_Txt As String, z As Long, u As Long, pos As Long, l_rows As Long
  Dim l_Anz_LF As Long
  
 ->aktuelles Blatt setzen
  Set ws = ActiveSheet
  
 ->letzte Zeile mit Inhalt in Spalte T feststellen
  l_rows = ws.Cells(ws.Rows.Count, c_SPALTE_T).End(xlUp).Row
  
  
 ->Spaltebreite erstmal sehr breit setzen
  ws.Columns(c_SPALTE_T).ColumnWidth = 100
  
  
 ->über alle relevanten Zeilen der Spalte T
  For z = c_Z_EERSTEZEILE To l_rows
   ->Text holen
    s_Txt = ws.Cells(z, c_SPALTE_T).Value
    
   ->Zeilenumbruch aus Text entfernen (LF)
    pos = InStr(1, s_Txt, vbLf)
    Do While pos > 0
      s_Txt = Left(s_Txt, pos - 1) & Right(s_Txt, Len(s_Txt) - pos)
      pos = InStr(pos, s_Txt, vbLf)
    Loop
    
   ->Zeilenumbruch aus Text entfernen (CR)
    pos = InStr(1, s_Txt, vbCr)
    Do While pos > 0
      s_Txt = Left(s_Txt, pos - 1) & Right(s_Txt, Len(s_Txt) - pos)
      pos = InStr(pos, s_Txt, vbCr)
    Loop
  
   ->hat der String Zeichen ?
    If Len(s_Txt) > 0 Then
  
     ->Anzahl der notwendigen Zeilenumbrüche
      l_Anz_LF = (Len(s_Txt) - 1) \ c_LF_NACH_X_ZEICHEN
      
     ->Zeilenumbrüche setzen
      For u = l_Anz_LF To 1 Step -1
       s_Txt = Left(s_Txt, u * c_LF_NACH_X_ZEICHEN) & _
               vbLf & _
               Right(s_Txt, Len(s_Txt) - u * c_LF_NACH_X_ZEICHEN)
      Next
      
     ->Text zurückschreiben
      With ws.Cells(z, c_SPALTE_T)
        .NumberFormat = @-> Zellformat String
        .WrapText = True   -> Umbruch
        .Value = s_Txt     -> Text
      End With
      
    End If
  Next
  
 ->Spaltebreite auf optimalen Wert setzen
  ws.Columns(c_SPALTE_T).AutoFit
  
AUFRAEUMEN:
  Set ws = Nothing
End Sub

Gruß Matjes :)
 
  • #5
Hallo Matjes,

da habe ich ja Glück gehabt, dass die relevanten Datensätze immer in Zeile 1 beginnen und das Layout erst später in der Verarbeitung geändert wird. Andernfalls hätte ich mich mit ActiveSheet.UsedRange.Rows.Count ganz mies selber reingelegt. Aber der Test belegt es ... --> Schwein gehabt --> thx für den Hinweis.

Mit dem Code selber muss ich mich noch beschäftigen. Aber wieder viel neues zum knobeln.

So denn,

Danke für deine Mühe und ein schönes Wochenende....

Ciao


Fibo
 
Thema:

Umbruch in Zelle bei Zeichenanzahl...

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.839
Beiträge
707.962
Mitglieder
51.492
Neuestes Mitglied
Janus36
Oben