Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Shapes-Eigenschaften

Forumthread: Shapes-Eigenschaften

Shapes-Eigenschaften
13.09.2005 23:05:42
windalf
Hallo...
Ich habe folgendes Problemchen...
Ich habe auf einem Exceltabellenblatt viele Shapes...
Ich möchte diese nun alle einzelen in einer Schleife durchgehen und wenn es sich bei dem Shape um eine "Rechteck" oder "Oval" handelt etwas mit dem text der dort drinne steht verantalten. Funktioniert soweit auch schon ganz gut allerdings habe ich das Problem das wenn z.B. andere Shapes auf der Oberfläche liegen diese nicht ignoriert werden...
For i = 0 To count_shapes - 1
If ActiveSheet.Shapes(i + 1).Type = msoShapeRectangle Or ActiveSheet.Shapes(i + 1).Type = msoShapeOval Then
'irgendwas mit anstellen...
End If
Next i
Dies funktioniert leider nicht da z.B. ein Pfeil anscheinend auch ein msoShapeRectangle ist und damit die Bedinung true wird. Wie kann ich das verhindern. Ich hoffe ihr wisst was ich meine...
Besten Dank Gruß Windalf
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Shapes-Eigenschaften
13.09.2005 23:23:22
Ramses
Hallo
"... da z.B. ein Pfeil anscheinend auch ein msoShapeRectangle ist ..."
Das glaubst du doch nun wohl selbst nicht :-) !?
Bei VBA-Gut sollte die Funktion des Makrorekorders zum kleinen 1*1 gehören
Sub Makro1()
    ActiveSheet.Shapes.AddShape(msoShapeRectangle, 85.8, 44.4, 105.6, 43.8). _
        Select
    ActiveSheet.Shapes.AddShape(msoShapeOctagon, 95.4, 111.6, 78#, 76.2). _
        Select
    ActiveSheet.Shapes.AddShape(msoShapeRightArrow, 88.2, 236.4, 116.4, 49.8). _
        Select
    ActiveSheet.Shapes.AddShape(msoShapeQuadArrow, 90#, 321.6, 124.2, 79.8). _
        Select
End Sub

Gruss Rainer
Anzeige
AW: Shapes-Eigenschaften
13.09.2005 23:35:49
windalf
@Ramses
Kopfklatsch... Ja ich hab vor lauter Code irgendwie geschlafen.... Es scheint so zu funktionieren wie ich will nur an anderer Stelle hab ich die Bedindung vergessen gehabt und da ist er mir rausgehauen. Ich war mir aber sicher gewesen das ich da nen Copy und Paste gemacht hatte...
Danke..
Zu dem Level... Wo kann ich den bei VBA z.B. Anfänger einstellen? Da geht imho nur Nein was mal überhaupt nicht stimmt das ich Null Ahnung vom Proggen habe nur VBA kenn ich (noch) nicht gut. Aber prinzipiell hab ich mit dem Proggen kein Problem ist eher das Problemchen wie die ganzen Objekte in VBA heissen, die Syntax ist ja nicht soviel als das man die nicht schnell auf die Pfanne bekommt.... Oder hab ich da was übersehen und man kann bei Level auch Anfänger VBA einstellen? ich wollte mit dem Level nur verhindern antworten für Dumme zu bekommen...
Anzeige
AW: Shapes-Eigenschaften
13.09.2005 23:39:59
Ramses
Hallo
Das Level-Problem ist so uralt ....
Anyway,... es gibt keine Antworten für Dumme.
Die sind höchtens etwas ausführlicher :-)
Gruss Rainer
AW: Shapes-Eigenschaften
13.09.2005 23:59:08
windalf
es klappt doch nicht so wie ich gedacht habe... folgendes versteh ich nicht...
count_shapes = ActiveSheet.Shapes.Count

count_relevant_shapes = 0
For i = 0 To count_shapes - 1
If ActiveSheet.Shapes(i + 1).Type = msoShapeRectangle Or ActiveSheet.Shapes(i + 1).Type = msoShapeOval Then
x_pos(i) = ActiveSheet.Shapes(i + 1).Left
y_pos(i) = ActiveSheet.Shapes(i + 1).Top + ActiveSheet.Shapes(i + 1).Height / 2
shapesorder(i) = i
count_relevant_shapes = count_relevant_shapes + 1
End If
Next i
MsgBox(count_relevant_shapes)...
Ich habe mir 8 Shapes auf der tabelle gemalt... ein paar Ovale und ein paar Rechtecke und genau einen Pfeil... Warum schmeisst er mir immer 8 aus obwohl es nur 7 sein dürfen... wo ist da in meiner Bedinung der Wurm... Ich versteh es einfach nicht... Wenn ich noch nen Pfeilchen dazunehme werden es halt 9 obwohl es 7 sein sollten...
Hab ich gerade ein totales Brett vorm Kopf oder was mach ich falsch?
Anzeige
AW: Shapes-Eigenschaften
14.09.2005 01:06:01
Nepumuk
Hi,
Ovale und Rechtecke sind von Type ein MsoShapeType mit den Werten:
msoAutoShape = 1 (für Rechteck und Oval)
msoLine = 9
die MsoAutoShapeType haben folgende Werte:
msoShapeRectangle = 1
msoShapeOval = 9
Du musst als nicht den Type, sondern den AutoShapeType abfragen.
Gruß
Nepumuk

Anzeige
AW: Shapes-Eigenschaften
14.09.2005 21:16:38
Windalf
Besten Dank Nepi...
;
Anzeige

Infobox / Tutorial

Shapes-Eigenschaften in Excel VBA effektiv nutzen


Schritt-für-Schritt-Anleitung

  1. Zähle die Shapes auf dem AktiveSheet:

    count_shapes = ActiveSheet.Shapes.Count
  2. Initialisiere einen Zähler für relevante Shapes:

    count_relevant_shapes = 0
  3. Durchlaufe alle Shapes:

    For i = 0 To count_shapes - 1
       If ActiveSheet.Shapes(i + 1).Type = msoShapeRectangle Or ActiveSheet.Shapes(i + 1).Type = msoShapeOval Then
           ' Speichere Positionen oder führe Aktionen aus
           count_relevant_shapes = count_relevant_shapes + 1
       End If
    Next i
  4. Zeige die Anzahl der relevanten Shapes an:

    MsgBox(count_relevant_shapes)

Häufige Fehler und Lösungen

  • Problem: Shapes werden nicht korrekt gezählt.

    • Lösung: Achte darauf, den richtigen Typ abzufragen. Verwende die AutoShapeType-Eigenschaft.
      If ActiveSheet.Shapes(i + 1).AutoShapeType = msoShapeRectangle Or ActiveSheet.Shapes(i + 1).AutoShapeType = msoShapeOval Then
  • Problem: Shapes, die nicht relevant sind, werden gezählt (z.B. Pfeile).

    • Lösung: Nutze die AutoShapeType-Abfrage anstelle der Type-Abfrage, um nur die gewünschten Formen zu erfassen.

Alternative Methoden

  • Du kannst Shapes auch mit der AddShape-Methode hinzufügen:
    ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 100, 50)

    Diese Methode eignet sich besonders, wenn du dynamisch neue Shapes in deinem Excel-Dokument erstellen möchtest.


Praktische Beispiele

  1. Beispiel: Shapes zählen und deren Eigenschaften ausgeben:

    Sub CountShapes()
       Dim count_shapes As Integer
       Dim count_relevant_shapes As Integer
       count_shapes = ActiveSheet.Shapes.Count
       count_relevant_shapes = 0
    
       For i = 0 To count_shapes - 1
           If ActiveSheet.Shapes(i + 1).AutoShapeType = msoShapeRectangle Or ActiveSheet.Shapes(i + 1).AutoShapeType = msoShapeOval Then
               count_relevant_shapes = count_relevant_shapes + 1
           End If
       Next i
       MsgBox "Anzahl relevanter Shapes: " & count_relevant_shapes
    End Sub
  2. Beispiel: Shapes mit spezifischen Eigenschaften bearbeiten:

    Sub EditShapes()
       Dim shp As Shape
       For Each shp In ActiveSheet.Shapes
           If shp.AutoShapeType = msoShapeRectangle Then
               shp.Fill.ForeColor.RGB = RGB(255, 0, 0) ' Färbt Rechtecke rot
           End If
       Next shp
    End Sub

Tipps für Profis

  • Verwende With-Anweisungen: Um den Code lesbarer zu machen, kannst du With-Anweisungen verwenden, wenn du mehrere Eigenschaften eines Shapes bearbeiten möchtest.

    With ActiveSheet.Shapes(i + 1)
      .Fill.ForeColor.RGB = RGB(0, 255, 0)
      .Line.Visible = msoFalse
    End With
  • Nutze Select sparsam: Vermeide die Verwendung von .Select, um die Performance zu verbessern.


FAQ: Häufige Fragen

1. Wie zähle ich nur spezifische Shape-Typen in Excel VBA?
Du kannst die AutoShapeType-Eigenschaft verwenden, um nur Rechtecke oder Ovale zu zählen. Beispiel:

If shp.AutoShapeType = msoShapeRectangle Or shp.AutoShapeType = msoShapeOval Then

2. Wie kann ich neue Shapes mit VBA erstellen?
Verwende die AddShape-Methode, um neue Shapes programmgesteuert hinzuzufügen:

ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 100, 50)

3. Warum wird ein Pfeil als Rechteck gezählt?
Das liegt daran, dass die Type-Eigenschaft nicht zwischen den verschiedenen Shape-Arten unterscheidet. Verwende stattdessen die AutoShapeType-Eigenschaft.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige