Eine Excelausleitung mit immer unterschiedlicher Zeilenanzahl und -anordnung soll (u.a.) kleinere Zeilenhöhen erhalten.
Was ich könnte, aber mein Problem nicht löst:
Alle Zeilen auf die Höhe 33 anpassen
Alle Zeilen automatisch anpassen mit .autofit
Bei der ersten Möglichkeit werden auch die Zeilen, die die Höhe 11,25 behalten sollten auch auf 33 gezogen, was schlecht ist.
Bei der zweiten Möglichkeit haben die Zeilen teilweise die Höhe 157 und größer, was noch schlechter ist.
Eine statische Lösung funktioniert nicht, weil die Ausleitung wie gesagt immer unterschiedliche Anordnungen hat.
Gibt es eine Möglichkeit, diese zwei Möglichkeiten zu verbinden, also .autofit && maxRowHeight = 33???
„maxRowHeight“ hab ich schon ausprobiert, das hat nicht geklappt
Hallo Thomas,
verstehe ich dich richtig so: Du möchtest, dass die Zeilen, deren Inhalt in einer (Ausgangs-)Zeilenhöhe von 11,25 nicht genug Platz hat, in der Höhe angepasst werden; und zwar auf max. 33?
falls nicht, so spezifiziere doch bitte:
Woran soll eine Zeile erkennen, dass sie die Höhe 11,25 behalten soll?
Woher soll eine Zeile wissen, dass die Höhe 157 und größer für sie schlecht ist?
Hallo TomtomWa,
was um himmels Willen ist eine ‚Excelausleitung‘ und was hat diese mit VBA?
Nach welchen Kriterien entscheidest du dich für eine Bestimmete Zeilenhöhe? -> Hinterlege die als VBA-Code!
Wenn du keine Kriterien hast, kannst du es auch nicht automatisieren.
Zu deiner ersten Frage:
Die Zeile kann an dem „autofit“-Befehl erkennen, dass 11,25 gut ist, da der Inhalt bei der Spaltenbreite in eine Zeile passt. Das ist sicher, da bei der Ausleitung (die von einer anderen Firma programmiert wird) die Spaltenbreite fest ist und die Zeilenhöhe wohl auf autofit läuft.
Zweite Frage:
Genau das ist die Frage mir schwebt da der Befehl „autofit“ vor mit einer Erweiterung, dass die Zeile maximal die Höhe 33 haben darf.
Gibt es sowas? Oder könnte man das mit UND-Verknüpfungen schaffen?
Woran erkennst du, dass die Zeile nicht höher werden soll?
Ist es immer die Zeile xyz?
Ansonsten würde ich die Zeilen von oben nach unten einzeln abklappern und dann jeweil nur für die gewünschten zeilen ein autofit vornehmen.
Dazu muss ich natürlich so was wie eine Tabelle oder Array haben, aus der die gewünschte /unerwünschte Zeilennummer hervorgeht.
eine Ausleitung ist eine Excel-Tabelle, die automatisch aus Datenbankinformationen erstellt wird.
Wie ich oben in der Antwort schon geschrieben habe, ist diese in der Spaltenbreite festgelegt worden und die Zeilenhöhe läuft mit autofit.
Was meinst du mit „Hinterlege die als VBA-Code“?
Meine Kriterien sind „autofit“ und „maximale Zeilenhöhe 33“, das sollte doch genügen!?
Gibt es eine Möglichkeit, diese zwei Möglichkeiten zu
verbinden, also .autofit && maxRowHeight = 33???
Dies ist so vermutlich nicht direkt machbar.
Mit .Autofit spielt die Breite einer Spalte für die Ermittlung der Höhe eine wichtige Rolle.
Also kommt vermutlich nur ein VBA-Makro in Frage, das zuerst mit .Autofit alles vergrössert und dann alle Zeile durchläuft und die Höhe auf maximal 33 setzt falls sie höher sein sollte.
Die Tabelle, die ich bekomme, hat immer unterschiedliche Anordnungen bei den Zeilen und daher gibt es keine Tabelle, bei welchen Zeilen ich ein autofit vornehmen möchte und bei welchen nicht.
Vielleicht gibt es die Möglichkeit, jede Zeile abzufragen und wenn diese Zeile eine größere Höhe als 33 hat, diese auf 33 anzupassen?
Ich glaube, das würde mein Problem lösen, jetzt müsste man es nur noch programmieren
Kann das jemand schnell machen ? Bei mir würde das jetzt bestimmt ne dreiviertel Stunde dauern
Hallo TomtomWa,
wenn du .autofit ausführst - erhebst du KEINE Ansprüche auf die Formatierung der Tabelle.
Wenn du die Zeilen, die höher als 33 sind, auf 33 setzen willst, mach’ in einer Schleife im VBA.
z.B.
genau das ist die Lösung.
Bzw. um den Prozess nicht unnötig zu verlangsamen wäre die noch schlankere Lösung, das autofit wegzulassen (da die Tabelle ja schon mit autofit rauskommt).
Wie würdest du die Höhe auf maximal 33 setzen?
Wie oben schon geschrieben, würde ich jede Zeile nacheinander abfragen, wie hoch die Zeile ist und dann den Code ausführen, also ca.:
Höhe end if
Höhe >33 --> ActiveSheet.Rows.RowHeight = 33
end if
Wäre das so ungefähr richtig? Also nur von der Logik, nicht vom Code natürlich
Wie oben schon geschrieben, würde ich jede Zeile nacheinander
abfragen, wie hoch die Zeile ist und dann den Code ausführen,
also ca.:
Höhe end if
Höhe >33 --> ActiveSheet.Rows.RowHeight = 33
end if
Wäre das so ungefähr richtig? Also nur von der Logik, nicht vom Code natürlich
Ja, das würde so in etwa passen - eigentlich reicht es alle Zellen der Spalte A abzufragen die im UsedRange liegen und dann entsprechend zu reagieren.
Das könnte dann wo aussehen:
Sub Makro1()
Dim rngzelle As Range
For Each rngzelle In Intersect(ActiveSheet.UsedRange, ActiveSheet.Range("A:A"))
If rngzelle.RowHeight \> 33 Then
rngzelle.RowHeight = 33
End If
Next rngzelle
End Sub
Option Explicit
Sub Zeile\_begrenzen()
Dim I As Double
Dim EndZeile As Double
Dim ZeilenHoch As Double
EndZeile = 23 ' solltest du begrenzen, sonst läuft es so lange
' Max Wert wäre 65536
For I = 1 To EndZeile
ZeilenHoch = Rows(I).RowHeight
If ZeilenHoch \> 33 Then
Rows(I).RowHeight = 33
End If
Next I
End Sub
da habe ich keine Lösung mit den beiden angedachten Möglichkeiten. Ich bin Makrofan und würde in einer kleinen Schleife über alle belegten Zeilen die optimale Zeilenhöhe setzen. Ist diese >33 dann heruntersetzen, ggf. mit Zeilenumbruch etc.
Viel Erfolg
Rainer
Sub maxheight()
Application.ScreenUpdating = False
With ActiveSheet
.UsedRange.Rows.AutoFit
For Each zelle In Intersect(.Range(„A:A“), .UsedRange)
If zelle.RowHeight > 33 Then zelle.RowHeight = 33
Next zelle
End With
Application.ScreenUpdating = True
End Sub
Hallo Thomas,
im Prinzip hast Du bereits das Problem komplett beschrieben.
Du gehst alle Zeilen der Reihe nach durch.
Die Zeilenhöhe wir mit autofit angepasst.
Wenn die Zeilenhöhe größer 33 ist, dann ist sie 33.
Nächste Zeile.
Ende, wenn letzte Zeile erreicht ist.
Für das Beispiel einer Lösung habe ich angenommen, Dein Blatt hat nur 50 Zeilen, und die maximale Zeilenhöhe sei 33.33.
Mit Alt+F11 kommst Du auf die VB-Entwicklungsumgebung. Hier kannst Du ein neues Modul einfügen und die folgende VBA Subroutine einfügen:
’ Subroutine ZeilenHoeheA fuer TomtomWa
Sub ZeilenhoeheA()
’
’ Variablen definieren
Dim LezteZeile As Integer
Dim ZeilenHoehe As Single
Dim MaxHoehe As Single
’
’ Grenzen festlegen
LetzteZeile = 50
MaxHoehe = 33.33
’
’ For To Next Schleife fuer bestimmte Anzahl Wiederholungen
For Zeile = 1 To LetzteZeile
Rows(Zeile).Select
’ erst mal autofit
Selection.Rows.AutoFit
’ Abfrage: wie gross ist denn die Zeilenhoehe
ZeilenHoehe = Rows(Zeile).RowHeight
MsgBox ("Die Zeilenhoehe betraegt: " & ZeilenHoehe)
’ Wenn groesser Grenzwert dann zurueck auf Grenzwert
If ZeilenHoehe > MaxHoehe Then
ZeilenHoehe = MaxHoehe
End If
’ Einstellen der ggf neuen Zeilenhoehe
Rows(Zeile).Select
Selection.RowHeight = ZeilenHoehe
MsgBox ("Die Zeilenhoehe betraegt nun: " & ZeilenHoehe)
Next
End Sub
Mit Alt+F8 kannst Du Makros von der Excelseite aus bequem starten. Wenn Du noch gar keine VBA-Erfahrung hast, gib mir bitte noch mal Bescheid.
Hallo,
leider bin ich kein EXCEL-Spezialist, sodass ich auch bei dem Problem nicht weiterhelfen kann. Hoffendlich findet sich noch ein hilfreicher Mensch.
Viel Glück,Kch. Schilffarth
folgendes Szenario:
Eine Excelausleitung mit immer unterschiedlicher Zeilenanzahl
und -anordnung soll (u.a.) kleinere Zeilenhöhen erhalten.
Was ich könnte, aber mein Problem nicht löst:
Alle Zeilen auf die Höhe 33 anpassen
Alle Zeilen automatisch anpassen mit .autofit
Bei der ersten Möglichkeit werden auch die Zeilen, die die
Höhe 11,25 behalten sollten auch auf 33 gezogen, was schlecht
ist.
Bei der zweiten Möglichkeit haben die Zeilen teilweise die
Höhe 157 und größer, was noch schlechter ist.
Eine statische Lösung funktioniert nicht, weil die Ausleitung
wie gesagt immer unterschiedliche Anordnungen hat.
Gibt es eine Möglichkeit, diese zwei Möglichkeiten zu
verbinden, also .autofit && maxRowHeight = 33???
„maxRowHeight“ hab ich schon ausprobiert, das hat nicht
geklappt
Sub zeilenhoehe()
Dim letzte As Integer
Dim i As Integer
'letzte verwendete Zeile ermitteln
letzte = Tabelle1.Range(„A65536“).End(xlUp).Row
'Schleife starten
For i = 1 To letzte
'Prüfen ob Zeilenhöhe > 33 wenn ja auf 33 setzen
If Cells(i, 1).Rows.RowHeight >= 33 Then
Cells(i, 1).Rows.RowHeight = 33
End If
Next i
End Sub
so wie ich das verstehe, können alle Zeilen mit Autofit bedacht werden und nur die Zeilen mit einer Höhe über 33 sollen auf 33 gesetzt werden.
Das sieht dann z. B. so aus:
Sub HoeheSetzen()
Dim i As Integer
For i = 1 To 15
Worksheets(„Tabelle1“).Rows(i).AutoFit
If Worksheets(„Tabelle1“).Rows(i).Height > 33 Then
Worksheets(„Tabelle1“).Rows(i).heigth = 33
End If
Next i
End Sub
(nur mal so auf die Schnelle - normalerweise würde ich das mit With-EndWith noch schöner machen aber es tut)
Das Ganze könnte man mit einem Button auf dem Tabellenblatt starten und z. B. die Zeilen von/bis übergeben, falls sich der Bereich anderweitig nicht einschränken läßt.
Allerdings ist Einschränken m. E. nicht nötig, da Du ja nur alle Zeile anpasst und die überhohen abschneidest.