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

Forumthread: Bild aus der Zelle ansprechen in VBA

Bild aus der Zelle ansprechen in VBA
28.04.2016 21:18:14
Klexy
Moin.
Ich habe in Zelle B5 ein Bild. Es klebt in der linken oberen Ecke der Zelle.
Ich weiß nicht, wie das Bildobjekt heißt ("Picture 27" oder so).
Das einzige was ich weiß ist B5.
Wie kann ich das Bild in VBA ansprechen?
Oder anders gesagt: wie kann ich eine Spalte nach Zellen durchforsten, die ein Bild enthalten und das dann in eine neue Zelle verschieben?

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bild aus der Zelle ansprechen in VBA
29.04.2016 00:55:41
fcs
Hallo klexy,
hier mal das Grundgerüst für so eine Verschiebe-Aktion.
In dem Beispiel werden die Bilder im aktiven Blatt im Bereich B1:B100 gesucht und nach Tabelle2 in die Spalte C verschoben.
Gruß
Franz
Sub ShapesMove()
Dim objBild As Shape, rngZelle As Range
Dim zeileZ As Long
zeileZ = 2
For Each rngZelle In ActiveSheet.Range("B1:B100")
Set objBild = GetShapeinZelle(Zelle:=rngZelle, bolMsg:=False)
If Not objBild Is Nothing Then
MsgBox "Shape-Name in " & rngZelle.Address(False, False, xlA1) & ": " _
& objBild.Name
'Bild Verschieben (Ausschneiden nd Einfügen)
objBild.Cut
With Worksheets("Tabelle2")
.Paste
.Shapes(.Shapes.Count).Top = .Cells(zeileZ, 3).Top + 2
.Shapes(.Shapes.Count).Left = .Cells(zeileZ, 3).Left + 2
zeileZ = zeileZ + 1
End With
End If
Next rngZelle
End Sub
Function GetShapeinZelle(Zelle As Range, Optional bolMsg As Boolean) As Shape
Dim objShape As Shape
For Each objShape In ActiveSheet.Shapes
If objShape.TopLeftCell.Address = Zelle.Address Then
Set GetShapeinZelle = objShape
Exit For
End If
Next
If GetShapeinZelle Is Nothing And bolMsg = True Then
MsgBox "Kein Bild (Shape) in Zelle """ & Zelle.Address(False, False, xlA1) _
& """ vorhanden", _
vbOKOnly, "Finde Shape"
End If
End Function

Anzeige
AW: Bild aus der Zelle ansprechen in VBA
01.05.2016 03:12:06
Klexy
Hallo Franz,
danke. Mit etwas Tüfteln konnte ich es auf meine Bedürfnisse anpassen.
Es weiß also nur das Bild, in welcher Zelle es ist und nicht die Zelle, dass und welches Bild in ihr ist?

Alternative
29.04.2016 15:51:22
Michael
Hi zusammen,
Franz' Beispiel läuft natürlich bei der geschilderten Problemstellung völlig zufriedenstellend.
Als Fan von Dictionaries hat es mich gejuckt, das mal mit richtig vielen (naja) Daten zu testen, und dann is es natürlich geschickter, alle Shapes nur einmal einzulesen und ein Array zurückzugeben, das man in der aufrufenden Prozedur nach Gusto verwurschteln kann - ich schreibe die Ausgabe halt mal einfach weg.
Die Grafiken sind eine durch unsere "Blaue Nacht" angeregte Spielerei: mir gefällt das Moiré so gut (wenn es denn eines ist).
Die Datei: https://www.herber.de/bbs/user/105342.xlsm
Schöne Grüße,
Michael
P.S.: den Code, mit dem ich das Ding erzeugt habe, habe ich mal weggelassen, aber auf Nachfrage...
P.P.S.: Daß jeweils viele der Grafiken an "einer" Zelle kleben, ist nicht verwunderlich, denn die Shapes je eines Kreises werden immer an die gleiche Position geschrieben, nur die Winkel ändern sich.
Schön nachzuvollziehen ist das, wenn man den letzten Parameter (wierum) auf True setzt.

Anzeige
AW: Alternative
01.05.2016 03:17:10
Klexy
Hallo Michael,
damit kann ich nichts anfangen. Das versteh ich nicht und hab grad keine Zeit, mich reinzuarbeiten.
Trotzdem danke.

AW: Alternative
01.05.2016 14:00:39
Michael
Hi,
bist Du nicht der Klexy aus Nürnberg?
Wenn Du eh keine Zeit hast, Dich zu vertiefen, spare ich mir weitere Erklärungen: Franz' Variante läuft ja sicher zufriedenstellend.
Vielen Dank für die Rückmeldung & schöne Grüße,
Michael
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Bilder in Zellen ansprechen und verschieben mit VBA


Schritt-für-Schritt-Anleitung

Um ein Bild aus einer Zelle in Excel mit VBA anzusprechen und zu verschieben, kannst du folgendes vorgehen:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.
  2. Ein neues Modul hinzufügen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)", wähle "Einfügen" und dann "Modul".
  3. Füge den folgenden Code ein:
Sub ShapesMove()
    Dim objBild As Shape, rngZelle As Range
    Dim zeileZ As Long
    zeileZ = 2
    For Each rngZelle In ActiveSheet.Range("B1:B100")
        Set objBild = GetShapeinZelle(Zelle:=rngZelle, bolMsg:=False)
        If Not objBild Is Nothing Then
            MsgBox "Shape-Name in " & rngZelle.Address(False, False, xlA1) & ": " & objBild.Name
            'Bild Verschieben (Ausschneiden und Einfügen)
            objBild.Cut
            With Worksheets("Tabelle2")
                .Paste
                .Shapes(.Shapes.Count).Top = .Cells(zeileZ, 3).Top + 2
                .Shapes(.Shapes.Count).Left = .Cells(zeileZ, 3).Left + 2
                zeileZ = zeileZ + 1
            End With
        End If
    Next rngZelle
End Sub

Function GetShapeinZelle(Zelle As Range, Optional bolMsg As Boolean) As Shape
    Dim objShape As Shape
    For Each objShape In ActiveSheet.Shapes
        If objShape.TopLeftCell.Address = Zelle.Address Then
            Set GetShapeinZelle = objShape
            Exit For
        End If
    Next
    If GetShapeinZelle Is Nothing And bolMsg = True Then
        MsgBox "Kein Bild (Shape) in Zelle """ & Zelle.Address(False, False, xlA1) & """ vorhanden", vbOKOnly, "Finde Shape"
    End If
End Function
  1. Führe das Makro aus: Drücke F5, während der Cursor im Codefenster ist, oder gehe zurück zu Excel und führe das Makro aus.

Mit diesem Code durchsucht das Skript die Zellen in B1:B100 nach Bildern und verschiebt sie nach Tabelle2 in die Spalte C.


Häufige Fehler und Lösungen

  • Fehler: "Kein Bild (Shape) in Zelle vorhanden": Stelle sicher, dass die Bilder tatsächlich in den Zellen sind und nicht über die Zellen gelegt wurden.
  • Fehler: Das Bild wird nicht verschoben: Überprüfe, ob die Ziel-Tabelle (Tabelle2) existiert und aktiv ist.

Alternative Methoden

Eine alternative Methode zur Verwaltung von Bildern in Zellen kann die Verwendung eines Dictionaries sein, wie von Michael im Forum erwähnt. Dies erfordert jedoch ein tieferes Verständnis von VBA und ist möglicherweise nicht für Anfänger geeignet.


Praktische Beispiele

Um ein Bild in Zelle B5 zu überprüfen und die Informationen zu erhalten, kannst du den folgenden Code verwenden:

Sub CheckImageInCell()
    Dim objBild As Shape
    Set objBild = GetShapeinZelle(Range("B5"))
    If Not objBild Is Nothing Then
        MsgBox "Das Bild in B5 heißt: " & objBild.Name
    Else
        MsgBox "Kein Bild in der Zelle B5 gefunden."
    End If
End Sub

Tipps für Profis

  • Wenn du viele Bilder in Zellen verwaltest, ist es sinnvoll, alle Bilder in ein Array einzulesen und dann nach Bedarf zu verarbeiten. Dies kann die Effizienz erhöhen, besonders bei großen Datenmengen.
  • Nutze die Debug.Print-Anweisung in deinem Code, um Daten während der Ausführung zu überwachen und Probleme leichter zu identifizieren.

FAQ: Häufige Fragen

1. Wie kann ich ein Excel-Bild in eine Zelle kopieren? Um ein Bild in eine Zelle zu kopieren, kannst du es zuerst ausschneiden und dann in die gewünschte Zelle einfügen, wie im oben genannten Code gezeigt.

2. Funktioniert dieser Code in allen Excel-Versionen? Der bereitgestellte Code sollte in Excel 2010 und neueren Versionen funktionieren, die VBA unterstützen. Achte darauf, dass die Makros aktiviert 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