Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Bild in Zellbereich einfügen

VBA Bild in Zellbereich einfügen
08.11.2019 23:14:36
Peer
Hallo.
Ich habe ein Makro, das in einen Bereich des ActiveSheet ein Bild einfügen soll. Wenn ich ein anderes Bild laden möchte, soll es das vorhandene löschen und das neu ausgewählte einfügen. Bis jetzt überliegt das eine Bild dem anderen. Es sollen nur png-Dateien eingefügt werden, weil ich diesen Zellbereich für die Unterschrift benötige und daher die Transparenz benötige.
Mein Code sieht bis jetzt so aus...
Sub BildLaden()
Dim sPicture As String, pic As Picture
sPicture = Application.GetOpenFilename _
("Grafik laden (*.png), *.png", , "Wähle deine erstelle Unterschrift aus !")
ActiveSheet.Unprotect Password:=""
On Error GoTo Fehler:
Set pic = ActiveSheet.Pictures.Insert(sPicture)
If sPicture = "False" Then ActiveSheet.Shapes(pic).Delete  'Exit Sub
With pic
.ShapeRange.LockAspectRatio = msoFalse
.Height = Range("D45:G49").Height
.Width = Range("D45:G49").Width
.Top = Range("D45:G49").Top
.Left = Range("D45:G49").Left
.Placement = xlMoveAndSize
End With
ActiveSheet.Protect Password:=""
Set pic = Nothing
Fehler:
Exit Sub
End Sub
Sorry, wenn es nicht profihaft ausschaut.
Was muss ich ändern oder hinzufügen?
Vielen Dank, wenn jemand einen oder auch mehrer Tipps hat.
LG
Peer
Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Bild in Zellbereich einfügen
09.11.2019 07:13:59
Potter
Hallo Peer,
vielleicht hilft es, wenn Du Deinem Bild einen Namen gibst, über diesen findest Du das Bild und kannst es beim nächsten Durchlauf löschen.
Initial kannst Du über (Office 2010)
Start .... Suchen und Auswählen ... Auswahlbereich…
sehen wie Deine Shapes heißen und sie umbenennen (wenn das Blatt nicht geschützt ist).
Nenne das existierende Shape in "Bild" um.
In Deinem Code:
Im Anschluß an Deine Fehleranweisung setze
ActiveSheet.Shapes("Bild").Delete
In Deiner With …End With –Anweisung ergänze
.Name = "Bild"

Grüße,
Potter
Anzeige
AW: VBA Bild in Zellbereich einfügen
09.11.2019 16:17:47
Peer
Hallo Potter.
Vielen Dank für deine schnelle Hilfe. Karin's Beispiel habe ich als erstes genommen und bin erstmal dabei geblieben.
LG
Peer
AW: VBA Bild in Zellbereich einfügen
09.11.2019 08:38:51
Beverly
Hi Peer,
wenn du nur 1 Bild im Tabellenblatt hast, dann kannst du immer das zuletzt eingefügte Bild löschen:
Sub BildLaden()
Dim sPicture As String, pic As Picture
sPicture = Application.GetOpenFilename _
("Grafik laden (*.png), *.png", , "Wähle deine erstelle Unterschrift aus !")
If sPicture  "False" And sPicture  "Falsch" Then
ActiveSheet.Unprotect Password:=""
' wenn 1 Bild enthalten ist dann dieses löschen
If ActiveSheet.Pictures.Count > 0 Then ActiveSheet.Pictures(ActiveSheet.Pictures.Count). _
Delete
Set pic = ActiveSheet.Pictures.Insert(sPicture)
With pic
.ShapeRange.LockAspectRatio = msoFalse
.Height = Range("D45:G49").Height
.Width = Range("D45:G49").Width
.Top = Range("D45:G49").Top
.Left = Range("D45:G49").Left
.Placement = xlMoveAndSize
End With
ActiveSheet.Protect Password:=""
Set pic = Nothing
End If
End Sub

Oder - falls du anschließend noch weitere Bilder einfügst - kannst du prüfen, ob sich bereits eine Bild im Blatt befindet, dessen Zelladresse der linken oberen Ecke mit D45 übereinstimmt. Dazu anstelle der Zeile If ActiveSheet.Picures.Count .... diese Zeilen:
        For Each pic In ActiveSheet.Pictures
If pic.TopLeftCell.Address = "$D$45" Then
pic.Delete
Exit For
End If
Next pic


Anzeige
AW: VBA Bild in Zellbereich einfügen
09.11.2019 10:48:16
Peer
Hallo Karin.
Vielen Dank für deinen UNterstützung.
Erstes Beipspiel klappt wunderbar.
Zweites kommt mit Meldung "Laufzeitfehler 13: Typen unverträglich" und bleibt bei "Next pic" hängen.
Sub BildLaden()
Dim sPicture As String, pic As Picture
sPicture = Application.GetOpenFilename _
("Grafik laden (*.png), *.png", , "Wähle deine erstelle Unterschrift aus !")
If sPicture  "False" And sPicture  "Falsch" Then
ActiveSheet.Unprotect Password:=""
' wenn 1 Bild enthalten ist, dann dieses löschen
'If ActiveSheet.Pictures.Count > 0 Then ActiveSheet.Pictures(ActiveSheet.Pictures.Count). _
Delete
'prüfen, ob sich bereits eine Bild im Blatt befindet, dessen Zelladresse der linken oberen  _
Ecke mit D45 übereinstimmt,
'falls noch weiter Bilder eingefüget werden sollen
For Each pic In ActiveSheet.Pictures
If pic.TopLeftCell.Address = "$E$45" Then
pic.Delete
Exit For
End If
Next pic
Set pic = ActiveSheet.Pictures.Insert(sPicture)
With pic
.ShapeRange.LockAspectRatio = msoFalse
.Height = Range("E45:F49").Height
.Width = Range("E45:F49").Width
.Top = Range("E45:F49").Top
.Left = Range("E45:F49").Left
.Placement = xlMoveAndSize
End With
ActiveSheet.Protect Password:=""
Set pic = Nothing
End If
End Sub
LG
Peer
Anzeige
AW: VBA Bild in Zellbereich einfügen
09.11.2019 11:01:26
Beverly
Hi Peer,
das kann ich leider nicht nachvollziehen - bei mir kommt kein Fehler.
Aber du kannst mal versuchen, anstelle Pictures Shape zu verwenden - definiere eine Variable als Shape und laufe in der Schleife über alle Shapes:
    Dim shaShape As Shape
For Each shaShape In ActiveSheet.Shapes
If shaShape.TopLeftCell.Address = "$E$45" Then
shaShape.Delete
Exit For
End If
Next shaShape


Anzeige
AW: VBA Bild in Zellbereich einfügen
09.11.2019 14:39:22
Beverly
Hi Peer,
auch in deiner hochgeladenen Mappe erhalte ich keinen Fehler. Ich benutze ebenfalls Excel2016.


Anzeige
AW: VBA Bild in Zellbereich einfügen
09.11.2019 14:41:38
Peer
Nach Neustart von Excel ist Fehler nicht mehr aufgetaucht.
Vielleicht lag es am Blattschutz?
Denn die Datei ist beim Start mit dem Blattschutz versehen. Beim Codieren war er aber deaktiviert worden. Und beim Durchlauf des Makros soll er den Blattschutz entfernen (was er ja schon war) und kam dadurch durcheinander?
Keine Ahnung!
Jedenfalls geht es jetzt. Danke Karin.
Noch eine spezielle Frage hätte ich.
Ich möchte dem User die Möglichkeit bieten, nicht durch einen Button das Makro zu starten, sondern bei Klicken oder Doppelklicken in dem Bereich E45:F49 durch das Makro die Unterschrift einzufügen.
LG
Peer
Anzeige
AW: VBA Bild in Zellbereich einfügen
09.11.2019 15:04:11
Beverly
Hi Peer,
am Blattschutz kann es nicht gelegen haben, denn der wird bei Makroausführung aufgehoben.
Du hast bereits ein DoppelClick-Ereignis im Tabellenbatt, welches für das gesamte Blatt gilt, um das UF zu starten - soll dieses dann nicht gestartet werden wenn im Bereich E45:F49 doppelgeklickt wird sondern stattdessen das Bild eingefügt werden? Oder wie stellst du dir das vor?


Anzeige
AW: VBA Bild in Zellbereich einfügen
09.11.2019 15:25:28
Peerli
Das ist richtig, Karin.
Die UF soll nur in den Zeilen 12 bis 42 geöffnet werden. Leider bin aktuell noch nicht dazu gekommen, das hinzubekommen.
Vielleicht macht man es so, das, wenn keine Unterschrift in dem Bereich ist,das man einen Link oder Button "Unterschrift" einfügen lässt, ansonsten das Bild.
Anzeige
AW: VBA Bild in Zellbereich einfügen
09.11.2019 20:01:38
Beverly
Dann verschiebe doch einfach den Button "Unterschrift" in den Bereich wo die Unterschrift dann eingefügt werden soll - das eingefügte Bild wird dann auf den Button gelegt, sodass er nicht mehr sichtbar ist.


AW: VBA Bild in Zellbereich einfügen
09.11.2019 21:00:39
Peer
Aber wenn dann das Bild einmal drin, kann man den Button nicht mehr drücken und das Makro ausführen. Das ist aber nötig, wenn man das Bild ändern möchte.
Anzeige
AW: VBA Bild in Zellbereich einfügen
09.11.2019 23:48:44
Beverly
Wenn das Bild drin ist, kannst du aber auch keinen Doppelklick mehr auf die darunterliegenden Zellen machen.


AW: VBA Bild in Zellbereich einfügen
10.11.2019 08:33:11
Peerli
Das stimmt auch wieder, Karin.
Da werde ich wohl über ein UF eine Lösung finden müssen.
Lieben Dank
AW: VBA Bild in Zellbereich einfügen
09.11.2019 14:03:33
Peer
Hallo Karin.
Vielen Dank für deinen UNterstützung.
Erstes Beipspiel klappt wunderbar.
Zweites kommt mit Meldung "Laufzeitfehler 13: Typen unverträglich" und bleibt bei "Next pic" hängen.
Sub BildLaden()
Dim sPicture As String, pic As Picture
sPicture = Application.GetOpenFilename _
("Grafik laden (*.png), *.png", , "Wähle deine erstelle Unterschrift aus !")
If sPicture  "False" And sPicture  "Falsch" Then
ActiveSheet.Unprotect Password:=""
' wenn 1 Bild enthalten ist, dann dieses löschen
'If ActiveSheet.Pictures.Count > 0 Then ActiveSheet.Pictures(ActiveSheet.Pictures.Count). _
Delete
'prüfen, ob sich bereits eine Bild im Blatt befindet, dessen Zelladresse der linken oberen  _
Ecke mit D45 übereinstimmt,
'falls noch weiter Bilder eingefüget werden sollen
For Each pic In ActiveSheet.Pictures
If pic.TopLeftCell.Address = "$E$45" Then
pic.Delete
Exit For
End If
Next pic
Set pic = ActiveSheet.Pictures.Insert(sPicture)
With pic
.ShapeRange.LockAspectRatio = msoFalse
.Height = Range("E45:F49").Height
.Width = Range("E45:F49").Width
.Top = Range("E45:F49").Top
.Left = Range("E45:F49").Left
.Placement = xlMoveAndSize
End With
ActiveSheet.Protect Password:=""
Set pic = Nothing
End If
End Sub
LG
Peer
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA-Bild in Zellbereich einfügen


Schritt-für-Schritt-Anleitung

Um ein Bild in einen Zellbereich von Excel einzufügen und dabei bereits vorhandene Bilder zu ersetzen, kannst du folgende VBA-Prozedur verwenden. Diese Anleitung geht davon aus, dass du Excel 2010 oder höher verwendest.

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel (ALT + F11).
  2. Füge ein neues Modul ein (Rechtsklick auf "VBAProject" > Einfügen > Modul).
  3. Kopiere den folgenden Code in das Modul:
Sub BildLaden()
    Dim sPicture As String, pic As Picture
    sPicture = Application.GetOpenFilename("Grafik laden (*.png), *.png", , "Wähle deine erstellte Unterschrift aus!")
    If sPicture <> "False" Then
        ActiveSheet.Unprotect Password:=""
        ' Vorhandenes Bild löschen, falls vorhanden
        If ActiveSheet.Pictures.Count > 0 Then ActiveSheet.Pictures(ActiveSheet.Pictures.Count).Delete
        Set pic = ActiveSheet.Pictures.Insert(sPicture)
        With pic
            .ShapeRange.LockAspectRatio = msoFalse
            .Height = Range("D45:G49").Height
            .Width = Range("D45:G49").Width
            .Top = Range("D45:G49").Top
            .Left = Range("D45:G49").Left
            .Placement = xlMoveAndSize
        End With
        ActiveSheet.Protect Password:=""
        Set pic = Nothing
    End If
