Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Pictures.Insert vs. AddPicture

Forumthread: Pictures.Insert vs. AddPicture

Pictures.Insert vs. AddPicture
31.01.2021 16:40:17
neo007bb
Ich habe jetzt unzähle Varianten durch. Ich baue ein Bestellsystem für zwei verschieden Shops. Heißt, bei jedem eingetragenen Artikel in die Bestellliste soll am Ende der Listen-Zeile das jeweilige Logo eingefügt werden, kleiner als das Originalbild, kleiner als die Zeile selbst, für die Übersichtlichkeit in der Liste, mittig ausgerichtet.
Ich habe von Pictures.Insert zu Shapes.AddPicture gewechselt, da ich gelesen habe, dass dies die korrektere Form sei. Jetzt bekomme ich eine Fehlermeldung bei der Festlegung eines Rahmens.
Kann mir jemand meine Fehler aufzeigen? Folgende Fragen stellen sich mir:
- Welchen Variablen-Typ brauche ich für ein eingefügtes Bild?
- Wie kann ich diese Variable dann verwenden, um Größe, Position und Rahmen festzulegen?
Danke sehr!!!!!!
Sub LogoEinfügen (Shop As String, Zeile As Integer, Spalte As Integer)
Dim Breite As Integer
Dim Höhe As Integer
Dim strDatei As String
Dim Logo As Object
Dim ShopFarbe As Long, Rot As Long, Blau As Long
' Farben für die zwei Shops festlegen
Rot = 26316
Blau = 13395456
' Dateinamen je nach Shop auswählen und Shop-Farbe einstellen
If Shop = "ZL" Then
strDatei = "D:\logo1.jpg"
ShopFarbe = Rot
End If
If Shop = "AQ" Then
strDatei = "D:\logo2.jpg"
ShopFarbe = Blau
End If
' Bild einfügen
' Ort festlegen
Dim rg As Range
Set rg = ActiveSheet.Cells(Zeile, Spalte)
' Und einfügen
Set Logo = ActiveSheet.Shapes.AddPicture(strDatei, msoTrue, msoTrue, rg.Left, rg.Top, -1, -1)
Set rg = Nothing
With Logo
.LockAspectRatio = msoFalse              ' Verzerrung egal
.Height = Rows(Zeile).RowHeight - 4      ' kleiner als Zeile
.Width = Columns(Spalte).Width - 4       ' schmaler als Spalte
.Top = Cells(Zeile, Spalte).Top + (Cells(Zeile, Spalte).Height - Logo.Height) / 2          _
' mittig
.Left = Cells(Zeile, Spalte).Left + (Cells(Zeile, Spalte).Width - Logo.Width) / 2          _
' mittig
End With
' Rahmen ums Bild, in der Farbe des Shops
With Logo.ShapeRange.Line
.Visible = msoTrue
.ForeColor.RGB = ShopFarbe
.Weight = 1.5
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
End With
Set Logo = Nothing
' Zeilenhöhe anpassen
' Rows(Zeile).RowHeight = Logo.Height
End Sub

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pictures.Insert vs. AddPicture
31.01.2021 17:06:47
Nepumuk
Hallo,
1. So:
Set Logo = ActiveSheet.Shapes.AddPicture(strDatei, msoFalse, msoTrue, rg.Left, rg.Top, -1, -1)
2. Der Datentyp Shape. Also:
Dim Logo As Shape
Gruß
Nepumuk
AW: Pictures.Insert vs. AddPicture
01.02.2021 20:50:33
neo007bb
Das hat mir zuerst geholfen, vielen Dank! Auch wenn ich nicht verstehe, warum. Denn schließlich lege ich den Lock auf das Seitenverhältnis doch im Nachhinein fest.
Außerdem: Wieso fügt es mir das Bild nicht im Original-Seitenverhältnis ein und ich kann es dann auf Spaltenbreite skalieren?
Ich hatte das getestet, vor oben stehendem Code. Das Ergebnis war, dass das Logo eingefügt wurde und sich danach nicht mehr bewegt hat (im Nachhinein wird eine Zeile eingefügt und die Zeile mit Logo nach unten geschoben).
Die Logo-Zeile hatte ich anfangs auf 40 Höhe, dann wollte ich sie kleiner haben und seitdem wurde mir das Logo nicht mehr verschoben.
Die Änderung am Seitenverhältnis hat das aufgehoben, allerdings ist es eben verzerrt. Für meine Zwecke zwar voll okay, aber dennoch wäre interessant zu wissen, woran es lag.
Anzeige
AW: Pictures.Insert vs. AddPicture
31.01.2021 17:08:55
volti
Hallo,
teste mal folgende Idee:
Code:

