Microsoft Excel

Herbers Excel/VBA-Archiv

Zeilenhöhe in Abhängigkeit von Textlänge | Herbers Excel-Forum


Betrifft: Zeilenhöhe in Abhängigkeit von Textlänge von: Peter
Geschrieben am: 13.10.2008 16:27:02

Guten Tag
Ich habe bei zwei verbundenen Zellen wie folgt formatiert:
- Textausrichtung --> Blocksatz
- Textsteuerung: Zeilenumbruch

Diese verbundenen Zellen (hier B20:C20) sind mit dem Namen "Beurteilung1" benannt. Der Inhalt wird durch eine Formel gesteuert. Als Ergebnis steht dort ein Text der zwei oder drei Zeilen beansprucht. Wohl wegen der Zellverbindung (auf die hier nicht verzichtet werden kann) erfolgt die Anpassung der Zeilenhöhe nicht automatisch, auch wenn "optimale Höhe" definiert ist.

Nun möchte ich die Zeilenhöhen-Anpassung mittels eines Ereignismakros steuern und zwar soll die Zeilenhöhe 27.75 betragen, wenn die Textlänge des Ranges "Beurteilung1" kürzer als 200 Zeichen ist, ansonsten soll die Zeilenhöhe 42 betragen.

Wie fange ich die Änderung der Auswertung des Ranges "Beurteilung1" mit einem Ereignismakro am besten ab? In Wirklichkeit muss ich zwei solche Bereiche, also "Beuteilung1" und "Beurteilung2" auswerten. Kann dies im gleichen Ereignismakro geschehen?

Danke für eine Antwort.

Gruss, Peter

  

Betrifft: AW: Zeilenhöhe in Abhängigkeit von Textlänge von: Tino
Geschrieben am: 13.10.2008 16:46:36

Hallo,
so müsste es gehen.

Kommt las Code ins entsprechende Tabellenblatt.

Microsoft Excel Objekt Tabelle1

Option Explicit 
 
Private Sub Worksheet_Calculate() 
    With Application 
     .ScreenUpdating = False 
          With Range("Beurteilung1") 
             If Len(.Value) < 200 Then 
               .RowHeight = 27.75 
             Else 
               .RowHeight = 42 
             End If 
          End With 
     .ScreenUpdating = True 
    End With 
End Sub 
 




Gruß Tino


  

Betrifft: AW: Zeilenhöhe in Abhängigkeit von Textlänge von: Peter
Geschrieben am: 13.10.2008 17:23:11

Hallo Tino
Das klappt so prima. Da ich mehrere Bereiche steuern muss, die in verschiedenen Tabellen drin sind, habe ich Worbkbook_SheetCalculate verwendet.

Danke und freundlicher Gruss, Peter

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
 With Application
     .ScreenUpdating = False
          With Range("Beurteilung1")
             If Len(.Value) < 200 Then
               .RowHeight = 27.75
             Else
               .RowHeight = 42
             End If
          End With
            With Range("Beurteilung2")
             If Len(.Value) < 200 Then
               .RowHeight = 27.75
             Else
               .RowHeight = 42
             End If
          End With
     .ScreenUpdating = True
    End With
End Sub




  

Betrifft: AW: Zeilenhöhe in Abhängigkeit von Textlänge von: Matthias L
Geschrieben am: 13.10.2008 17:01:30

Hallo Peter




https://www.herber.de/bbs/user/55994.xls

Gruß Matthias


  

Betrifft: AW: Zeilenhöhe in Abhängigkeit von Textlänge von: JogyB
Geschrieben am: 13.10.2008 17:09:59

Der folgende Code macht einen Autofit von verbundenen Zellen. Funktioniert meistens, allerdings hatte ich auch schon Fälle, wo es um eine Zeile danebenlag (frag mich nicht wieso, der Fehler durch die Ränder wird eigentlich berücksichtigt).

' Autofit von verbundenen Zellen
Public Sub instantFitHeight()
   
    Dim tempWidth As Double
    Dim zeLLe As Range
    Dim totalWidth As Double
    Dim totalPxWidth As Double
    Dim myCells As Range
    Dim tempHeight As Double
    Dim oldHeight As Double
    
    Application.ScreenUpdating = False
    
    On Error GoTo fitErr
    Set myCells = Selection
    
    With myCells
    ' Macht nur etwas für einzelne Zeile und wenn die Zelle verbunden sind
        If .Rows.Count = 1 And (.WrapText = True Or IsNull(.WrapText)) Then
    ' Speichert alte Zeilehöhe zwischen
            oldHeight = .RowHeight
    ' Speichert die Breite der ersten Zelle zwischen
            tempWidth = .Cells(1).ColumnWidth
    ' Berechnet die Gesamtbreite der verbundenen Zellen
            For Each zeLLe In myCells
                totalWidth = zeLLe.ColumnWidth + totalWidth
                totalPxWidth = zeLLe.Width + totalPxWidth
            Next
    ' Löst den Verbund auf
            .MergeCells = False
    ' weist der ersten Zelle (dort steht der Text) die Gesamtbreite zu
            .Cells(1).ColumnWidth = totalWidth
            
    ' Breitenkorrektur auf Breite in Pixel
            .Cells(1).ColumnWidth = .Cells(1).ColumnWidth + (totalPxWidth - .Cells(1).Width) / ( _
.Cells(1).Width - .Cells(2).Width) * (.Cells(1).ColumnWidth - .Cells(2).ColumnWidth)
            
    ' Führt Autofit durch
            .EntireRow.AutoFit
    ' Speichert die Höhe zwischen
            tempHeight = .RowHeight
    ' Weist der ersten zelle wieder die alte Breite zu
            .Cells(1).ColumnWidth = tempWidth
    ' Verbindet die Zellen wieder
            .MergeCells = True
    ' Weist Höhe zu (geht beim Verbinden wieder verloren)
            .RowHeight = tempHeight
        End If
    End With
    
    On Error GoTo 0
    Application.ScreenUpdating = True
    Exit Sub
    
fitErr:
    On Error Resume Next
    ' Weist der ersten zelle wieder die alte Breite zu
    myCells.Cells(1).ColumnWidth = tempWidth
    ' Verbindet die Zellen wieder
    myCells.MergeCells = True
    ' Weist alte Höhe wieder zu
    myCells.RowHeight = oldHeight
    On Error GoTo 0
    Application.ScreenUpdating = True
End Sub


Gruss, Jogy


  

Betrifft: AW: Zeilenhöhe in Abhängigkeit von Textlänge von: Peter
Geschrieben am: 13.10.2008 17:43:19

Hallo Jogy
Vielen Dank für die Antwort.
Da ich für mein aktuelles Problem eine Lösung habe, werde ich gerne bei anderer Gelegenheit darauf zurückgreifen.

Gruss, Peter