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

Forumthread: VBA: Ansprechen von eingefügten Bildern

VBA: Ansprechen von eingefügten Bildern
04.03.2020 21:32:41
eingefügten
Hallo VBA Freunde,
Folgende Ausgangssituation:
Ich habe einen Reiter in der Excel-Mappe in dem ein Protokoll geführt wird --> Spalten A-H
In der "Spalte I" ist eine leere Zelle, in die ein Bild zu dem jeweiligen Protokolleintrag _ eingefügt werden soll (im unteren Makro ist es Spalte I = ActiveCell). Dieses Bild soll der Nutzer selbst von seinem PC auswählen - über ein ActiveX-Button und das Standard-Dialogfenster. Um die eingefügten Bilder dann entsprechend zu richten und die Größe anzupassen, habe ich ein Makro geschrieben:

Sub BilderEinfuegen()
Dim objFile As Object
Dim ObjektDLG As Dialog
Dim T As Double, L As Double
T = ActiveCell.Top
L = ActiveCell.Left
Set ObjektDLG = Application.Dialogs(xlDialogInsertPicture)
ObjektDLG.Show
Application.ScreenUpdating = True
For Each objFile In ActiveSheet.Shapes
objFile.Width = 150
objFile.Top = T
objFile.Left = L
T = T + objFile.Width
Next
Application.ScreenUpdating = False
End Sub

Folgende Problematik:
Das Problem bei dem Makro ist, dass er damit ALLE Shapes anspricht (und damit auch z.B. den ActiveX-Button) und die nacheinander ausrichtet.
Ich möchte jedoch, dass er NUR die neu eingefügten Bilder ausrichtet (es kann sowohl 1 als auch 5 Bilder sein, die der User über das Dialogfenster zum Einfügen auswählt)
Folgende Fragestellung:
Wie spreche ich diese neu eingefügten Bilder an, ohne die bereits vorhanden Bilder/Shapes in dem Reiter anzufassen?
Wäre euch sehr dankbar für Lösungsvorschläge
Viele Grüße
Anton
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Ansprechen von eingefügten Bildern
04.03.2020 22:04:51
eingefügten
Hallo Anton,
folgende Idee.
Ermittle und merke Dir die bereits vorhandenen Bilder und filter sie anschließend aus:
Sub BilderEinfuegen()
 
 Dim objFile As Object
 Dim ObjektDLG As Dialog
 Dim T As Double, L As Double
 Dim sAlteBilder As String
 T = ActiveCell.Top
 L = ActiveCell.Left
 
'Schon vorhandene Bilder ermitteln
 For Each objFile In ActiveSheet.Shapes
   sAlteBilder = sAlteBilder & objFile.Name & ","
 Next
 
 Set ObjektDLG = Application.Dialogs(xlDialogInsertPicture)
 ObjektDLG.Show
 Application.ScreenUpdating = False
 
'Neue Bilder positionieren
 For Each objFile In ActiveSheet.Shapes
   If InStr(sAlteBilder, objFile.Name & ",") = 0 Then
     objFile.Width = 150
     objFile.Top = T
     objFile.Left = L
     T = T + objFile.Width
   End If
 Next
 Application.ScreenUpdating = True
 
End Sub
viele Grüße
Karl-Heinz

Anzeige
AW: VBA: Ansprechen von eingefügten Bildern
05.03.2020 10:05:10
eingefügten
Hallo Karl-Heinz,
Danke für die schnelle Rückmeldung - ist schon mal eine super Lösung, funktioniert mit mehreren Bildern auf einmal.
Die verbleibende Frage wäre für mich: könnte man es auch so programmieren, dass das Makro versteht, wenn ich ein Bild hinzugefügt habe und dann 5 min später noch ein Bild in die gleiche Zelle hinzufügen würde.
Aktuell mit dem Makro würde er ja einfach das neue Bild über dem alten platzieren.
Eine Idee?
Danke schon mal im Voraus
Viele Grüße
Anton
Anzeige
AW: VBA: Ansprechen von eingefügten Bildern
05.03.2020 11:28:35
eingefügten
Hallo Anton,
hier noch eine Erweiterung als Idee:
Sub BilderEinfuegen()
 Dim objShape As Object
 Dim ObjektDlg As Dialog
 Dim T As Double, L As Double, H As Double
 Dim sAlteBilder As String
 T = ActiveCell.Top
 L = ActiveCell.Left
 
