Получить форму по идентификатору или имени - PullRequest
5 голосов
/ 03 апреля 2011

Есть ли способ получить форму, если вы знаете ее Id?

Например:

Dim myshape As Shape
myshape.Id = 42
myshape = getShapeById(myshape.Id)

Или, альтернативно, я могу получить форму на Name?

Dim myshape As Shape
myshape.Name = "Rectangle 42"
myshape = getShapeByName(myshape.Name)

Ответы [ 4 ]

5 голосов
/ 07 апреля 2011

Получение формы .Name по ее .Id несколько сложнее, чем получение .Id по .Name.

Но вот как это делается:

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
3 голосов
/ 03 апреля 2011

Чтобы получить Shape по Name, вы делаете ...:

Function getShapeByName(shapeName As String, Slide As Integer)
    Set getShapeByName = ActivePresentation.Slides(Slide).Shapes(shapeName)
End Function

Dim myshape As Shape
myshape = getShapeByName("Rectangle 42", 1)
0 голосов
/ 26 марта 2014
sName = ActivePresentation.Slides(k).Shapes(j).Name

где k - номер слайда, j и номер формы на этом слайде.

Вы можете перебирать формы каждой страницы с помощью чего-то вроде:

k = 1
For j = 1 To ActivePresentation.Slides(k).Shapes.Count
Next j

Chris

0 голосов
/ 03 апреля 2011

Не уверен по идентификатору, но по имени используйте объект коллекции Shapes листа

Set myShape = <SheetObject>.Shapes("<ShapeName>")

например

Set myShape = ActiveSheet.Shapes("Rectangle 1")
...