Доступ к объекту Shape через его идентификатор

У меня есть слайд PowerPoint с 5 фигурами. Я хотел бы делать разные вещи с этими фигурами в макросе. Как я могу изменить одну из этих фигур, используя идентификатор формы? Например, у меня есть две фигуры с именем "Title 1", но я хочу использовать фигуру с идентификатором 15.

Вот мой код:

Sub size_n_spread_v()

    Dim j As Integer
    Dim sld As Slide
    Dim SldId As Long
    gap = std_gap

    SldId = ActiveWindow.View.Slide.SlideIndex
    Set sld = ActivePresentation.Slides(SldId)

    Call SortMultArray

    new_dim = (total_dim - gap * (lngRow - 1)) / lngRow

    'This works but is not specific:
    'sld.Shapes.("Title 1").Height = new_dim 

    'This would hopefully be specific but the syntax does not work Please HELP!
    'sld.Shapes.("Title 1").Id(15).Height = new_dim

End Sub

Кто-нибудь знает правильный синтаксис для изменения формы через идентификатор?


person DrS.    schedule 25.07.2015    source источник


Ответы (2)


Я не знаю, как это сделать, но вы можете написать простую вспомогательную функцию, которую затем сможете использовать в своем проекте, чтобы облегчить себе задачу. Что-то вроде этого будет работать:

Public Function GetShapeById(s As Slide, n As String, id As Long) As Shape

    Dim objShape As Shape
    For Each objShape In s.Shapes
        If StrComp(objShape.Name, n, vbTextCompare) = 0 And objShape.Id = id Then
            Set GetShapeById = objShape
            Exit Function
        End If
    Next

End Function

Тогда вы можете использовать его так:

Sub size_n_spread_v()

    ....

    ' Instead of:
    sld.Shapes.("Title 1").Id(15).Height = new_dim

    ' Use:
    GetShapeById(sld, "Title 1", 15).Height = new_dim

End Sub
person Bond    schedule 25.07.2015
comment
Большое спасибо за ответ. Но я бы предпочел, чтобы он был менее сложным и действительно хотел бы использовать его так, как я думал, что он будет работать. Я все еще надеюсь, что это будет возможно. Проблема в том, что, поскольку я не настолько опытен, мне пришлось бы комбинировать ваше решение со многими функциями массива, которые уже есть в моем решении. Я не уверен, что смогу справиться с этим. --› У кого еще есть идеи? - person DrS.; 25.07.2015
comment
Большое спасибо. Я решил это, перебирая все формы, а затем проверяя, что погода shape.id и мой сохраненный идентификатор совпадают. - person DrS.; 02.08.2015
comment
Рад слышать. Это, по сути, то, что я делаю выше. - person Bond; 02.08.2015

Упомянутая выше функция — единственный способ получить фигуру по Id. Вы должны выполнить поиск в коллекции Shapes, так как нет эквивалентного ShapeIndex, который есть для SlideIndex. Другим решением для поиска определенной формы является уникальная идентификация фигур путем добавления собственного тега, но это более сложное решение.

person Jamie Garroch - MVP    schedule 26.07.2015