Shape object (Publisher)
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.
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 shapes at the same time or with shapes within the selection, use a ShapeRange collection.
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.
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.
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:
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 ShapeRange.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 that you work with any other shape.
Format a shape
Use the AutoShapeType property to specify the type of AutoShape: oval, rectangle, or balloon, for example.
Use the SetShapesDefaultProperties method to set the formatting for the default shape for the document. New shapes inherit many of their attributes from the default shape.
Use TextFrame and Cell.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.
Use the Type property to specify the type of shape: freeform, AutoShape, OLE object, callout, or linked picture, for example.
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
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
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
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
The following example adds a text box to the first page of the active publication, and 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
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.