ich stehe vor einem kleinen Problem.
Und zwar hab ich für ein Projekt eine Excel Tabelle erstellt, bei dem ich einem jeden Bauteil ein Bild zugeordnet habe.
Das Bild habe ich frei Hand in die Zellen eingefügt.
Jetzt hätte ich gerne, dass diese Bilder innerhalb der Zellen zentriert sind.
Die Bilder sind dabei kleiner als die Zelle, damit man die Ränder noch erkennen kann.
Mit den Standardtools aus Excel ist dies anscheinend nicht möglich.
Nach einiger Recherche hab ich folgendes gefunden:
Case schreibt einen sehr schönen, eigentlich gut lesbaren Code.
Öffne den VBA-Editor mit alt-F11 und lege ein neues Modul an mit alt-e-m (nacheinander oder im Menü).
Dort wird der Code von Case mit copy/paste eingefügt:
Code:
Public Sub Picture_Center_Name()
Dim shpPicture As Shape
With ThisWorkbook.Worksheets("Sheet1")
For Each shpPicture In .Shapes
If shpPicture.Type = msoPicture Then
shpPicture.Left = shpPicture.Left + _
(shpPicture.TopLeftCell.Width - _
shpPicture.Width) / 2
shpPicture.Top = shpPicture.Top + _
(shpPicture.TopLeftCell.Height - _
shpPicture.Height) / 2
End If
Next shpPicture
End With
End Sub
Teste den Code im einzelschritt-Modus F8, falls Probleme auftreten, lade deine Datei hoch.
mfg
Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28 • Flammkuchen
Zitat:Und dann einfach F gedrückt halten, bis es überall angewendet ist?
In der Regel startet man ein (vorher getestetes) Makro so:
Alt+F8
Makro wählen, ausführen.
Zitat:Wie funktionert das jetzt, wenn ich zwei oder mehr Arbeitsmappen in einem Dokument habe?
Du meinst wahrscheinlich mehrere Tabellenblätter (Sheets) in einer Arbeitsmappe (Workbook).
Dazu gibt es in Deinem Link ja das Makro Picture_Center_All_Worksheet()
Beachte aber, dass der Fehler auch dort besteht und äquivalent zu meinem Code geändert werden muss.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
15.08.2017, 17:16 (Dieser Beitrag wurde zuletzt bearbeitet: 15.08.2017, 17:16 von Fennek.)
Hallo,
teste diesen Code:
Code:
Public Sub Picture_Center_Name()
Dim shpPicture As Shape
With ThisWorkbook.Worksheets("Sheet1")
For Each shpPicture In .Shapes
'Debug.Print shpPicture.Name, shpPicture.TopLeftCell.Address
If shpPicture.Type = msoPicture Then
shpPicture.Left = shpPicture.TopLeftCell.Left
shpPicture.Top = shpPicture.TopLeftCell.Top
shpPicture.Left = shpPicture.Left + _
(shpPicture.TopLeftCell.Width - _
shpPicture.Width) / 2
shpPicture.Top = shpPicture.Top + _
(shpPicture.TopLeftCell.Height - _
shpPicture.Height) / 2
End If
Next shpPicture
End With
End Sub
Die Bilder müssen kleiner sein als die Zelle (könnte man auch automatisieren) und irgentwie in der richtigen Zelle der Spalte D stehen.
mfg
(ergänzt: der Code von Case funktioniert, wenn man zuerst das Bild in die obere linke Ecke setzt)
Option Explicit
Public Sub Center_Picture()
Dim objShape As Shape
For Each objShape In Tabelle1.Shapes
With objShape
If .Type = msoPicture Then
.Left = .TopLeftCell.Left + .TopLeftCell.Width / 2 - .Width / 2
.Top = .TopLeftCell.Top + .TopLeftCell.Height / 2 - .Height / 2
End If
End With
Next
End Sub