Alle Shapes durchlaufen

Eine rekursive Funktion zu schreiben, die alle Shapes (auch die Shapes in Gruppen) auflistet, ist nicht sehr schwierig:

Private Sub BistDuGruppe(vsshape As Visio.Shape)
Dim i As Long
ReDim Preserve lngShapeID(UBound(lngShapeID) + 1) ‚ — vergrößere die Dimension
lngShapeID(UBound(lngShapeID)) = vsshape.ID
If LiegstDuAufRichtigemLayer(vsshape) = False Then
For i = 1 To vsshape.Shapes.Count
Call BistDuGruppe(vsshape.Shapes(i))
Next i
End If
End Sub

Sie wird von außen aufgerufen:

For i = 1 To vsBlatt.Shapes.Count
Call BistDuGruppe(vsBlatt.Shapes(i))
Next i

Allerdings benötige ich die X- und die Y-Position der Shapes. Dabei fällt auf, dass der Wert des Result der Zelle PosX und PosY in Relation zum übergeordneten Shape berechnet wird und nicht die Absolut-Koordinten des Zeichenblattes widergibt. Also muss man auf das „Chef“-Shape zugreifen:

Private Function WerIstBossVonGruppe(vsshape As Visio.Shape) As String
Dim vsShapeTemp As Visio.Shape
Set vsShapeTemp = vsshape

If TypeName(vsshape.Parent) = „Shape“ Then
Set vsShapeTemp = vsBlatt.Shapes(WerIstBossVonGruppe(vsShapeTemp.Parent))
End If

WerIstBossVonGruppe = vsShapeTemp.Name

End Function

Wenn ein Shape Teil einer Gruppe ist, dann liefert TypeName(vsshape.Parent) die Info „Page“.

Man kann alle Shapes mit ihrer Position auslesen.
Man kann alle Shapes mit ihrer Position auslesen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert