AW: Zellenhöhe mit Zelleninhalt berechnen
25.09.2008 13:17:08
Christoph
Hallo Franz,
das ist echt super! vielen, vielen dank! Auch für den schöneren code mit "if"! Es lag zwar nicht am Blattschutz, aber ich hab's jetzt raus: es gab in der ersten spalte eine zelle, die keine zahl sondern text enthielt... Das konnte natürlich nicht gut gehen.
Es wäre also sinnvoll, eine Bedingung einzubauen, die prüft, ob der Zellinhalt numerisch ist. _
Das scheint mit
If IsNumeric(.Cells(i, 1).Value) Then .Rows(i).RowHeight = .Cells(i, 1).Value
zu funktionieren. Schön!
Es gibt aber noch ein weiteres Problem: Excel akzeptiert keine Zeilenhöhe über 409 (pixel). Es muss also eine weitere if-Bedingung her. Das krieg ich irgendwie nicht gebacken. Hier mein Versuch:
If IsNumeric(.Cells(i, 1).Value) Then ElseIf .Cells(i, 1).Value > 409 Then .Rows(i).RowHeight = 409 Else .Rows(i).RowHeight = .Cells(i, 1).Value
Statt die 409plus-Zellen auf den Maximalwert zu setzen, würde ich am liebsten einen Schritt weitergehen und außerdem an der Stelle eine neue Zeile einfügen, die in der ersten Spalte den Ursprünglichen Zellenwert - 409 stehen hat:
Also: ActiveCell.Offset(1).EntireRow.Insert dürfte die neue Zeile erzeugen. Allerdings hat die dannAber wie berechne den Wert und wie schreibe ich ihn in die neue Zeile? Schließlich frage ich mich auch noch, ob diese neu erzeugte Zeile dann eigentlich in der nächsten Runde der For-To-Schleife berücksichtigt wird (oder erst beim nächsten Start des Makros). Ersteres wäre natürlich ideal, weil dann große Werte automatisch in "x mal 409 + y" aufgeteilt würden.
Also, hier nochmal in gänze der (funktionsuntüchtige) Code, soweit ich ihn jetzt hab:
Sub zeilenhöheB()
Dim i As Long, wks As Worksheet
Set wks = ActiveSheet
With wks
For i = 4 To .Cells(.Rows.Count, 1).End(xlUp).Row
If IsNumeric(.Cells(i, 1).Value) Then
If .Cells(i, 1).Value > 409 Then
ActiveCell.Offset(1).EntireRow.Insert
.Rows(i).RowHeight = 409
'setze .Cells(i+1, 1).Value = .Cells(i+1, 1).Value - 409
Else: .Rows(i).RowHeight = .Cells(i, 1).Value
End If
End If
Next i
End With
End Sub
Irgendwie klappt das nicht, selbst ohne die Berechnung der Zeilhenhöhe für die neue Zeile...
Gruß,
Christoph