Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zellenhöhe mit Zelleninhalt berechnen

Zellenhöhe mit Zelleninhalt berechnen
24.09.2008 17:32:00
Christoph
Hallo,
ich möchte das vba-skript von https://www.herber.de/forum/archiv/1004to1008/t1006435.htm
(ganz unten) gerne etwas anpassen, und zwar so, dass die Zellenhöhe direkt aus dem Zelleninhalt berechnet wird. Hier ist mein Versuch, der aber leider nicht funkti0oniert:

Sub zeilenhöhe()
Dim i As Long
For i = 4 To Cells(Rows.Count, 1).End(xlUp).Row
With Cells(i, 1)
Cells(i, 1).RowHeight = CDbl(Cells(i, 1).Value)
End With
Next i
End Sub


Meine Überlegung war folgende: Cells(i, 1).RowHeight = Cells(i, 1).Value funktioniert offenbar nicht, weil die datentypen nicht zusammenpassen. .Value scheint immer einen string zu liefern, während .rowheight einen numerischen wert ('double'?) erwartet. Deshalb dachte ich: da wandele ich das ganze doch einfach mit CDbl um. Doch leider klappt das nicht.
Ich kenne mich mit VBA leider gar nicht aus und komme trotz intensiven Googelns nicht weiter. Kann mir jemand verraten, wie ich in VBA mit dem Zellenwert rechnen bzw. ihn an .RowHeight übergeben kann?
Gruß,
Christoph

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellenhöhe mit Zelleninhalt berechnen
24.09.2008 18:03:49
Matthias
Hallo Christoph,
dein Code funktioniert bei mir einwandfrei.
Was stehen bei Dir denn für Zahlen in Spalte 1?
Gruß Matthias
AW: Zellenhöhe mit Zelleninhalt berechnen
24.09.2008 18:12:00
fcs
Hallo Christoph,
Value ist immer der Wert der Zelle. Also Zahl = Nummerisch, Text = String. Mit folgender Anpassung geht es:

Sub zeilenhöhe()
Dim i As Long
For i = 4 To Cells(Rows.Count, 1).End(xlUp).Row
With Cells(i, 1)
Rows(i).RowHeight = Cells(i, 1).Value
End With
Next i
End Sub


Gruß
Franz

AW: Zellenhöhe mit Zelleninhalt berechnen
24.09.2008 18:56:00
Christoph
hallo und danke für die schnelle antwort,
ich weiß nicht warum, aber bei mir funktioniert weder der ursprüngliche noch der angepasste code von franz. Wenn ich ihn als Makro ausführe bekomme ich die Fehlermeldung: "Laufzeitfehler 1004: Die RowHeight-Eigenschaft des Range-Objektes kann nicht festgelegt werden." Der Fehler tritt in der Zeile Rows(i).RowHeight = Cells(i, 1).Value auf.
Ich nutze Excel 2003 SP3 (Microsoft Visual Basic 6.5).
Die Werte in der ersten Spalte sind bei mir das Ergebnis einer Formel, aber daran kann es erstmal gar nicht liegen, da der Fehler ja schon auf der Programmierebene auftritt. Wenn ich von Hand Werte eintrage ändert das auch nichts.
Gruß,
Christoph
Anzeige
AW: Zellenhöhe mit Zelleninhalt berechnen
25.09.2008 10:12:00
fcs
Hallo Christoph,
ich hab Excel 2003 SP 2 und da funktionierts, obwhl die With-End With-Konstruktion ein wenig unsinnig ist.
Prüfe ob der Blattschutz für das Tabellenblatt aktiv ist, in dem das Makro ausgeführt werden soll.
Falls ja, dann kommt die beschriebene Fehlermeldung.
Passe das Makro dann wie folgt an oder deaktiviere vor der Ausführung des Makros den Blattschutz.
Gruß
Franz

Sub zeilenhöheB()
Dim i As Long, wks As Worksheet
Set wks = ActiveSheet
With wks
.Unprotect
For i = 4 To .Cells(.Rows.Count, 1).End(xlUp).Row
.Rows(i).RowHeight = .Cells(i, 1).Value
Next i
.Protect
End With
End Sub


Anzeige
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

Anzeige
AW: Zellenhöhe mit Zelleninhalt berechnen
25.09.2008 13:46:00
fcs
Hallo Christoph,
wenn du in einer For-Next-Schleife ggf. Zeilen einfügen willst, dann muss du den Schleifenzähler rückwärts zählen (negative Schrittweite). Dann hat man saubere Kontrolle über die Zeilenposition und das Ende der Schleife.
Ich hab das Makro mal angepasst, dass es Werte >409 auf eine odere mehrere eingefügte Zeilen verteilt.
Gruß
Franz

Sub zeilenhöheB()
Dim i As Long, wks As Worksheet, z As Long
Set wks = ActiveSheet
With wks
For i = .Cells(.Rows.Count, 1).End(xlUp).Row To 4 Step -1
If IsNumeric(.Cells(i, 1).Value) Then
If .Cells(i, 1).Value > 409 Then
z = i
Do
.Cells(z, 1).Offset(1, 0).EntireRow.Insert
.Rows(z).RowHeight = 409
.Cells(z, 1).Offset(1, 0).Value = .Cells(z, 1).Value - 409
.Cells(z, 1).Value = 409
z = z + 1
Loop Until .Cells(z, 1).Value 


Anzeige
AW: Zellenhöhe mit Zelleninhalt berechnen
27.09.2008 21:36:52
Christoph
Vielen Dank Franz, jetzt klappt alles hervorragend! Du hast ja sogar daran gedacht, dem Wert in der ursprünglichen Zeile auf 409 herunterzusetzen damit bei einem neuen Durchlauf nicht noch weitere Zeilen eingefügt werden! Daran hätte ich nicht gedacht und mich irgenwann sehr geärgert!
Gruß,
Christoph

331 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige