Syntax

expression.Range(Index)

expression A variable that represents a GroupShapes object.

Parameters

Name Required/Optional Data Type Description
Index Required Variant The individual shapes to be included in the range. Can be an integer that specifies the index number of the shape, a string that specifies the name of the shape, or an array that contains either integers or strings.

Remarks

Although you can use the property to return any number of shapes, it is simpler to use the Item method if you want to return only a single member of the collection. For example, Shapes(1) is simpler than Shapes.Range(1).

Example

This example sets the fill pattern for shapes one and three on myDocument.

Visual Basic for Applications
Set myDocument = Worksheets(1) myDocument.Shapes.Range(Array(1, 3)) _ .Fill.Patterned msoPatternHorizontalBrick

To specify an array of integers or strings for Index, you can use the Array function. For example, the following instruction returns two shapes specified by name.

Visual Basic for Applications
Dim arShapes() As Variant Dim objRange As Object arShapes = Array("Oval 4", "Rectangle 5") Set objRange = ActiveSheet.Shapes.Range(arShapes) 

In Microsoft Excel, you cannot use this property to return a ShapeRange object containing all the Shape objects on a worksheet. Instead, use the following code:

Visual Basic for Applications
Worksheets(1).Shapes.SelectAll ' select all shapes set sr = Selection.ShapeRange ' create ShapeRange 

This example sets the fill pattern for the shapes named "Oval 4" and "Rectangle 5" on myDocument.

Visual Basic for Applications
Dim arShapes() As Variant Dim objRange As Object Set myDocument = Worksheets(1) arShapes = Array("Oval 4", "Rectangle 5") Set objRange = myDocument.Shapes.Range(arShapes) objRange.Fill.Patterned msoPatternHorizontalBrick

This example sets the fill pattern for shape one on myDocument.

Visual Basic for Applications
Set myDocument = Worksheets(1) Set myRange = myDocument.Shapes.Range(1) myRange.Fill.Patterned msoPatternHorizontalBrick

This example creates an array that contains all the AutoShapes on myDocument, uses that array to define a shape range, and then distributes all the shapes in that range horizontally.

Visual Basic for Applications
Set myDocument = Worksheets(1) With myDocument.Shapes numShapes = .Count If numShapes > 1 Then numAutoShapes = 1 ReDim autoShpArray(1 To numShapes) For i = 1 To numShapes If .Item(i).Type = msoAutoShape Then autoShpArray(numAutoShapes) = .Item(i).Name numAutoShapes = numAutoShapes + 1 End If Next If numAutoShapes > 1 Then ReDim Preserve autoShpArray(1 To numAutoShapes) Set asRange = .Range(autoShpArray) asRange.Distribute msoDistributeHorizontally, False End If End If End With

See also: