Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
940to944
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
940to944
940to944
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Automatische Zellenhöhe bei verbunden Zellen

Automatische Zellenhöhe bei verbunden Zellen
19.01.2008 12:26:45
Paul
Hallo
ich habe in einer Arbeitsmappe mehrere Tabellenblätter, alle gleich gestaltet. Auf jedem Tabellenblatt gibt es mehrere Bereiche, in die ein Anwender immer Text eingeben soll. Diese Bereich sind immer verbundenen Zellen, zb. E7:F 10, und E12:F17 und E 25: E30. Es sind auf allen Tabellenblätter immer die selben Bereich.
Ich hätte gerne, dass sich die Höhe der verbundenen Zellen in allen Bereichen je nach länge des eingegebenen Textes automatisch vergrößert.
Ich habe mit diesem Bsp. gearbeitet https://www.herber.de/bbs/user/49190.xls
, es funktioniert aber leider nicht. Kann mir jemande helfen
Gruß Paul

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Automatische Zellenhöhe bei verbunden Zellen
19.01.2008 12:34:00
Daniel
Hi
verbundene Zellen machen nur Ärger
nimm stattdessen bei der horizontalen Ausrichtung die Option "über Auswahl zentrieren", dann klappst auch mit der automatischen Zeilenhöhe
(Range("xx").entirerow.autofilt)
die Zentireung des Textes musst du halt in Kauf nehmen.
Gruß, Daniel

AW: Automatische Zellenhöhe bei verbunden Zellen
19.01.2008 12:45:08
Paul
Hallo Daniel,
deine Anwort hilf mir leider nicht. Die beschriebenen Tabellen sind mit den verbundenen Zellen vorgegebene und zusätzlich noch mit Fromeln hinterlegt. Ich muss leider mit den Tabellen und den verbundenen Zellen arbeiten und benötige deshalb eine ähnliche Lösung wie in dem beiliegenden link, https://www.herber.de/bbs/user/49190.xls
nur eben für mehrere Bereiche
Gruß Paul

Anzeige
AW: Automatische Zellenhöhe bei verbunden Zellen
19.01.2008 13:01:00
Klaus-Dieter
Hallo Paul,
wer mit verbundenen Zellen arbeitet, muß mit den daraus resultierenden Nachteilen leben. Da gibt es leider keinen Ausweg.
Viele Grüße Klaus-Dieter

Online-Excel

AW: Automatische Zellenhöhe bei verbunden Zellen
19.01.2008 13:15:13
Paul
Hallo Klaus-Dieter,
sehr kooperativer Beitrag, wirklich, trägt wirklich zur Problemlösung bei! Danke.

AW: Automatische Zellenhöhe bei verbunden Zellen
19.01.2008 13:41:55
Erich
Hallo Paul,
probier mal:

Sub Anpasse()
Dim rng As Range
MsgBox Range("E7:F10,E12:F17,E25:E30").Address(0, 0)
For Each rng In Range("E7:F10,E12:F17,E25:E30")
AutoFitMergedCellRowHeight rng
MsgBox rng.Address(0, 0)
Next rng
End Sub
Sub tst()
AutoFitMergedCellRowHeight [e14]
End Sub
'   nach: "Zeilenhöhe bei verbundenen Zellen anpassen"
'   www.herber.de/mailing/137101h.htm
Sub AutoFitMergedCellRowHeight(rngA As Range)
Dim sngMergWid As Single, sngActWid As Single, sngRHiNew As Single
Dim rngC As Range, ii As Integer
If rngA.MergeCells Then
With rngA.MergeArea
If .Rows.Count = 1 And .WrapText = True Then
Application.ScreenUpdating = False
sngActWid = ActiveCell.ColumnWidth
For Each rngC In Selection
sngMergWid = rngC.ColumnWidth + sngMergWid
ii = ii + 1
Next
sngMergWid = sngMergWid + (ii - 1) * 0.71
.MergeCells = False
.Cells(1).ColumnWidth = sngMergWid
.EntireRow.AutoFit
sngRHiNew = .RowHeight
.Cells(1).ColumnWidth = sngActWid
.MergeCells = True
.RowHeight = sngRHiNew
Application.ScreenUpdating = True
End If
End With
End If
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Automatische Zellenhöhe bei verbunden Zellen
19.01.2008 15:47:34
Paul
Hallo Erich,
danke für deinen Vorschlag. Aber leider tut sich in den verbundenen Zellen gernichts. Ich habe das Modul kopiert. Ich kann es auch starten, aber die Zeilenhöhe der verbundenen Zellen ändert sich nicht, wenn ich Text eingebe.
Gruß Paul

AW: Automatische Zellenhöhe bei verbunden Zellen
20.01.2008 12:20:17
Erich
Hallo Paul,
automatisch tut sich da nichts - das waren keine Ereignisprozeduren.
Hier eine Version, bei der sich automatisch etwas tun sollte
(bei Eingabe in einer überwachten Zeile):