[Cc][+][-]

Sub LogoEinfügen(Shop As String, Zeile As Integer, Spalte As Integer) Dim Breite As Integer Dim Höhe As Integer Dim strDatei As String Dim Logo As Object Dim ShopFarbe As Long, Rot As Long, Blau As Long Dim rRette As Range Set rRette = ActiveCell ' Farben für die zwei Shops festlegen Rot = 26316 Blau = 13395456 ' Dateinamen je nach Shop auswählen und Shop-Farbe einstellen If Shop = "ZL" Then strDatei = "D:\logo1.jpg" ShopFarbe = Rot End If If Shop = "AQ" Then strDatei = "D:\logo1.jpg" ShopFarbe = Blau End If ' Bild einfügen ' Ort festlegen Dim rg As Range Set rg = ActiveSheet.Cells(Zeile, Spalte) ' Und einfügen Set Logo = ActiveSheet.Shapes.AddPicture(strDatei, msoTrue, msoTrue, rg.Left, rg.Top, -1, -1) Set rg = Nothing With Logo .LockAspectRatio = msoFalse ' Verzerrung egal .Height = Rows(Zeile).RowHeight - 4 ' kleiner als Zeile .Width = Columns(Spalte).Width - 4 ' schmaler als Spalte .Top = Cells(Zeile, Spalte).Top + (Cells(Zeile, Spalte).Height - Logo.Height) / 2 _ ' mittig .Left = Cells(Zeile, Spalte).Left + (Cells(Zeile, Spalte).Width - Logo.Width) / 2 _ ' mittig ' Rahmen ums Bild, in der Farbe des Shops .Select With Selection.ShapeRange.Line .Visible = msoTrue .ForeColor.RGB = ShopFarbe .Weight = 1.5 .ForeColor.TintAndShade = 0 .ForeColor.Brightness = 0 End With End With rRette.Select Set Logo = Nothing ' Zeilenhöhe anpassen ' Rows(Zeile).RowHeight = Logo.Height End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Pictures.Insert vs. AddPicture
31.01.2021 22:50:18
neo007bb
Unterschied wäre hier das "Select?" ich habe gelesen, man soll das möglichst umterlassen?
Ich werde es morgen testen! Vielen Dank schon einmal!
AW: Pictures.Insert vs. AddPicture
31.01.2021 23:09:48
Daniel
Hi
das mit dem "Selectieren unterlassen" gilt in erster Linie für das Bearbeiten von Zellen in einem Tabellenblatt.
Bei Shape-Objekten ist das weniger kritisch.
das liegt daran, dass Excel beim selektieren einer Zelle eine Reihe von Aktionen im Hintergrund ausführen muss, bei Shapes nicht.
Gruß Daniel
Anzeige
AW: Pictures.Insert vs. AddPicture
01.02.2021 00:00:52
Daniel
Hi
mit With Logo.Line
(also ohne das ShapeRange)
läuft der Code bei mir ohne Fehler durch.
Gruß Daniel
;
Anzeige

Infobox / Tutorial

Bilder einfügen in Excel mit VBA: Pictures.Insert vs. AddPicture


Schritt-für-Schritt-Anleitung

Um ein Bild in Excel mit VBA einzufügen, kannst du entweder die Methode Pictures.Insert oder Shapes.AddPicture verwenden. Die Verwendung von Shapes.AddPicture ist in vielen Fällen die bevorzugte Methode, da sie mehr Kontrolle über die Eigenschaften des eingefügten Bildes bietet.

