Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1164to1168
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
Inhaltsverzeichnis

Zellgröße an Bilder anpassen

Zellgröße an Bilder anpassen
Lemmi
Hallo zusammen,
ich bekomme immer wieder Tabellen mit Bildinhalten.
Hier sind die Splaten und Zeilen kleiner als das Bild selber.Diese Bilder passe ich manuell an. Dh.
Das Bild wird über die "Ecken" proportional verkleintert... oder die Zeilen/ Splaten werden vergrößert!
...das Ganze macht viel arbeit!
Könnte man ein Makro dazu anfertigen welches folgende Randbedingungen hat:
Wenn das Makro Bilder in Zellen findert soll die max. Spaltenbreite 70 betragen.
Das Bild selber soll max. 60 betragen!
Die Spaltenhöhe passt sich dann an das Bild an.Das Bild darf soll sich nur Proportional veränder (verkleinert/ vergrößert).
Ist Text in der Zelle darf dieser nicht verdeckt werden.Texte werden ggf. nach oben links formatiert!
Jeder Zelle hat nur ein Bild, welches oben Links angeordnet ist und über den Zellbereich hinausgeht
Gruß
Lemmi

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Zellgrößen automatisch an Bilder anpassen
20.07.2010 22:13:31
NoNet
Hallo Lemmi,
teste an einer Kopie Deines Tabellenblattes folgendes Makro :
Sub SpaltenbreiteAnBilderAnpassen()
Dim sh As Shape, lngFaktor As Long
For Each sh In ActiveSheet.Shapes
If sh.Type = msoPicture Then 'nur bei Bilder und Cliparts
lngFaktor = sh.Width / sh.Height
sh.Width = Application.Min(sh.Width, 60)
sh.Height = sh.Width / lngFaktor
If sh.Width > sh.TopLeftCell.Width Then _
sh.TopLeftCell.EntireColumn.ColumnWidth = 70
sh.TopLeftCell.EntireRow.RowHeight = _
Application.Max(sh.Height + 10, sh.TopLeftCell.RowHeight)
If sh.Left + sh.Width > sh.TopLeftCell.Left + sh.TopLeftCell.Width Then _
sh.Left = sh.TopLeftCell.Left + 5
If sh.Top + sh.Height > sh.TopLeftCell.Top + sh.TopLeftCell.Height Then _
sh.Top = sh.TopLeftCell.Top + 5
End If
Next
End Sub
Gruß, NoNet
Anzeige
AW: Zellgrößen automatisch an Bilder anpassen
20.07.2010 23:04:36
Lemmi
Hallo Nonet,
Spate in denen Bilder sind werden gefunden. o.k.
Die Spalte wird auch auf 70 verbreiert! o.k.
Die Bilder werden verkleinert... sehr sehr viel verkleinert.... das sollte nicht so sein.
Die Bilder sind deutlich in der Höhe kleiner als die Zeile (alte Zeilehöhe)
Das Bild sollte die max. breite der Spalte annehmen (70-10= 60) ohne Proportionalsänderung!
Das neue Format des Bildes kann also annähernd 12,5 cm breit werden. Ist das Bild größer als die vorhandene Zeilenhöhe, so sollte sich die Zeile auf die neue Bildhöhe angepasst werden.
Das Bild soll dabei unverändert bleiben.
Gruß
Lemmi
Anzeige
A@Lemmi : Alle Bedingungen werden erfüllt
21.07.2010 00:17:34
NoNet
Hallo Lemmi,
genau DAS, was Du da alles schreibst, erfüllt das Makro eigentlich komplett !
ABER : Das Problem liegt wohl eher an der Definition des Wortes "Breite" :
Excel VBA kennt da leider 2 unterschiedliche "Breiten" :
Columns(1).Width (entspricht Shapes(1).Width, Angabe der Breite in Punkten)
Columns(1).ColumnWidth (entspricht Breite in Anzahl Zeichen mit Standardbreite)
Dabei ist z.B. auf meinem Bildschirm Columns(1).width (=371) das gleiche wie Columns(1).ColumnWidth (=70).
In diesem Fall helfen nur etwas konsequentere Umrechnungsfaktoren wie in diesem Makro :
Sub SpaltenbreiteAnBilderAnpassen()
Dim sh As Shape, lngFaktor As Single, lngSpFaktor As Single
For Each sh In ActiveSheet.Shapes
If sh.Type = msoPicture Then 'nur bei Bilder und Cliparts
lngFaktor = sh.Width / sh.Height
lngSpFaktor = sh.TopLeftCell.Width / sh.TopLeftCell.ColumnWidth
sh.Width = Application.Min(sh.Width, 60 * lngSpFaktor)
sh.Height = sh.Width / lngFaktor
If sh.Width > sh.TopLeftCell.Width Then _
sh.TopLeftCell.EntireColumn.ColumnWidth = _
Application.Min(70, sh.Width / lngSpFaktor * 70 / 60)
sh.TopLeftCell.EntireRow.RowHeight = _
Application.Max(sh.Height + 10, sh.TopLeftCell.RowHeight)
If sh.Left + sh.Width > sh.TopLeftCell.Left + sh.TopLeftCell.Width Then _
sh.Left = sh.TopLeftCell.Left + (sh.TopLeftCell.Width - sh.Width) / 2
If sh.Top + sh.Height > sh.TopLeftCell.Top + sh.TopLeftCell.Height Then _
sh.Top = sh.TopLeftCell.Top + 5
End If
Next
End Sub
Gruß, NoNet
Anzeige
AW: A@Lemmi : Alle Bedingungen werden erfüllt
21.07.2010 19:05:19
Lemmi
Hallo NoNet,
alles funktioniert! ...wunderbar!
ja wenn, ja wenn nicht beim Test noch ein weiters Problen entstanden wäre!
Sind die Bilder breiter als 70 oder höher als 400 (max. Zeilenhöhe) so meldet das Marko einen Fehler.
..vieleicht muss man alle Bilder bezüglich der Breite und der Höhe vorher prüfen und entsprechend proportional verkleinern.
Kannst Du noch einmal das Makro anpassen?
Vielen Dank im Voraus!
Gruß Lemmi
AW: A@Lemmi : Alle Bedingungen werden erfüllt
21.07.2010 19:29:08
Lemmi
...schon wieder etwas!
Bilder die duch Strg+c und Strg+v von Word in Excel in die Tabelle hinein kopiert werden sind von der Zellengröße und Zellenposition abhänngig! (Eigenschften Bild)
Durch vorheriges selektieren der Bilder stelle ich die Eigenschaften der Bilder von :
Abhängig von Zellenposition und Zellenlage
auf
Abhängig nur Zellenposition ein. So verzerren die Bilder nicht!
Nach dem Durchlauf Deines Makro's stelle ich die Eigenschften der Bilder wieder auf:
Eigenschaften: Abhängig von Zellenposition und Zellenlage zurück!
Kann das Makro dies auch noch erledigen?
Ich hoffe das passt noch rein!
Gruß
Lemmi
Anzeige

204 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige