Excel VBA: dynamische Arrays für Bildauswahl

Hallo zusammen,

stehe vor folgendem Problem:

über eine Schleife werden in Excel Bilder eingefügt, deren Namen (in Excel) fortlaufend sind zb: Bild1, bild2 usw…
Ich habe auch ein dynamisches array, welches die Bildnamen enthält. zb:
bei 3 Bildern Feld=array(„Bild1“,„Bild2“,„Bild3“) usw. (Anzahl Einträge = Anzahl Bilder)
Meine Frage ist nun, ob ich genau die Bilder selektieren kann, die in diesem dynamischen array enthalten sind.
Wenn ich ein Makro aufzeichne, sieht der Code folgendermaßen aus:

ActiveSheet.Shapes.Range(Array(„bild1“, „bild2“, „bild3“)).Select.

Das Problem ist, dass ich diesen Befehl nicht mit dem dynamischen Array hinkriege:
zB: ActiveSheet.Shapes.Range(Feld).Select

Hier mal ein Beispielcode:

Sub test()
'Beispiel setzt voraus, dass in der Tabelle, 3 Bilder mit bild1…bild3 benamt existieren
Dim bildname As Variant
bildname = Array(„dummy“)
For i = 1 To 3
ReDim Preserve bildname(i - 1)
bildname(i - 1) = „bild“ & i
Next i
’ Funktioniert, greift aber nicht auf das dynamische Array zu
ActiveSheet.Shapes.Range(Array(„bild1“, „bild2“, „bild3“)).Select

Range(„A1“).Select 'Zelle A1 auswählen

’ Funktioniert nicht
ActiveSheet.Shapes.Range(Array(bildname)).Select
End Sub

Ich hoffe ich konnte mein Anliegen deutlich ausdrücken und hoffe dass jmd eine Lösung kennt.

Gruß Ahmet

’ Funktioniert nicht
ActiveSheet.Shapes.Range(Array(bildname)).Select

Hallo Ahmet,

für alle Bilder:
sub alle()
Worksheets(„Tabelle1“).DrawingObjects.Select
end sub

Option Explicit

Sub test()
Dim bildname(), i As Integer
With Worksheets("Tabelle1")
 For i = 1 To 3
 ReDim Preserve bildname(i - 1)
 bildname(i - 1) = "bild" & i
 Next i
 .DrawingObjects(bildname).Select
End With
End Sub

Gruß
Reinhard

Sub test()
Dim bildname(), i As Integer
With Worksheets(„Tabelle1“)
For i = 1 To 3
ReDim Preserve bildname(i - 1)
bildname(i - 1) = „bild“ & i
Next i
.DrawingObjects(bildname).Select
End With
End Sub

Hat wunderbar funktioniert DANKE!!!

Sub test()
Dim bildname(), i As Integer
With Worksheets(„Tabelle1“)
For i = 1 To 3
ReDim Preserve bildname(i - 1)
bildname(i - 1) = „bild“ & i
Next i
.DrawingObjects(bildname).Select
End With
End Sub

Hallo Ahmet,

mal paar Bemerkungen, nein, keine belehrung o.ä., aber wenn du
vorhast weiter in Vba zu codieren so lese es dir bitte zumindest durch. Rückfragen kannste natürlich stellen.

Stelle in den Optionen vom VB_Editor bitte ein daß
Variablendeklaration erforderlich ist, dann haste in neuen Mappen in
den Modulen immer oben Option Explicit.

predim reserve ist ja gut und schön. Und in deiner Kurz-Schleife
von 1-3 auch okay.
Was aber ist wenn die Schleife von 1-300000 geht?
Dann wird genausoft Redim ausgeführt.
Für was? das bremst doch nur.

Meine Idee wäre du deklarierst das so:
Dim bildname(2)
Dann kannste die Redim zeile löschen.
Klappt natürlich auch bei 300000.

Und bei dem Code kannste auch
Dim bildname(20) oder Dim bildname(400000) hinschreiben.
Wenn evtl. unklar beim Start des Codes wieviel Shapes es denn nun
sind, na und, da machste einmal vor der Schleife Redim preserve
bildname(.shapes.count) o.ä.

Ansonsten, schön daß es klappt.

Gruß
Reinhard