2012-02-05 34 views
5

Estoy trabajando en un proyecto. En eso hice un tema personalizado que incluye una diapositiva maestra y diseños de may. así que básicamente quiero aplicar un diseño particular a diapositivas específicas. Entonces, ¿hay alguna forma de hacerlo programáticamente? como:¿Cómo aplicar un diseño particular en powerpoint usando vba?

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

sé por encima de código es incorrecto pero quiero algo como esto para llamar la disposición particular, por su nombre. para su información, el nombre de mi diseño es "Título sin logotipo del cliente".

Gracias

Respuesta

4

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

donde x es el índice en la colección de diseños que representa su diseño personalizado.

A diferencia de otras colecciones similares en el PPT OM, parece que este no puede aceptar ni un índice ni un nombre. Debe ser un índice.

Si necesita trabajar con el nombre, escriba una función que itere a través de la colección CustomLayouts hasta que encuentre el nombre que busca y devuelva el índice.

+0

hey steve, en realidad he resuelto mi problema. Si tiene razón la función es necesaria para ello. Y lo escribí Gracias por tu comentario. –

+0

¿Deseas compartir tu función, @PratikGujarathi? Sé que es bastante simple, pero salvaría a los futuros espectadores de esta pregunta en algún momento. – sfarbota

3

Utilice el siguiente código

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 

Gracias!

Cuestiones relacionadas