End Sub
  1. Schließe den VBA-Editor und kehre zu deinem Excel-Dokument zurück.
  2. Starte das Makro über die Entwicklertools oder weise es einem Button zu.

Häufige Fehler und Lösungen

  • Laufzeitfehler 13: Typen unverträglich: Dieser Fehler kann auftreten, wenn du versuchst, ein Bild in eine Zelle einzufügen, die nicht existiert oder nicht erkennbar ist. Stelle sicher, dass der Zellbereich, in den du das Bild einfügen möchtest, korrekt definiert ist.

  • Bild wird nicht gelöscht: Wenn das Bild nicht gelöscht wird, überprüfe den Namen des Shapes. Es kann hilfreich sein, das Bild beim Einfügen einen spezifischen Namen zu geben, um es später leichter wiederzufinden.

.Name = "Bild"
  • Blattschutz-Probleme: Wenn der Blattschutz aktiv ist, stelle sicher, dass du den Schutz vor dem Einfügen und nach dem Einfügen des Bildes aufhebst.

Alternative Methoden

  1. Verwendung von Shapes anstelle von Pictures: Du kannst auch Shapes verwenden, um Bilder in Excel einzufügen. Das hat den Vorteil, dass du mehr Kontrolle über die Formateinstellungen hast.
Dim shaShape As Shape
For Each shaShape In ActiveSheet.Shapes
    If shaShape.TopLeftCell.Address = "$E$45" Then
        shaShape.Delete
        Exit For
    End If
Next shaShape
  1. Automatisierung durch Doppelklick: Du kannst das Bild automatisch einfügen, wenn du auf einen bestimmten Zellbereich doppelklickst. Füge dazu den folgenden Code in das entsprechende Blattmodul ein:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Me.Range("E45:F49")) Is Nothing Then
        Call BildLaden
        Cancel = True
    End If
End Sub

Praktische Beispiele

  • Um ein Logo in Excel einzufügen, kannst du den gleichen Code verwenden, indem du den Zellbereich anpasst, wo das Logo erscheinen soll. Achte darauf, dass das eingefügte Bild die richtige Dateiform hat (png oder jpg).

  • Du kannst auch die Option zum Beschriften von Bildern nutzen. Wenn du ein Bild eingefügt hast, kannst du in Excel eine entsprechende Beschriftung hinzufügen, indem du eine Zelle direkt neben dem Bild beschriftest.

Range("D50").Value = "Unterschrift"

Tipps für Profis

  • Nutze die activesheet.pictures-Methode, um eine Liste aller Bilder im aktiven Blatt zu erstellen. So kannst du gezielt mit Bildern arbeiten und sie effizient verwalten.

  • Denke daran, die Größe des Bildes dynamisch an den Zellbereich anzupassen, um sicherzustellen, dass das Bild immer gut aussieht.

  • Wenn du häufig mit Bildern arbeitest, erwäge die Nutzung von benutzerdefinierten Funktionen, um den Prozess zu beschleunigen.


FAQ: Häufige Fragen

1. Wie füge ich ein Bild in Excel ein, ohne die vorhandenen Bilder zu verlieren? Verwende die Methode, die das letzte Bild löscht, bevor ein neues eingefügt wird. Der Code dazu ist bereits im Tutorial enthalten.

2. Kann ich auch andere Bildformate einfügen? Ja, du kannst auch andere Formate wie JPEG verwenden, indem du die Dateitypen im GetOpenFilename-Dialog anpasst.

3. Wie kann ich sicherstellen, dass das Bild die richtige Größe hat? Nutze die Height und Width Eigenschaften, um die Größe des Bildes an die Zellen anzupassen. Achte darauf, die LockAspectRatio-Eigenschaft entsprechend zu setzen.

4. Wie kann ich dem Benutzer ermöglichen, das Bild durch Doppelklicken einzufügen? Füge den Doppelklick-Event-Handler in das Blattmodul ein, um das Bild bei einem Doppelklick automatisch einzufügen.

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