Is there any way to get a shape if you know its Id
?
For example:
Dim myshape As Shape
myshape.Id = 42
myshape = getShapeById(myshape.Id)
Or, alternatively, could I get the shape by Name
?
Dim myshape As Shape
myshape.Name = "Rectangle 42"
myshape = getShapeByName(myshape.Name)
Open up the selection pane, which should be accessed either by Home->Arrange->Selection Pane or if you have the shape selected, Format->[Arrange Panel]->Selection Pane. You can see, select, order, and rename shapes.
To use it, just create a new Module using the developer tools and VBA and then when you need to rename an object or shape, select the shape and run the macro. You will be asked to enter a new shape. Alternatively, you may want to use the Visibility Pane in order to reorder and rename shapes and object.
Getting a shape .Name
by its .Id
is somewhat more convoluted than getting its .Id
by its .Name
.
But here's how it's done:
Sub PrintShapeName()
Debug.Print getNameByID(3, 1)
End Sub
Function getNameByID(shapeID As Long, slide As Integer)
Dim ap As Presentation: Set ap = ActivePresentation
Dim sl As slide: Set sl = ap.Slides(slide)
sl.Shapes.SelectAll
Dim sr As ShapeRange
Set sr = Windows(1).Selection.ShapeRange
Dim s As Shape
For Each s In sr
If s.id = shapeID Then
getNameByID = s.Name
Exit Function
End If
Next
End Function
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With