Dealing with group parameters (colors, shape overlaps etc).

Hello, all.

Once again I am running into something that is probably easy, but just cannot figure it out. A group shape is treated as a Shape by VBA. We can set its parameters with the same commands that are used with simple shapes. Let us pretend our selected shape is a group and do this:

Sub GroupTrouble()
    Dim S As Shape
    Set S = ActiveSelectionRange.Shapes.First
    S.Outline.SetProperties 1, , CreateRGBColor(255, 0, 0)
End Sub

That works just fine (as well as most simple shape commands - fill, movement, rotation etc), but this:

Sub GroupTrouble()
    Dim S As Shape
    Set S = ActiveSelectionRange.Shapes.First
    Debug.Print S.Outline.Color.RGBGreen
End Sub

Throws an error. We cannot get settings from a group as from a shape.

In my case the important options are outline colors and the ability to do IsOnCurve checkups. I have done some functions that go through the subshapes. But, for example, CreateBoundary creates an object that is already inside the group and that is super annoying. Same with other functions.

Any help with this will be greatly appreciated.

Parents
No Data
Reply
  • Joe, 

    Here is also some code that Alex shared years ago. It shows a couple of good things. I hope you find it useful. :-) 

    Public Sub ExtractSelectedFromGroup()
        Dim sObj As Shape
        Dim sGroup As Shape
        
        Set sObj = ActiveShape
        If sObj Is Nothing Then
            MsgBox "Nothing selected", vbCritical
            Exit Sub
        End If
        
        Set sGroup = sObj.ParentGroup
        If sGroup Is Nothing Then
            MsgBox "Selected object is not part of a group", vbCritical
            Exit Sub
        End If
        
        If sGroup.Shapes.Count < 3 Then
            ' Only two (or less) objects in a group.
            ' Should just ungroup everything
            sGroup.Ungroup
        Else
            ' Extract the object and put in in front of the group
            sObj.OrderFrontOf sGroup
        End If
        
        sObj.CreateSelection
    End Sub
    
Children
No Data