Достъп до Shape обект чрез неговия ID

Имам слайд на PowerPoint с 5 форми върху него. Бих искал да правя различни неща с тези форми в макрос. Как мога да променя една от тези форми, като използвам ID на фигурата? Например, имам две форми с име "Title 1", но искам да използвам тази с ID 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

Някой знае ли правилния синтаксис за промяна на формата чрез ID?


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
Много благодаря. Реших това, като повторих всички форми и след това проверих weather 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