Get shape by Id or Name

前端 未结 4 1486
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-11 18:55

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)         


        
4条回答
  •  眼角桃花
    2020-12-11 19:04

    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
    

提交回复
热议问题