2015-07-25 6 views
1

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

Вот мой код:

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 

ли кто-то знает правильный синтаксис, чтобы изменить образ через ID?

ответ

1

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

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 
+0

Большое спасибо за ответ. Но я предпочел бы, чтобы это было менее сложным и действительно понравилось бы пользователю, так, как я думал, что это сработает. Я все еще надеюсь, что это будет возможно. Проблема в том, что я не настолько опытен, что мне придется объединить ваше решение со многими функциями массива, которые уже находятся в моем решении. Я не уверен, смогу ли я справиться с этим. -> Кто-нибудь еще с идеей? –

+0

Большое спасибо. Я решил это путем итерации по всем формам, а затем проверки погоды shape.id и мой сохраненный идентификатор - то же самое. –

+0

Приятно слышать. Это то, что я делаю и выше. – Bond

0

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