2012-02-05 16 views
5

Pracuję nad jednym projektem. W tym zrobiłem jeden niestandardowy motyw, który zawiera jeden główny slajd i może układy. więc w zasadzie chcę zastosować konkretny układ do konkretnych slajdów. Czy istnieje sposób, aby zrobić to programowo. jak:Jak zastosować określony układ w programie PowerPoint przy użyciu vba?

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

wiem powyższy kod jest niewłaściwy, ale chcę coś takiego nazwać szczególny układ według jego nazwy. dla twojej informacji moja nazwa układu to "Tytuł bez logo klienta".

Dzięki

Odpowiedz

4

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

gdzie x jest indeksem do kolekcji układów, które reprezentuje układ niestandardowy.

W przeciwieństwie do większości innych kolekcji w PPT OM, ten wydaje się niezdolny do zaakceptowania indeksu lub nazwy. Musi to być indeks.

Jeśli potrzebujesz pracować z tą nazwą, napisz funkcję, która będzie iterować poprzez kolekcję CustomLayouts, dopóki nie znajdzie szukanej przez ciebie nazwy i zwróci indeks.

+0

Hej steve, faktycznie rozwiązałem mój problem. masz do tego odpowiednią funkcję. I napisałem to. Dzięki za komentarz. –

+0

Chcesz się podzielić swoją funkcją @PratikGujarathi? Wiem, że to dość proste, ale zaoszczędziłoby to przyszłym widzom tego pytania. – sfarbota

3

użyć następującego kodu

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 

Dzięki!

Powiązane problemy