ich versuche aktuell ein Bild in eine Rechtecks-Form (ganz normal eingefügte Form über "Einfügen"-> Form-> Rechteck), die beliebig auf einem Excel-Sheet platziert wird, einzufügen.
Da in dieser Rechtecksform oben links beginnend erstmal zwei Zeilen Text stehen (ist in Calibri mit 11 pt und einfachem Zeilenabstand geschrieben), möchte ich, dass das Bild unterhalb dieser zwei Schriftzeilen beginnt und den Rest der Form ausfüllt.
Wenn ich das ganze wie gewünscht manuell durchführe, funktioniert das mit folgenden Schritten:
- Form Anklicken
- Rechtsklick -> "Grafik formatieren"
- "Formoptionen"
- Füllung "Bild- oder Texturfüllung" auswählen
- Bild aus den Dateien auswählen und einfügen
- Haken bei "Bild nebeneinander als Textur anordnen" soll nicht gesetzt sein
- Offset von links, rechts und unten ist 0%
- Offset von oben ist 30%
- Haken bei "mit Form drehen" soll aktiviert sein
Dieser Ablauf und das Ergebnis dessen soll nun durch eine VBA-Prozedur automatisiert werden...
Als Code habe ich versucht das ganze folgendermaßen auszuführen:
Sub Bild_einfügeen)
Dim picPath As String
Dim shp As shape
Dim topOffset As Double
' Dialogfeld zum Öffnen einer Datei anzeigen
picPath = Application.GetOpenFilename("Bilder (*.jpg;*.jpeg;*.gif;*.png),*.jpg;*.jpeg;*.gif;*.png")
' Überprüfen, ob eine Datei ausgewählt wurde
If picPath > "False" Then
' Ausgewähltes Rechteck auf dem aktiven Blatt
Set shp = Selection.ShapeRange(1)
' Bild als Füllung für das Rechteck einfügen
With shp.Fill
.Visible = msoTrue
.UserPicture picPath ' Das Bild als UserPicture verwenden
' Einstellungen für die Texturfüllung anpassen
.TextureTile = msoFalse ' Haken bei "Bild nebeneinander als Textur anordnen" nicht setzen
' Positionierung des Bildes innerhalb der Form mit Abstand von oben und zentriert horizontal
topOffset = (shp.Height - UserPicture.Fill.Height) * 0.3 ' 30% Offset von oben
.TextureAlignment = msoTextureTopLeft ' Ausrichtung oben links setzen
.TextureOffsetX = (shp.Width - UserPicture.Fill.Width) / 2 ' Horizontal zentrieren
.TextureOffsetY = topOffset ' Offset von oben setzen
' Weitere Optionen für die Form festlegen
shp.ThreeD.Perspective = msoTrue ' Haken bei "mit Form drehen" aktivieren
End With
End If
End Sub
So wird mir aber immer "die Zeile 2topPffset = ..." als Fehler markiert und bei UserPicture kommt die Fehlermeldung "Argument ist nicht optional". Ich verstehe die Fehlermeldung nicht und kann den Fehler auch nicht beheben.. vielleicht ist die Herangehensweise in meinem Code auch insgesamt nicht schlüssig und es gibt von eurer Seite aus andere Ideen?
Vielen Dank schon mal für die Hilfe!
Gruß KoKo