in ein normales Modul:
Option Explicit
'   nach: www.herber.de/mailing/137101h.htm
'   "Zeilenhöhe bei verbundenen Zellen anpassen"
Sub ZeilenhoeheVerbundene(lngZeileNr As Long)
'  Parameter ist die Zeilennummer.
'  In einer Zeile kann es mehrere verbundene Zellen geben.
Dim sngHoehe As Single, cc As Integer, rngC As Range
Dim sngActWid As Single, rngM As Range, sngMergWid As Single
Application.ScreenUpdating = False
With Rows(lngZeileNr)
.AutoFit
sngHoehe = .RowHeight    ' Mindesthöhe (insbes. nicht-verbundene Zellen)
End With
For cc = 1 To Cells(lngZeileNr, Columns.Count).End(xlToLeft).Column
If Cells(lngZeileNr, cc) > "" And Cells(lngZeileNr, cc).MergeCells Then
Set rngC = Cells(lngZeileNr, cc)
If Len(rngC) > 1000 Then
MsgBox "Der Text in " & rngC.Address(0, 0) & " hat über 1000 Zeichen !" _
& vbLf & vbLf & "Bitte kürzen!", vbCritical, "ZeilenhoeheVerbundene"
rngC.Select
Exit Sub
End If
With rngC.MergeArea
If .Cells(1).Address = rngC.Address And .WrapText = True Then
sngActWid = rngC.ColumnWidth      ' Merken zum Wiederherstellen
' ---------------------------------------- Gesamtbreite rechnen
For Each rngM In .Cells
sngMergWid = rngM.ColumnWidth + sngMergWid
Next
sngMergWid = sngMergWid + (.Count - 1) * 0.71
' ----------------- Merge aufheben, Zellbreite auf Gesamtbreite
.MergeCells = False
rngC.ColumnWidth = sngMergWid
' ---------------------------------- max. optim. Höhe ermitteln
.EntireRow.AutoFit
sngHoehe = Application.Max(sngHoehe, rngC.Height)
' --------------------------- Breite und Merge wiederherstellen
rngC.ColumnWidth = sngActWid
.MergeCells = True
End If
End With
End If
Next cc
Rows(lngZeileNr).RowHeight = sngHoehe         ' max. optim. Höhe einstellen
Application.ScreenUpdating = True
End Sub
Sub tst()
ZeilenhoeheVerbundene 20
End Sub
in das Modul der Tabelle, auf die der Code wirken soll:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, arrZ, colZ As New Collection, ii As Long
arrZ = Array(13, 20, 28, 15)     ' Nummern der überwachten Zeilen anpassen
For Each rng In Target           ' falls mehrere Zellen auf einmal geändert
If Not IsError(Application.Match(rng.Row, arrZ, 0)) Then
On Error Resume Next
colZ.Add rng.Row, CStr(rng.Row)     ' hier werden Dubletten vermieden
On Error GoTo 0
End If
Next rng
For ii = 1 To colZ.Count
ZeilenhoeheVerbundene colZ(ii) ' Höhen der gesammelten Zeilen optimieren
Next ii
Set colZ = New Collection
End Sub
' eine der möglichen Alternativen:
Private Sub xWorksheet_Change(ByVal Target As Range)
Dim rng As Range, colZ As New Collection, ii As Long
For Each rng In Target           ' falls mehrere Zellen auf einmal geändert
If (rng.Row >= 15 And rng.Row = 35 And rng.Row 

Und hier eine Beispielmappe dazu:
https://www.herber.de/bbs/user/49211.xls
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Automatische Zellenhöhe bei verbunden Zellen
19.01.2008 18:08:25
Daniel
Hi
in der Datei, die du hochgeladen hast, funktioniert es doch einwandfrei.
sobald ich ein die verbundenen Eingabezellen einen Text eingebe, startet das Makro und stellt die Zeilenhöhe passend ein.
Wo also ist das Problem ?
Naja, zumindest funktioniert es in der Zelle D13
in den Anderen Eingabezellen funktioniert es nicht, weil dein Code nur für diese eine Zelle geschrieben ist.
das fängt schon bei der Prüfung an:

If Target.Address = "$D$13" Or Target.Address = "$D$13:$Y$13" Then


hier müsstest du dir eine andere Prüfung einfallen lassen, die alle eingabezellen berücksichtigt und der Rest vom Makro aus ausgeführt wird.
eine mögliche einfache Prüfung wäre in deinem Fall die Zellfarbe, da alle Eingabezellen eine vom Rest abweichende Zellfarbe haben:
Ersetze die o.g. Programmzeile durch diese:


If Target(1).Interior.ColorIndex = 36 Then


Außerdem musst du überall im Code Range("D13") durch Target(1) und Range("D14") durch Target(1).offset(1,0) ersetzen, um den Code für alle Eingabebereiche wirksam zu machen.
Gruß, Daniel

Anzeige
AW: Automatische Zellenhöhe bei verbunden Zellen
20.01.2008 12:29:00
Paul
Hallo Daniel,
vielen Dank für deine Unterstützung. Jetzt wendet er den Schritt bei allen verbundenen Zellen an, aber nicht mehr in D13. Was habe ich falsch gemacht? Hier mein neuer Code:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'   Unter Verwendung von Excel-Beispiel Nr.137101,
'   "Zeilenhöhe bei verbundenen Zellen anpassen"
'   von Hans W. Herber, 53567 Asbach,
'   erweitert und individuell angepasst von Volker Croll
'   September 2004 © CrollTools
'   Postfach 1332, 71656 Vaihingen
'   Tel: 0 70 42 / 8 19 88 27
'   Fax: 0 70 42 / 8 19 88 28
'   www.crolltools.de
Dim CurrentRowHeight As Single, MergedCellRgWidth As Single
Dim CurrCell As Range
Dim ActiveCellWidth As Single, PossNewRowHeight As Single
Dim iX As Integer
'   Target.Address wird bei verbundenen Zellen von den verschiedenen Excel-Versionen
'   unterschiedlich ausgegeben, deshalb eine Or-Bedingung:
If Target(1).Interior.ColorIndex = 36 Then
'       damit der Cursor - unabhaengig von den Excel-Grundeinstelungen - nach Druecken der
'       ENTER-Taste in die Zelle D14 springt (Berechnung von Hans setzt dies voraus!):
Target(1).Offset(1, 0).Select
If Target(1).MergeCells Then
'           Bei sehr langen Text berechnet Excel (auch bei nicht verbundenen Zellen!) die
'           optimale Zeilehoehe (AutoFit) nicht mehr richtig, deshalb Pruefung der Textlaenge:
If Len(Target(1)) > 1000 Then
MsgBox "Der von Ihnen eingegebene Text umfasst mehr als 1000 Zeichen !" & Chr( _
10) & _
"Bitte kürzen Sie ihn entsprechend !", 48, "Text zu lang !"
'               direkte Rueckkehr zur falsch ausgefuellten Zelle. Damit der User aber nicht
'               komplett neu eingeben muss, wird der zulange Text trotzdem nicht geloescht:
Target(1).Select
Exit Sub
End If
Application.ScreenUpdating = False
'           Die Zeilenhoehe ist von Excel begrenzt auf 409. Durch eine Veraenderung der
'           Schriftgroesse koennte diese Grenze ueberschritten werden. Ausserdem wuerde der
'           Ausdruck dann nicht mehr auf eine Seite passen. Somit wird die Schriftgroesse
'           wieder zurueckgesetzt. Vorgenommene Formatierungen (fett, unterstrichen o.a.)
'           koennen durchaus gewollt und sinnvoll sein, werden also nicht zurueckgesetzt:
With Target(1).Font
.Name = "Arial"
.Size = 8.5
End With
Target(1).RowHeight = 21
With Target(1).MergeArea
If .Rows.Count = 1 And .WrapText = True Then
CurrentRowHeight = .RowHeight
ActiveCellWidth = Target(1).ColumnWidth
For Each CurrCell In Selection
MergedCellRgWidth = CurrCell.ColumnWidth + _
MergedCellRgWidth
iX = iX + 1
Next
MergedCellRgWidth = MergedCellRgWidth + (iX - 1) * 0.71
.MergeCells = False
.Cells(1).ColumnWidth = MergedCellRgWidth
.EntireRow.AutoFit
PossNewRowHeight = .RowHeight
.Cells(1).ColumnWidth = ActiveCellWidth
.MergeCells = True
.RowHeight = IIf(CurrentRowHeight > PossNewRowHeight, _
CurrentRowHeight, PossNewRowHeight)
End If
End With
Application.ScreenUpdating = True
End If
End If
End Sub



Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
'   Falls die Meldung ueber eine zulange Texteingabe in D13 ignoriert wurde, wird der User
'   ueber diesen Fehler informiert, wenn er eine andere Eingabezelle auswaehlt; aber -->
'   der Inhalt von D13 darf nur geprueft werden, wenn die Markierung nicht in Zeile 13 oder
'   Zeile 14 steht (fuehrt sonst unmittelbar nach einer zu langen Eingabe in D13 zu einer
'   wechselseitigen Ausloesung von Worksheet_Change und Worksheet_SelectionChange):
If Target.Row = "13" Or Target.Row = "14" Then
Exit Sub
End If
If Len(Target(1)) > 1000 Then
MsgBox "Der Text umfasst mehr als 1000 Zeichen !" & Chr(10) & _
"Bitte kürzen Sie ihn entsprechend !", 48, "Text ist zu lang !"
Target(1).Select
Exit Sub
End If
'   Wird ein Text in D13 ueber die Entf-Taste geloescht, ist dies fuer Excel kein
'   Worksheet_Change Ereignis! Deshalb wird beim Auswaehlen einer beliebigen Zelle geprueft,
'   ob D13 leer ist und die Zeilenhoehe ungleich 21 ist; ggf. wird zurueckgesetzt:
If Target(1) = "" And Rows("13").RowHeight  21 Then
Rows("13").RowHeight = 21
End If
End Sub


Anzeige
AW: Automatische Zellenhöhe bei verbunden Zellen
20.01.2008 15:32:46
Paul
Hallo Daniel,
funktioniert doch, war wohl nur ein Anwendungsfehler. Vielen Dank.

36 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige