Überarbeitet + Erklärung Bildposition
01.05.2022 21:24:30
Felix
Hallo Andre, sehr gerne.
Die Positionierung erfolgt in folgendem Bereich:
Set xRg = Sheets("main").Cells(CellRow, 4) -Hier wird die Zelle festgelegt
With Pshp
.LockAspectRatio = msoTrue -Hier wird das Größenverhältnis des Originalbilds festgesetzt
.Height = xRg.Height * 0.9 -Hier wird die Höhe des Bilds auf 0,9 der Höhe der Zelle festgelegt
.Top = xRg.Top + (xRg.Height - .Height) / 2 -Hier wird die y-Achse des Bildes zentriert in der Zelle festgelegt
.Left = xRg.Left + (xRg.Width - .Width) / 2 -Hier wird die x-Achse des Bildes zentriert in der Zelle festgelegt
End With
Somit bleibt das Bild immer zentriert in der Zelle und du kannst die Spalte einfach verkleinern, beim Neuberechnen wird das Bild immer zentriert dargestellt.
Generalisiert wäre der Code wie folgt: (-ungetestet-)
Function BildEinfuegen(url As String, Optional rng As Range)
Dim Pshp As Shape
Dim xRg As Range
Dim xCol As Long
On Error Resume Next
Application.ScreenUpdating = False
If rng Is Nothing Then
Set xRg = Application.Caller
Else
Set xRg = rng
End If
For Each shp In xRg.Worksheet.Shapes
If shp.TopLeftCell.Row = CellRow And shp.TopLeftCell.Column = 4 And shp.Type = 11 Then shp.Delete
Next shp
xRg.Worksheet.Pictures.Insert(url).Select
Set Pshp = Selection.ShapeRange.Item(1)
If Pshp Is Nothing Then GoTo lab
If rng Is Nothing Then
Set xRg = Application.Caller
Else
Set xRg = rng
End If
With Pshp
.LockAspectRatio = msoTrue
.Height = xRg.Height * 0.9
.Top = xRg.Top + (xRg.Height - .Height) / 2
.Left = xRg.Left + (xRg.Width - .Width) / 2
End With
lab:
Set Pshp = Nothing
Application.ScreenUpdating = True
End Function
Da gilt die Funktion dann für die Zelle in der sie steht, außer man gibt eine andere Zelle an.
=BildEinfuegen(url;[Zelle])
VG Felix