AW: Bild identifizieren
10.07.2016 10:08:10
fcs
Hallo Siegfried,
hier hat man mit verschiedenne Problemen zu kämpfen.
1. Wenn eine Grafik/Bild eingefügt wird, dann vergibt Excel einen lokalen Namen (das ist der Name der im Adressfeld angezeigt wird, wenn man die Grafik selektiert; z.B. Grafik 1) und einen internen englischen Namen; z.B. Picture 1).
Unter VBA kann man beide Namen verwenden um das Shape anzusprechen.
2. In der Liste der Shapes werden diese intern so verwaltet, dass ein neues Shape immer am Ende der Liste angefügt wird.
Ändert man die Position eines Shapes in der Tabelle, dann stimmt die Reihenfolge in der Shape-Liste nicht mehr mit der Reihenfolge im Blatt überein.
3. Unter VBA hab ich keine Möglichkeit gefunden, den lokalen Namen aus irgendeiner der Eigenshcaften eines Shapes auszulesen. Du musst also mit den internen Namen leben.
4. Benennt man ein Shape um, dann werden lokaler und interner Name identisch.
Wenn du eine Liste der Shapes(Bilder) in der Reihenfolge erstellen möchtest, wie sie im Blatt angeordnet sind (nach Zeilen/Spalten). Dann muss man die Zeilen/Spalten-Info zur liken-oberen Zelle, in der das Shape plaziert ist, mit erfassen und die Liste dann danach sortieren.
Nachfolgend dein Makro so erweitert, dass die Liste in dieser Form erstellt wird.
Gruß
Franz
Sub ShapeNamen()
Dim Zeile As Long
Dim myDocument As Worksheet
Dim varItem As Variant
Set myDocument = ActiveSheet 'zum Testen so gesetzt
Zeile = 0
For Each varItem In myDocument.Shapes
With varItem
If .Type = msoPicture Then
'Zeile|Spalte Name des Shapes in Tabelle eintragen
Range("BX2").Offset(Zeile, 0).Value = Format(.TopLeftCell.Row, "00000") & "|" _
& Format(.TopLeftCell.Column, "00000") & varItem.Name
Zeile = Zeile + 1
End If
End With
Next varItem
With Range(Range("BX2"), Range("BX2").Offset(Zeile - 1, 0))
'Einträge aufsteigend sortieren
.Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlNo
'Zeile|Spalte aus den Einträgen wieder entfernen
For Each varItem In .Cells
varItem.Value = Mid(varItem.Text, 12)
Next
End With
End Sub