VBA: Mehrere Shapes auswählen
Hi,
ich würde gerne alle Shapes eines bestimmten Typs auswählen. Die Selection bekomme ich noch einigermaßen einfach hin. Bei der Auswahl der gespeicherten Shapes hapert es dann allerdings. Hat da vielleicht jemand ne Ahnung?
Grüße
Oli
Sub Makro2()
Dim bilder As Shape
Dim alle_bilder(100)
counter = 0
For Each bilder In ActiveSheet.Shapes
nm = bilder.Name
If bilder.Type = 17 Then
If counter = 0 Then
alle_bilder(1) = bilder.Name
counter = 1
Else
counter = counter + 1
alle_bilder(counter) = bilder.Name
End If
End If
Next bilder
ActiveSheet.Shapes.Range(alle_bilder).Select
End Sub
Antwort schreiben
Antwort 1 von Beverly vom 23.03.2019, 14:17 Options
Hi Oli,
versuche es mit folgendem Code
Sub Makro2()
Dim bilder As Shape
Dim alle_bilder()
Dim counter As Integer
counter = 0
For Each bilder In ActiveSheet.Shapes
If bilder.Type = 17 Then
ReDim Preserve alle_bilder(0 To counter)
alle_bilder(counter) = bilder.Name
counter = counter + 1
End If
Next bilder
ActiveSheet.Shapes.Range(alle_bilder).Select
End Sub
Bis später,
Karin
Antwort 2 von Oli00 vom 28.03.2019, 10:50 Options
Also es ist jetzt sicher nicht verwunderlich für dich, aber es funktioniert :)
Meine Frage die bleibt: "Wieso funktioniert es?"
Erst habe ich Redim weggelassen, was nicht funktioniert hat.
Mein Gedanke war, dass Ihm vielleicht die Array Dimension fehlt. Also habe ich das Array auf 50 gesetzt. Hat auch nicht funktioniert.
Dann dachte ich, dass die Range methode die leeren Arrayzellen versucht auch anzuwählen oder einfach misinterpretiert. Also habe ich das Array auf 3 gesetzt, weil ich drei Shapes habe, die ich selektieren möchte. Hat auch nicht funktioniert.
Das Redim preserve ist doch eigentlich nur dafür da das Array von der Größe her anzupassen oder!?
Viele Grüße
Oli
Antwort 3 von Beverly vom 28.03.2019, 18:47 Options
Hi Oli,
in meinem Code bin ich davon ausgegangen, dass nicht bekannt ist, wie viele Bilder sich in deiner Tabelle befinden, weshalb ich ein nach oben offenes Array verwendet habe.
In deinem Code ist folgender Fehler: jedes Array beginnt bei 0, du schreibst jedoch das erste Bild nicht auf 0 sondern auf 1. Wenn du diese Codezeile vor das Makro schreibst
Option Base 1
sollte es eigentlich funktionieren.
Bis später,
Karin