habe das Problem, dass ich verbundene Zellen gerne dynamisch für
mehrere User in Ihrer Größe anpassen
möchte. Dies sollte jedoch nur in der HÖHE der Zelle passieren, nicht
in die Breite.
Ich habe folgendes in der VBA der Arbeitsmappe eingetragen:
Private Sub Worksheet_Change(ByVal Target As Range)
Target.EntireRow.AutoFit
Target.EntireColumn.AutoFit '/Optional/
End Sub
Die variable Zellanpassung funktioniert nun bei einzelnen, nicht
verbundenen Zellen.
Hoffe Ihr könnt mir helfen.
Michel
Das ist genauso bei händischem Arbeiten in Excel. Und selbst da haut es -
sogar bei einer einzelnen Zelle - nicht garantiert genau hin. Grund: Das
Windows-GUI, welches mit verschiedenen Ausgaben und Auflösungen fertig
werden muss (es gibt also kein WYSIWYG, nur bei speziellen Profiprogrammen,
die darauf angewiesen sind, wie Fotosatz).
Diese Ungenauigkeit kannst Du Dir nun zunutze machen. Ermittle über Deine
Zellinhalte (etwa: Inhaltslänge bei gegebenem Font/Schriftgröße) mit Formeln
eine Sollhöhe und weise diese der Zeile dann zu. Es bietet sich dabei an,
eine gewisse Reserve einzubauen.
Mit einer fixbreiten Schrift, die Du dann allerdings auch verwenden musst,
fällt diese Berechnung übrigens viel leichter.
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2
<michel....@evt-gmbh.de> schrieb:
> habe das Problem, dass ich verbundene Zellen gerne dynamisch für
> mehrere User in Ihrer Größe anpassen
> möchte. Dies sollte jedoch nur in der HÖHE der Zelle passieren, nicht
> in die Breite.
hebe den Zellverbund auf, passe die Zeilenhöhe der ersten Zelle automatisch an.
Ermittel dann diese Zeilenhöhe und verbinde die Zellen wieder.
Die automatisierte Zeilenhöhe wird dann auf die Zeilen des Zellverbundes aufgeteilt.
Diesen Vorgang kannst du auch mit VBA automatisieren:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim dblHeight As Double
With Target.MergeArea
' Zellverbund aufheben
.UnMerge
' 1. Zelle automatische Zeilenhöhe
.Cells(1).EntireRow.AutoFit
' Zeilenhöhe speichern
dblHeight = .Cells(1).RowHeight
' Zellen verbinden
.Merge
' Zeilenhöhe auf alle Zeilen des Zellverbundes aufteilen
.EntireRow.RowHeight = dblHeight / .Count
End With
End Sub
Mit freundlichen Grüssen
Melanie Breden
--
- Microsoft MVP für Excel -
www.melanie-breden.de
Ribbon-Programmierung für Office 2007 http://tinyurl.com/59awla
vielen dank für die schnelle Beantwortung.
habe deine "Programmierung" eingebunden. Leider wird die Zeilenhöhe
nicht komplett
an den INhalt der Zelle angepasst. So wird immer ein Teil
abgeschnitten.
Hast Du vielleicht eine Idee warum?
Vielen Dank im Voraus für Deine Antwort
Michel
Baue eine Reserve ein, wie von mir beschrieben. Denn die genauen Höhen
erreichst Du eh nie (für alle Fälle).
<michel....@evt-gmbh.de> schrieb:
> habe deine "Programmierung" eingebunden. Leider wird die Zeilenhöhe
> nicht komplett an den INhalt der Zelle angepasst. So wird immer ein Teil
> abgeschnitten.
Aus der Ferne kann ich mir die Ursache nicht erklären.
Kannst du eine Beispieldatei zum Download bereitstellen?
Am Tue, 21 Apr 2009 01:34:27 -0700 (PDT) schrieb
michel....@evt-gmbh.de:
ich hatte das Problem dadurch gelöst, dass ich per Makro die Texte
ausgelesen habe und in einer Dummy-Tabelle eingetragen hatte. Danach
habe ich die Zellhöhe der Dummy-Tabelle jewels ausgelesen und damit die
Originaltabelle formatiert. Funktioniert bei mir einwandfrei.
Bedingung ist natürlich, dass die Zelle der Dummy-Tabelle genauso breit
ist wie die verbundenen Zellen der Original-Tabelle.
Hier einmal der Code:
for i = 1 to 100
'Für die Zeilenhöhenberechnung wird ein Temp-Blatt eingefügt
'und die Spaltenbreite angeglichen
Worksheets.Add , ActiveSheet
Columns("A:A").ColumnWidth = Sheets(1).Columns("H:H").ColumnWidth +
Sheets(1).Columns("I:I").ColumnWidth
'Text in Tabelle 2 übertragen
Sheets(2).Range("A1").Formula = Cells(i - 1, 8).Formula
'Zeilenhöhe vergleichen und ggf. angleichen
If Sheets(2).Range("A1").RowHeight > Cells(i - 1, 8).RowHeight Then
With Cells(i - 1, 8)
.RowHeight = Sheets(2).Range("A1").RowHeight
End With
End If
next
Vielleicht hilft Dir das weiter.
Gruß Ahmed
--
Antworten bitte nur in der Newsgroup.
WinXP Prof. / MS-Office 2003 Prof.
Hi,
wie stelle ich Dir was zum Download bereit.
Die Excel hat nur 160KB.
kann ich dir diese irgendwie schicken?
Grüße
Michel
<michel....@evt-gmbh.de> schrieb:
> wie stelle ich Dir was zum Download bereit.
> Die Excel hat nur 160KB.
> kann ich dir diese irgendwie schicken?
im Internet gibt es verschiedene Seiten wo man Dateien uploaden kann,
z.B. hier http://www.materialordner.de
Den generierten Link kannst du dann in der NG angeben.
Datei steht bereit unter:
http://www.materialordner.de/7xryh1uG8c4FK3q2Jb4wuv5X5khCX8z.html
Freue mich über eine Rückmeldung von Dir.
Liebe Grüße
Michel
<michel....@evt-gmbh.de> schrieb:
>Datei steht bereit unter:
>http://www.materialordner.de/7xryh1uG8c4FK3q2Jb4wuv5X5khCX8z.html
bei meinem ersten Code ging ich davon aus, dass die Zellen einer Spalte verbunden sind.
Wenn die Zellen über eine Zeile und mehrere Spalten verbunden sind,
hebe den Zellverbund aus, formatiere die horizontale Textausrichtung nach
"Über Auswahl zentrieren", aktiviere die automatische Zeilenhöhe, verbinde
die Zellen wieder und setze die Ausrichtung wieder auf "Links"
Private Sub Worksheet_Change(ByVal Target As Range)
With Target.MergeArea
' Zellverbund aufheben
.UnMerge
' Ausrichtung über alle Zellen
.HorizontalAlignment = xlCenterAcrossSelection
' automatische Zeilenhöhe
.EntireRow.AutoFit
' Zellen verbinden
.Merge
' Ausrichtung links
.HorizontalAlignment = xlGeneral
End With
End Sub
Du bist meine Excel-Königin!!!!
Vielen Lieben Dank. Du hast zum Wochenende einen Menschen ungemein
glücklich gemacht!!!!
Liebe Grüße und sonnige Tage
Michel
hat einmal funktioniert und jetzt nicht mehr.
Komme mir irgendwie bissle dooooooooof vor?
Was hab ich falsch gemacht.
Selbst wenn ich deine Pogrammierung in eine neue EXCEL rein mache,
geht
es dort auch nicht???
Habe ich was im Excel ausgeschaltet?
Grüße
Michel
<michel....@evt-gmbh.de> schrieb:
> hat einmal funktioniert und jetzt nicht mehr.
> Komme mir irgendwie bissle dooooooooof vor?
musst du aber nicht!
> Was hab ich falsch gemacht.
Keine Ahnung ...
> Selbst wenn ich deine Pogrammierung in eine neue EXCEL rein mache,
> geht es dort auch nicht???
> Habe ich was im Excel ausgeschaltet?
Die Routine wird als Ereignisprozedur automatisch bei jeder Änderung im Tabellenblatt
ausgeführt.
Hast du noch eine andere Prozedur laufen, in der die Ereignisse deaktiviert werden und
anschließend nicht wieder aktiviert wurden?
Setze in die Aufrufzeile der Prozedur mit 'F9' einen Haltepunkt und änder den Zellwert.
Der Debugger sollte dann in der erste Zeile stehenbleiben und diese gelb hinterlegt sein.
Ist das so?
habe es geschafft. Ich hatte die VBA-Programmierung versehentlich in
die Arbeitsmappe
reingemacht. Dann hat es nicht funktioniert.
Nachdem ich sie jedem einzelnen Tabellenblatt zugeordnet habe, geht es
jetzt.
Zusätzlich war meine Makro-Sicherheits-Einstellung noch auf hoch. Der
einfachste Fehler *g*
Jetzt gibt es nur noch eine Sache, wenn eine Zelle befüllt ist und ich
den Inhalt komplett
über die "Entf-Taste" lösche kommt ein VBA Fehler.
Gelbe Markierung bei:
> With Target.MergeArea
Kann man das auch noch ausmerzen?
Liebe Grüße
Michel
><michel....@evt-gmbh.de> schrieb im Newsbeitrag
>news:0c254a8c-05bf-47e5...@d19g2000prh.googlegroups.com...
>Guten Morgen Melanie,
>habe es geschafft. Ich hatte die VBA-Programmierung versehentlich in
>die Arbeitsmappe
>reingemacht. Dann hat es nicht funktioniert.
>Nachdem ich sie jedem einzelnen Tabellenblatt zugeordnet habe, geht es
>jetzt.
>Zus�tzlich war meine Makro-Sicherheits-Einstellung noch auf hoch. Der
>einfachste Fehler *g*
>Jetzt gibt es nur noch eine Sache, wenn eine Zelle bef�llt ist und ich
>den Inhalt komplett
>�ber die "Entf-Taste" l�sche kommt ein VBA Fehler.
>Gelbe Markierung bei:
>> With Target.MergeArea
>Kann man das auch noch ausmerzen?
damit du weiter kommst, ich denke Melanie w�rde dir auch so antworten, f�ge noch
folgende Zeile nach SUB ein.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub ''' << einf�gen
With Target.MergeArea
''
''
--
mfG
Wolfgang Habernoll
[ Win XP Home SP-2 , XL2002 ]