Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 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
Anzeige

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
Anzeige
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
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zellgröße an Bilder anpassen in Excel


Schritt-für-Schritt-Anleitung

Um die Zellgröße an Bilder in Excel anzupassen, kannst Du ein VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, wie Du dies umsetzt:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu:

    • Klicke auf Einfügen > Modul.
  3. Kopiere und füge das folgende Makro ein:

    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 Bildern
               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
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Führe das Makro aus:

    • Gehe zu Entwicklertools > Makros, wähle SpaltenbreiteAnBilderAnpassen aus und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: Bild wird zu stark verkleinert
    Lösung: Stelle sicher, dass das Makro die richtigen Werte für die Breite und Höhe verwendet. Anpassungen in den Berechnungen können notwendig sein.

  • Fehler: Zeilenhöhe wird nicht angepasst
    Lösung: Überprüfe, ob die Max-Funktion im Makro korrekt eingestellt ist, um die Zeilenhöhe basierend auf der Bildhöhe anzupassen.

  • Fehler: Bilder sind breiter als 70 oder höher als 400
    Lösung: Füge eine Überprüfung im Makro hinzu, um sicherzustellen, dass die Bilder vor der Anpassung der Zellengröße korrekt behandelt werden.


Alternative Methoden

Wenn Du kein Makro verwenden möchtest, gibt es auch manuelle Methoden, um die Zellgröße an Bilder anzupassen:

  • Bilder manuell anpassen: Klicke auf das Bild und ziehe an den Ecken, um die Größe proportional zu ändern. Achte darauf, dass die Zellengröße ebenfalls manuell angepasst wird.
  • Bild in Zelle einfügen: Gehe zu Einfügen > Bilder, wähle das Bild aus und passe es manuell an die Zellengröße an.

Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du die Zellengröße an Bilder anpassen kannst:

  1. Bild in Zelle anpassen: Wenn Du ein Bild einfügst, stelle sicher, dass Du die Option "Bild an Zelle anpassen" wählst.
  2. Bilder gleichmäßig skalieren: Wenn Du mehrere Bilder in einer Tabelle hast, kannst Du sie mit dem oben angegebenen Makro alle gleichzeitig anpassen, um die maximale Zellengröße zu gewährleisten.
  3. Text anpassen: Stelle sicher, dass der Text in der Zelle nicht über die Zellgrenzen hinausgeht, indem Du die Schriftgröße oder den Zeilenabstand anpasst.

Tipps für Profis

  • Automatisierung: Verwende das Makro regelmäßig, um die Zellenhöhe automatisch anzupassen und Zeit zu sparen.
  • Formatierungen beibehalten: Achte darauf, dass die Bildformate nach der Anpassung beibehalten werden, um eine gleichmäßige Darstellung zu gewährleisten.
  • Vorsicht bei großen Bildern: Vor dem Einfügen von Bildern, die größer als die maximale Höhe der Zelle sind, solltest Du diese vorab verkleinern.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass der Text in der Zelle nicht über die Zellgrenze hinausgeht?
Stelle die Zelle so ein, dass der Text umgebrochen wird, oder passe die Schriftgröße an.

2. Kann ich das Makro auf mehrere Arbeitsblätter anwenden?
Ja, du kannst das Makro anpassen, um durch alle Arbeitsblätter zu iterieren, oder es auf jedem Blatt einzeln ausführen.

3. Welche Excel-Version benötige ich für das Makro?
Das Makro funktioniert in Excel 2010 und neueren Versionen, die VBA unterstützen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige