Shape Object

Microsoft Publisher Visual Basic

Shape Object

Multiple objects Shape
Multiple objects

Represents an object in the drawing layer, such as an AutoShape, freeform, OLE object, ActiveX control, or picture. The Shape object is a member of the Shapes collection, which includes all the shapes on a page or in a selection.

Note  There are three objects that represent shapes: the Shapes collection, which represents all the shapes on a document; the ShapeRange collection, which represents a specified subset of the shapes on a document (for example, a ShapeRange object could represent shapes one and four on the document, or it could represent all the selected shapes on the document); the Shape object, which represents a single shape on a document. If you want to work with several shape at the same time or with shapes within the selection, use a ShapeRange collection.

Using the Shape Object

This section describes how to:

Return an existing shape on a document

Use Shapes (index), where index is the name or the index number, to return a single Shape object. The following example horizontally flips shape one on the active document.

Sub FlipShape()
    ActiveDocument.Pages(1).Shapes(1).Flip FlipCmd:=msoFlipHorizontal
End Sub
		

The following example horizontally flips the shape named "Rectangle 1" on the active document.

Sub FlipShapeByName()
    ActiveDocument.Pages(1).Shapes("Rectangle 1") _
        .Flip FlipCmd:=msoFlipHorizontal
End Sub
		

Each shape is assigned a default name when it is created. For example, if you add three different shapes to a document, they might be named "Rectangle 2," "TextBox 3," and "Oval 4." To give a shape a more meaningful name, set the Name property of the shape.

Return a shape or shapes within a selection

Use Selection.ShapeRange(index), where index is the name or the index number, to return a Shape object that represents a shape within a selection. The following example sets the fill for the first shape in the selection, assuming that the selection contains at least one shape.

Sub FillSelectedShape()
    Selection.ShapeRange(1).Fill.ForeColor.RGB = RGB(255, 0, 0)
End Sub
		

The following example sets the fill for all the shapes in the selection, assuming that the selection contains at least one shape.

Sub FillAllSelectedShapes()
    Dim shpShape As Shape
    For Each
shpShape In Selection.ShapeRange
       
shpShape.Fill.ForeColor.RGB = RGB(Red:=255, Green:=0, Blue:=0)
    Next shpShape
End Sub
		

Return a newly created shape

To add a Shape object to the collection of shapes for the specified document and return a Shape object that represents the newly created shape, use one of the following methods of the Shapes collection: AddCallout, AddConnector, AddCurve, AddLabel, AddLine, AddOLEObject, AddPolyline, AddShape, AddTextBox or AddTextEffect. The following example adds a rectangle to the active document.

Sub AddNewShape()
    ActiveDocument.Pages(1).Shapes.AddShape Type:=msoShapeRectangle, _
        Left:=400, Top:=72, Width:=100, Height:=200
End Sub
		

Work with a group of shapes

Use GroupItems (index), where index is the shape name or the index number within the group, to return a Shape object that represents a single shape in a grouped shape. Use the Group or Regroup method to group a range of shapes and return a single Shape object that represents the newly formed group. After a group has been formed, you can work with the group the same way you work with any other shape. This example adds three shapes to the active publication, groups the shapes, and sets the fill color for each of the shapes in the group

Sub WorkWithGroupShapes()

    With ActiveDocument.Pages(1).Shapes
        .AddShape Type:=msoShapeIsoscelesTriangle, Left:=100, _
            Top:=72, Width:=100, Height:=100
        .AddShape Type:=msoShapeIsoscelesTriangle, Left:=250, _
            Top:=72, Width:=100, Height:=100
        .AddShape Type:=msoShapeIsoscelesTriangle, Left:=400, _
            Top:=72, Width:=100, Height:=100
        .SelectAll

        With Selection.ShapeRange
            .Group
            .GroupItems(1).Fill.ForeColor _
                .RGB = RGB(Red:=255, Green:=0, Blue:=0)
            .GroupItems(2).Fill.ForeColor _
                .RGB = RGB(Red:=0, Green:=255, Blue:=0)
            .GroupItems(3).Fill.ForeColor _
                .RGB = RGB(Red:=0, Green:=0, Blue:=255)
        End With
    End With
End Sub
		

Format a shape

Use the Fill property to return the FillFormat object, which contains all the properties and methods for formatting the fill of a closed shape. The Shadow property returns the ShadowFormat object, which you use to format a shadow. Use the Line property to return a LineFormat object, which contains properties and methods for formatting lines and arrows. The TextEffect property returns the TextEffectFormat object, which you use to format WordArt. The Callout property returns the CalloutFormat object, which you use to format line callouts. The TextWrap property returns the WrapFormat object, which you use to define how text wraps around shapes. The ThreeD property returns the ThreeDFormat object, which you use to create 3-D shapes. You can use the PickUp and Apply methods to transfer formatting from one shape to another.

Use the SetShapesDefaultProperties method for a Shape object to set the formatting for the default shape for the document. New shapes inherit many of their attributes from the default shape.

Use other important shape properties

Use the Type property to specify the type of shape: freeform, AutoShape, OLE object, callout, or linked picture, for instance. Use the AutoShapeType property to specify the type of AutoShape: oval, rectangle, or balloon, for instance.

Use the Width and Height properties to specify the size of the shape.

Use TextFrame and TextRange properties to return the TextFrame and TextRange objects, respectively, which contain all the properties and methods for inserting and formatting text within shapes and publications and linking the text frames together. The following example adds a text box to the first page of the active publication, then adds text to it and formats the text.

Sub CreateNewTextBox()
    With ActiveDocument.Pages(1).Shapes.AddTextbox( _
        Orientation:=pbTextOrientationHorizontal, Left:=100, _
        Top:=100, Width:=200, Height:=100).TextFrame.TextRange
        .Text = "This is a textbox."
        With .Font
            .Name = "Stencil"
            .Bold = msoTrue
            .Size = 30
        End With
    End With
End Sub