Как применить конкретный макет в PowerPoint с помощью VBA? - PullRequest
6 голосов
/ 05 февраля 2012

Я работаю над одним проектом. В этом я сделал одну пользовательскую тему, которая включает в себя один мастер-слайд и, возможно, макеты. так что в основном я хочу применить определенный макет к конкретным слайдам. Так есть ли способ сделать это программно. как:

activepresentation.Slides (1) .Layout = "layoutname"

Я знаю, что приведенный выше код неверен, но я хочу, чтобы что-то вроде этого вызывало определенный макет по имени. для вашей информации, мой макет называется «Название без логотипа клиента».

Спасибо

Ответы [ 2 ]

5 голосов
/ 05 февраля 2012

ActivePresentation.Slides (1) .CustomLayout = ActivePresentation.Designs (1) .SlideMaster.CustomLayouts (x)

где x - это индекс в коллекции макетов, представляющий ваш пользовательский макет.

В отличие от большинства других таких коллекций в OM PPT, этот, кажется, не может принять ни индекс, ни имя. Это должен быть индекс.

Если вам нужно поработать с именем, напишите функцию, которая выполняет итерацию по коллекции CustomLayouts, пока не найдет нужное вам имя и не вернет индекс.

3 голосов

Используйте следующий код

Sub ApplyLayoutByIndex()

    Dim sld As Slide
    Dim shp As Shape
    Dim xName As String
    Set sld = Application.ActiveWindow.View.Slide
    Dim xIndex As Integer

    xName = "A final slide"

    xIndex = getLayoutIndexByName(xName)

    If xIndex = 0 Then
    MsgBox "The layout name" & xName & "not found. Check the name of the layout", vbOKOnly
    Exit Sub
    End If

    sld.CustomLayout = ActivePresentation.Designs(1).SlideMaster.CustomLayouts(xIndex)

    End Sub

    Function getLayoutIndexByName(xName As String) As Integer
    ActivePresentation.Designs(1).SlideMaster.CustomLayouts.Item (1)
    With ActivePresentation.Designs(1).SlideMaster.CustomLayouts
        For i = 1 To .Count
            If .Item(i).Name = xName Then
            getLayoutIndexByName = i
            Exit Function
            End If
        Next
    End With

    End Function

Спасибо!

...