Hallo zusammen. Ich habe ein Makro gemacht zum automatisch Bilder einfügen. Nun wollte ich die Bilder auch schön zentrieren und alle auf die selbe Grösse anpassen. Alles funtioniert wunderbar bis auf eine Kleinigkeit: Wenn Bilder breiter als hoch sind und nur ganz wenig hoch sind, werden sie komischerweise immer erst eine Zeile weiter unten eingefügt. Weiss jemand an was die liegt?
Hier mein Makro:
Option Explicit
Sub Bilder_einfügen()
ActiveWorkbook.SaveAs „C:\oehri_temp.xls“ 'Datei mit neuem Namen Speichern, damit keine Bilder im Original (automatisch Überschreiben möglich?)
Dim Pfad As String, Wiederholungen As Long 'While Schleife
Dim Hoehe As String 'Die Höhe der Spalte wird von Zelleninhalt genommen
Dim Faktor As String 'Faktor zum umrechnen des Verhältnis Höhe/Breite
Hoehe = ActiveSheet.Cells(3, 3).Value 'Zelle in der Höhe definiert wird
On Error Resume Next 'Immer wieder von vorne anfangen…
Pfad = „C:\bilder“ '****************** Bilder Pfad **********************
For Wiederholungen = 9 To Range(„A65536“).End(xlUp).Row 'Immer eine Zeile nach der anderen durchgehen
Cells(Wiederholungen, 2).Activate 'Zelle von aktueller Zeile auswählen
If Dir(Pfad & Cells(Wiederholungen, 3) & „.jpg“) „“ Then 'Wenn Bild vorhanden…
ActiveSheet.Pictures.Insert(Pfad & Cells(Wiederholungen, 3) & „.jpg“).Select '… Bild einfügen
With Selection
.ShapeRange.LockAspectRatio = msoTrue 'Seitenverhältnis sperren (unnötig glaubs)
Faktor = .Width / .Height 'Seitenverhältnis
.Height = Hoehe 'Höhe fix
.Width = Hoehe * Faktor 'Breite mal Faktor für richtiges Verhältnis
If .Width > 145 Then '***** Umkehrung wenn Bild Breiter als Hoch *****
Faktor = .Width / 145
.Height = Hoehe / Faktor
.Width = 145
End If
.Left = ActiveCell.Left + (145 + 3 - .Width) / 2 'verschieben nach rechts in die Mitte der Zelle mit kleinem Abstand
.Top = ActiveCell.Top + (Hoehe + 3 - .Height) / 2 'verschieben nach unten in die Mitte der Zelle mit kleinem Abstand
End With
Else
If Cells(Wiederholungen, 3).Value = „“ Then 'wenn Zeile kein Bild haben soll nichts machen
Else
ActiveSheet.Pictures.Insert(Pfad & „blanko.jpg“).Select 'wenn Zeile ein Bild haben soll, aber keins Vorhanden ist, Standardbild einfügen
With Selection
.ShapeRange.LockAspectRatio = msoTrue
Faktor = .Width / .Height
.Height = Hoehe
.Width = Hoehe * Faktor
If .Width > 145 Then
Faktor = .Width / 145
.Height = Hoehe / Faktor
.Width = 145
End If
.Left = ActiveCell.Left + (145 + 3 - .Width) / 2
.Top = ActiveCell.Top + (Hoehe + 3 - .Height) / 2
End With
End If
End If
If Cells(Wiederholungen, 3).Value = „“ Then
Cells(Wiederholungen, 3).RowHeight = 30 '***** Breite = Höhe aber egal hehe *****
Else
Cells(Wiederholungen, 3).RowHeight = Hoehe + 3 '***** Breite = Höhe aber egal hehe *****
End If
Next
End Sub
Gruss

((
