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