Hier ist eine einfache Schritt-für-Schritt-Anleitung, wie du ein Bild mit AddPicture einfügen kannst:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf „VBAProject (DeinWorkbook)“, wähle „Einfügen“ und dann „Modul“.

  3. Füge den folgenden Code ein:

    Sub LogoEinfügen(Shop As String, Zeile As Integer, Spalte As Integer)
       Dim strDatei As String
       Dim Logo As Shape
       Dim ShopFarbe As Long
    
       ' Dateinamen je nach Shop festlegen
       If Shop = "ZL" Then
           strDatei = "D:\logo1.jpg"
           ShopFarbe = RGB(255, 0, 0) ' Rot
       ElseIf Shop = "AQ" Then
           strDatei = "D:\logo2.jpg"
           ShopFarbe = RGB(0, 0, 255) ' Blau
       End If
    
       ' Bild einfügen
       Set Logo = ActiveSheet.Shapes.AddPicture(strDatei, msoFalse, msoTrue, _
               ActiveSheet.Cells(Zeile, Spalte).Left, _
               ActiveSheet.Cells(Zeile, Spalte).Top, -1, -1)
    
       ' Größe und Position anpassen
       With Logo
           .LockAspectRatio = msoFalse
           .Height = ActiveSheet.Rows(Zeile).RowHeight - 4
           .Width = ActiveSheet.Columns(Spalte).Width - 4
           .Top = ActiveSheet.Cells(Zeile, Spalte).Top + (ActiveSheet.Cells(Zeile, Spalte).Height - .Height) / 2
           .Left = ActiveSheet.Cells(Zeile, Spalte).Left + (ActiveSheet.Cells(Zeile, Spalte).Width - .Width) / 2
    
           ' Rahmen ums Bild
           With .Line
               .Visible = msoTrue
               .ForeColor.RGB = ShopFarbe
               .Weight = 1.5
           End With
       End With
    End Sub
  4. Führe das Makro aus: Du kannst das Makro jetzt ausführen, um das Logo in das aktive Arbeitsblatt einzufügen.


Häufige Fehler und Lösungen

  • Fehlermeldung bei der Dateipfad: Vergewissere dich, dass der Pfad zu deinem Bild korrekt ist. Verwende einfache Anführungszeichen (') für Dateipfade, die Leerzeichen enthalten.

  • Bild wird nicht korrekt positioniert: Stelle sicher, dass du die Zeilenhöhe und Spaltenbreite korrekt einstellst, bevor du das Bild einfügst.

  • Verzerrtes Bild: Wenn das Bild verzerrt wird, überprüfe die LockAspectRatio-Eigenschaft. Setze sie auf msoTrue, wenn du das Seitenverhältnis beibehalten möchtest.


Alternative Methoden

Neben Shapes.AddPicture gibt es auch die Methode ActiveSheet.Pictures.Insert, die jedoch weniger Kontrolle über die Bildformatierung bietet. Hier ist ein Beispiel:

Sub BildEinfügen()
    ActiveSheet.Pictures.Insert("D:\logo1.jpg").Select
End Sub

Diese Methode fügt das Bild jedoch immer in seine Originalgröße ein und bietet keine Möglichkeit zur Anpassung der Größe oder Position.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du Bilder in verschiedenen Kontexten einfügen kannst:

  1. Einfügen eines Logos in eine Bestellliste: Ersetze im obigen Code D:\logo1.jpg mit dem Pfad zu deinem gewünschten Logo und passe die Zeilen- und Spaltenparameter an.

  2. Dynamisches Einfügen basierend auf Benutzereingaben: Du kannst den Shop-Namen als Eingabeparameter verwenden, um unterschiedliche Logos für verschiedene Shops einzufügen.


Tipps für Profis

  • Verwende With-Blöcke, um den Code leserlicher zu gestalten und die Ausführung zu beschleunigen.

  • Vermeide die Verwendung von Select und Activate. Dies macht den Code nicht nur schneller, sondern auch weniger anfällig für Fehler.

  • Teste deine Makros in einer Testumgebung, bevor du sie in einem wichtigen Dokument ausführst.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Pictures.Insert und Shapes.AddPicture? Pictures.Insert fügt das Bild in seiner Originalgröße ein, während Shapes.AddPicture dir erlaubt, die Größe und Position des Bildes zu steuern.

2. Welche Variablen-Typen sollte ich für eingefügte Bilder verwenden? Verwende den Datentyp Shape für Bilder, die mit Shapes.AddPicture eingefügt wurden.

3. Wie kann ich die Größe und Position des eingefügten Bildes anpassen? Nutze die Eigenschaften .Height, .Width, .Top, und .Left des Shape-Objekts, um die Größe und Position anzupassen.

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