'Schon vorhandene Bilder ermitteln und merken
 For Each objShape In ActiveSheet.Shapes
   With objShape
     H = .Height
     With .TopLeftCell
       If .Column = ActiveCell.Column Then
          If .Top + H > T Then T = .Top + H
       End If
     End With
     sAlteBilder = sAlteBilder & .Name & ","
   End With
 Next
 Set ObjektDlg = Application.Dialogs(xlDialogInsertPicture)
 ObjektDlg.Show
 Application.ScreenUpdating = False
 
'Neue Bilder positionieren
 For Each objShape In ActiveSheet.Shapes
   If InStr(sAlteBilder, objShape.Name & ",") = 0 Then
     objShape.Width = 150
     objShape.Top = T
     objShape.Left = L
     T = T + objShape.Width
   End If
 Next
 Application.ScreenUpdating = True
 
End Sub
viele Grüße
Karl-Heinz

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBA: Ansprechen von eingefügten Bildern in Excel


Schritt-für-Schritt-Anleitung

In diesem Abschnitt zeige ich dir, wie du ein VBA-Makro erstellen kannst, um eingefügte Bilder in Excel gezielt anzusprechen und zu bearbeiten.

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.
  2. Einfügen eines neuen Moduls:

    • Klicke mit der rechten Maustaste auf „VBAProject (DeineDatei.xlsx)“ und wähle Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:

    Sub BilderEinfuegen()
       Dim objFile As Object
       Dim ObjektDLG As Dialog
       Dim T As Double, L As Double
       Dim sAlteBilder As String
    
       T = ActiveCell.Top
       L = ActiveCell.Left
    
       'Vorhandene Bilder ermitteln
       For Each objFile In ActiveSheet.Shapes
           sAlteBilder = sAlteBilder & objFile.Name & ","
       Next
    
       Set ObjektDLG = Application.Dialogs(xlDialogInsertPicture)
       ObjektDLG.Show
       Application.ScreenUpdating = False
    
       'Neue Bilder positionieren
       For Each objFile In ActiveSheet.Shapes
           If InStr(sAlteBilder, objFile.Name & ",") = 0 Then
               objFile.Width = 150
               objFile.Top = T
               objFile.Left = L
               T = T + objFile.Width
           End If
       Next
    
       Application.ScreenUpdating = True
    End Sub
  4. Führe das Makro aus:

    • Gehe zurück zu Excel, drücke ALT + F8, wähle BilderEinfuegen und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: Alle Shapes werden verschoben
    Lösung: Stelle sicher, dass du nur die neu hinzugefügten Bilder ansprechen kannst, indem du die Namen der vorherigen Shapes speicherst, wie im obigen Code gezeigt.

  • Fehler: Das Bild wird über ein anderes Bild gelegt
    Lösung: Verwende die Logik im Code, um die Position der neuen Bilder so zu ändern, dass sie unterhalb der bereits vorhandenen Bilder eingefügt werden.


Alternative Methoden

Eine andere Methode, um Bilder in Excel zu verwalten, ist die Verwendung von UserForms. Hier kannst du eine benutzerdefinierte Oberfläche erstellen, um Bilder auszuwählen und hinzuzufügen, ohne den direkten Zugriff auf die Excel-Oberfläche. Das bietet eine bessere Benutzererfahrung.


Praktische Beispiele

Hier ist ein Beispiel für die Verwendung des Makros:

  1. Füge einige Bilder in die Excel-Datei ein und stelle sicher, dass sie in Spalte I sind.
  2. Führe das Makro BilderEinfuegen aus. Jedes neue Bild, das du hinzufügst, wird unter den bestehenden Bildern platziert.

Tipps für Profis

  • Optimierung der Bildgröße: Du kannst den Width-Wert im Code anpassen, um die Bilder in verschiedenen Größen zu formatieren.
  • Verwendung von Variablen: Nutze Variablen, um die Position der Bilder dynamisch anzupassen, je nach Anzahl der bereits eingefügten Bilder.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um mehr als nur die Breite zu ändern?
Du kannst die Höhe ebenfalls anpassen, indem du objFile.Height = ... in den Code einfügst.

2. Funktioniert das Makro in allen Excel-Versionen?
Ja, das Makro sollte in den meisten modernen Excel-Versionen (z.B. Excel 2010 und neuer) funktionieren. Achte jedoch darauf, dass die Dialoge und Objekte in deiner Excel-Version verfügbar sind.

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