Über Shapers iterieren und bestimmte zählen

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
Benutzeravatar
thowe
Beiträge: 209
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 79 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Über Shapers iterieren und bestimmte zählen

#1

Beitrag von thowe »

Hallo liebe Foristen und Experten:

In einem Projekt habe ich unter anderem die Aufgabenstellung bestimmte Shapes zu zählen.
Deren zu berücksichtigende Eigenschaft ist lediglich ihr Name selbst. Dieser ist zB:

shpButtonOkay1
(wobei 1 auch - höchstwahrscheinlich zweistellig sein kann), also bis shpButtonOkay99, oder
shpButtonCancel1 (wobei 1 auch - höchstwahrscheinlich zweistellig sein kann), also bis shpButtonCancel99

Mit einer quick & dirty Lösung könnte ich so vorgehen, zumindest bis einstellig vorhandene Shapes (...9)

Code: Alles auswählen

    With wshNavigation
        For Each myShape In wshNavigation.Shapes
            If Left(myShape.Name, Len(myShape.Name) - 1) = "shpOkayGM" Then
                lngShapeButtonsOkayNumbers = lngShapeButtonsOkayNumbers + 1
            End If
        Next
    End With


Ich könnte mit einer Select Case Anwendung auch noch zweistellig abfangen. Mir gefällt das nicht. Wer hatte bessere Ideen?
Ich stehe gerade am Schlauch

Wenn mehr Informationen notwendig sind, reiche ich diese gerne nach...

LG
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: Über Shapers iterieren und bestimmte zählen

#2

Beitrag von d'r Bastler »

Moin Thomas,

warum gehst Du den Shape-Namen nicht von hinten an und filterst zeichenweise mit isNumeric schon mal den numerischen Wert? in einem zweiten Schritt dann Cancel oder Okay.

Und dann noch die Frage, wozu muss man diese Shapes zählen?

lg
Folgende Benutzer bedankten sich beim Autor d'r Bastler für den Beitrag:
thowe
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
xlKing
Beiträge: 37
Registriert: 30. Mai 2024, 19:42
Hat sich bedankt: 2 Mal
Danksagung erhalten: 35 Mal
Kontaktdaten:

Re: Über Shapers iterieren und bestimmte zählen

#3

Beitrag von xlKing »

Hallo Thowe,

was willst du denn genau zählen? Willst du nur Buttons zählen, die Okay oder Cancel im Namen haben oder willst du alles mit diesen Namen zählen?
Wenn es sich nur um Buttons handelt, dann könntest du zuvor auf den Typ Button prüfen. z.B. mit diesem Code:

Code: Alles auswählen

Sub Buttons_Zaehlen()
  
  Dim btnOkay As Long, btnCancel As Long
  For Each shp In ActiveSheet.Shapes
    If shp.Type = msoFormControl Then
      If shp.FormControlType = xlButtonControl Then
        If InStr(shp.Name, "Okay") > 0 Then btnOkay = btnOkay + 1
        If InStr(shp.Name, "Cancel") > 0 Then btnCancel = btnCancel + 1
      End If
    End If
  Next shp
  
  MsgBox "OkayButons:    " & btnOkay & vbNewLine _
       & "CancelButtons: " & btnCancel
  
End Sub
Falls du alle Shapes zählen willst, die einen bestimmten Namen haben und die Anzahl nach Namen gruppieren willst, dann könntest du das so machen:

Code: Alles auswählen

Sub Shapetypes_Zaehlen()
  
  Dim d                   'Create a variable
  Set d = CreateObject("Scripting.Dictionary")
  
  For Each shp In ActiveSheet.Shapes
    For p = Len(shp.Name) To 1 Step -1
      If Not Mid(shp.Name, p, 1) Like "[0-9]" Then Exit For
    Next p
    If Not d.exists(Left(shp.Name, p)) Then d.Add Left(shp.Name, p), 0
    d(Left(shp.Name, p)) = d(Left(shp.Name, p)) + 1
  Next shp
  
  a = d.items
  k = d.keys
  For i = 0 To d.Count - 1
    Debug.Print Trim(k(i)) & ": " & a(i)
  Next i

End Sub
Im unteren Beispiel habe ich mehrere Buttons, Rectangles, Ovals und Triangles angelegt, die dann nicht nach Typ sondern nach Objekten mit gleichem Namen gezählt werden. Die Liste wird aktuell im Direktfenster angezeigt kann aber auch gern auf ein Sheet übernommen werden.

Achtung: Wenn es ein Triangle99 gibt heißt das noch lange nicht, dass es 99 Dreiecke gibt, sondern nur, dass du schon 99 Shapes angelegt hast, wobei einige zwischendurch auch wieder gelöscht sein können. Auf dem Blatt müssen sich also nicht unbedingt 99 Shapes befinden. Dennoch zählt der Excel-Interne Counter munter hoch. An dessen aktuellen Wert kommst du aber leider nicht ran. Da gibt's keine Eigenschaft für.

Gruß Mr. K.
Folgende Benutzer bedankten sich beim Autor xlKing für den Beitrag (Insgesamt 2):
d'r Bastler, thowe
Benutzeravatar
thowe
Beiträge: 209
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 79 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Über Shapers iterieren und bestimmte zählen

#4

Beitrag von thowe »

Hallo xlKing!

Danke.
Achtung: Wenn es ein Triangle99 gibt heißt das noch lange nicht, dass es 99 Dreiecke gibt, sondern nur, dass du schon 99 Shapes angelegt hast, wobei einige zwischendurch auch wieder gelöscht sein können. Auf dem Blatt müssen sich also nicht unbedingt 99 Shapes befinden. Dennoch zählt der Excel-Interne Counter munter hoch. An dessen aktuellen Wert kommst du aber leider nicht ran. Da gibt's keine Eigenschaft für.
Das hatte ich mir gedacht! Nun gut, muss ich mir überlgen, wie ich mein Vorhaben- anders - umsetze.
Dein Hinweis hat mir sehr viel geholfen, Danke dafür!
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste