Excel vba: Alle Shapes außer ein bestimmtes Auswählen

Excelmania

Lieutenant
Registriert
Apr. 2010
Beiträge
809
Guten Morgen,

ich habe auf einem Tabellenblatt mehrere Shapes. Der Benutzer kann auch noch beliebig viele ergänzen.

Über eine Schaltfläche sollen alles Shapes bis auf eine Schaltfläche, die eine Useform öffnet, markiert werden.

Ich wollte es mit einer For-Each-Schleife lösen, doch leider wird immer nur das zuletzt eingefügte Shape markiert.

Code:
For Each shp In ActiveSheet.Shapes
    If Not shp.Name = "PM_CB_Menü" Then
    shp.Select
    End If
Next

Wie könnte ich das lösen?
 
  • Gefällt mir
Reaktionen: Janush
Hallo. Danke für den Tipp. Die Methode kenne ich nicht. Wie genau funktioniert die?
 
Select heißt erstmal nur eine Auswahl anwählen.

Ich würde grob so vorgehen, dass ich die Box/Shape welche exkludiert werden soll, klar benenne (geht im VBA Editor im Shape Menü unten links. Da kannst den Namen editieren. Beispielsweise XYZ für den Shape der nicht markiert werden soll.

Dann kannst eine Auswahl erstellen. Diese Auswahl heißt unter Vba Object-Range. In dieser Object-Range müssen nun alle Shapes, außer die eine. Dann musst alle Boxen/Shapes markieren die eben nicht deinem Namen entsprechen abwählen. Das markierte dann der ObjectRange hinzufügen. Ggf. geht auch ShapeRange

Der entscheidende Befehl zum abwählen:

Code:
Dim objRange As Object
Set objRange = ActiveSheet.Shapes.Range(arShapes)

For Each objShape In arShapes
If Left(objShape.Name, 3) <> "XYZ" Then
[...]

irgendwie so, von der Logik her. Ansonsten ist Google aber auch gerade zu voll mit dem Thema, wie man Shape-Ranges, Gruppen usw. usf. erstellt.
 
Die seeeehhhhr einfache Antwort wurde doch schon von DeepBlue gepostet :-) sogar mit Link wo die Beschreibung drin steht.
 
Die Erläuterung von MS sagt mit nichts. Wo soll ich das False setzen?
Ergänzung ()

Folgendes funktioniert nicht:

Code:
ActiveSheet.Shapes.SelectAll
   expression.Select("PM_CB_Menü") = False
Ergänzung ()

Code:
Dim shp As Shape
    
For Each shp In ActiveSheet.Shapes
    If shp.Name <> "PM_CB_Menü" Then shp.Select
Next shp
 
Zuletzt bearbeitet:
Ok ich helf dir kurz, du scheinst mit VBA noch nicht so viel gemacht zu haben.

Code:
Dim shp As Shape

For Each shp In ActiveSheet.Shapes

    If shp.Name <> "PM_CB_Menü" Then shp.Select False

Next shp
 
  • Gefällt mir
Reaktionen: DeepBlue550
Zurück
Oben